Google 跟踪代码管理器回调

saq*_*saq 5 google-tag-manager

我收到了一些要放在网站上的 dataLayer 定义。它们中的大多数涉及单击例如主菜单链接。但我看到以下问题:

  • 我做 dataLayer.push(some data...)
  • 然后 GTM 调用 AJAX 命中连接的服务,例如 Google Analytics
  • 但是随后页面重新加载(这不是像 angularjs 站点那样的 SPA)到新位置,并且这些点击(在我看来)被中止 - 没有保存数据

我在谷歌上搜索了一些解决方案,但似乎没有人遇到过这样的问题 - 很奇怪,它看起来像是一个基本问题。也许 GTA 会自动处理它而我不必考虑这个?

感谢帮助。

Eik*_*rff 3

GTM 不会调用 AJAX(除非您将 Ajax 调用放在自定义 HTML 标记中)。

Google Analytics 获取所有配置的标签、触发器和变量,并将它们包装到一个巨大的 JavaScript 文件中。该文件将加载到您的页面中并在页面的上下文中进行评估。如果触发器匹配,相应的标签就会插入到页面的 DOM 中。到那时,GTM 中的标签与编码到页面源代码中的标签之间就没有太大区别了。

与硬编码标签一样,当页面重新加载时,确实会发生点击中止的情况。这就是为什么 GTM 有一个名为“事件回调”的功能,您可以传递一个仅在事件触发的所有标签都被触发后才执行的函数。查看Google Analytics 增强型电子商务文档中的示例:

function(productObj) {
  dataLayer.push({
    'event': 'productClick',
    'ecommerce': {
      'click': {
        'actionField': {'list': 'Search Results'},      // Optional list property.
        'products': [{
          'name': productObj.name,                      // Name or ID is required.
          'id': productObj.id,
          'price': productObj.price,
          'brand': productObj.brand,
          'category': productObj.cat,
          'variant': productObj.variant,
          'position': productObj.position
         }]
       }
     },
     'eventCallback': function() {
       document.location = productObj.url
     }
  });
Run Code Online (Sandbox Code Playgroud)

这里的事件回调是一个函数,仅在所有标签都被触发后才重定向到另一个 URL。

值得一提的是,Google Analytics 尝试通过sendBeacon API(如果适用)发送命中来避免数据丢失,该 API 不必等待服务器响应,因此即使用户离开页面,命中也会通过(但是 sendBeacon 在 IE/Edge 上不可用)。