使用 gtag (GA4) 手动生成 GA 链接器参数

jsw*_*wrr 6 javascript google-analytics google-tag-manager

背景

要将 client_id 从一个域传递到另一个域,Google 支持向作为跨域跟踪设置一部分的传出链接添加“链接器”参数。此链接器参数包含client_id, session_id(我相信,有关 Google Ads 的信息,例如gclid)和基本指纹 + 时间戳。在接收域上,如果浏览器指纹匹配并且时间戳不是太远,则传递的client_idsession_id会存储在第二域上的第一方 cookie 中并随后使用。

Analytics.js / GA-UA

使用analytics.js(GA-UA),您可以轻松执行以下操作,手动修饰 URL:

function decorateUrl(urlString) {
  var ga = window[window['GoogleAnalyticsObject']];
  var tracker;
  if (ga && typeof ga.getAll === 'function') {
    tracker = ga.getAll()[0]; // Uses the first tracker created on the page
    urlString = (new window.gaplugins.Linker(tracker)).decorate(urlString);
  }
  return urlString;
}
Run Code Online (Sandbox Code Playgroud)

然而,当仅加载 gtag 时,window.ga并且window.gaplugins未定义。据我所知,目前没有记录的方法可以使用 gtag 的链接器参数手动生成链接。

在 Google 的文档中,他们建议手动设置链接器。(https://support.google.com/analytics/answer/10071811?hl=en#zippy=%2Cmanual-setup)但这有几个缺点,例如我必须创建一个自定义的“指纹”逻辑(以便修饰的URL不共享),例如不包含 Google Ads 信息。不管怎样,我想使用内部 gtag 逻辑来装饰 URL。

“Hacky”解决方案

gtag 会自动装饰a标签(一旦单击),这些标签会导致 GA4 数据流设置中指定的跨域跟踪域(例如“test.com”),但我特别需要手动装饰 URL(即没有立即重定向到他们)。我考虑过执行以下操作:

  1. a使用要装饰的 URL创建一个虚拟的隐藏标签
  2. 防止重定向onclick='event.preventDefault();'
  3. 模拟点击隐藏元素,以便gtag自动将链接器url参数添加到href属性中
  4. 提取新的 href 属性
  5. 删除隐藏元素
function decorateUrlGtag(urlString) {
  var tempAnchorEl = document.createElement("a");
  tempAnchorEl.setAttribute("type", "hidden");
  tempAnchorEl.setAttribute("href", urlString);
  tempAnchorEl.setAttribute("onclick", "event.preventDefault(); return false");
  document.body.appendChild(tempAnchorEl);
  tempAnchorEl.click();
  var urlWithLinker = tempAnchorEl.href;
  tempAnchorEl.remove();
  return urlWithLinker;
}
Run Code Online (Sandbox Code Playgroud)

这也不起作用,因为 gtag 似乎没有注册该tempAnchorEl.click();调用。如果我手动单击链接,URL 将按预期进行修饰。

建议的解决方案

此处概述的解决方案(Google Analytics gtag.js Manually add the linker cross-domain parameter to URLs)也不适用于我:

  1. 答:即使在启动 gtag 后,我也没有看到全局 ga 元素
  2. 答案:同样的问题(未定义ga

您是否 (1) 知道是否有一种方法可以使用我忽略的 gtag 手动生成链接器参数,(2) 知道如何使我的“hacky”解决方案发挥作用,或者 (3) 有另一种可能的解决方案?

s6m*_*ike 0

我还没有理解这个解决方案,我不确定它能直接回答你的问题,但 Simo 确实在这里给出了如何配置 GA4 跨域跟踪的概述:

https://www.simoahava.com/gtm-tips/cross-domain-tracking-google-analytics-4/#how-to-configure-cross-domain-tracking-manually

他将问题分解为几个步骤,但没有详细说明。他提供了一段代码:

“...您还可以将 URL 参数值直接加载到 GA4 配置中,如下所示:

gtag('config', 'G-12345', {
  // Namespace roll-up trackers
  cookie_prefix: 'roll-up',
  // Pull in the Client ID from the URL
  client_id: (new URLSearchParams(document.location.search)).get('client_id'),
  // Pull in the Session ID from the URL
  session_id: (new URLSearchParams(document.location.search)).get('session_id')  
});
Run Code Online (Sandbox Code Playgroud)

希望有帮助!