【问题标题】:Google analytics: dataLayer.push not working?谷歌分析:dataLayer.push 不起作用?
【发布时间】:2015-01-30 12:47:15
【问题描述】:

基于此线程:Tracking events using Google Tag Manager

我创建了自己的版本,例如位于http://test.site.com

<!DOCTYPE html>
<html>
<head>
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>

  <script>
    window.dataLayer = window.dataLayer || [];  

    dataLayer.push({
      'event':'GAevent',
      'eventCategory': 'App4', 
      'eventAction': 'Click',
      'eventLabel': 'iOS4'
    });


  </script>
</head>

<body>
  <!-- Start google tag manager -->
  <script>
    (function(w, d, s, l, i) {
        w[l] = w[l] || [];
        w[l].push({
            'gtm.start': new Date().getTime(),
            event: 'gtm.js'
        });
        var f = d.getElementsByTagName(s)[0],
            j = d.createElement(s),
            dl = l != 'dataLayer' ? '&l=' + l : '';
        j.async = true;
        j.src =
            '//www.googletagmanager.com/gtm.js?id=' + i + dl;
        f.parentNode.insertBefore(j, f);
    })(window, document, 'script', 'primecont', 'GTM-1234');
  </script>
  <!-- End google tag manager -->

</body>
</html>

我打开了谷歌标签管理器调试模式并在谷歌分析上实时观看。

我对一个标签有 2 条防火规则:

  1. {{url}} 包含 test.site.com
  2. {{event}} 等于 GAevent

我得到的是实时谷歌分析中的“event category: undefined”和“event action: undefined”。

如果我删除 "{{url}} contains test.site.com",则不会实时显示任何内容。

更新 我使用了一个单独的谷歌标签管理器帐户并创建了一个测试页面,所以一切都是最低限度的。它似乎实时工作。非工作的谷歌标签管理器由学校和院系共享。我怀疑是这个原因?

【问题讨论】:

  • 您是否记得在您的 Analytics 事件跟踪代码中插入相应的宏?另外,不要对 GTM 和 GA 都有所谓的“事件”这一事实感到困惑,它们是完全不同的东西。
  • 我确定问题是@EikePierstorff 提到的。您没有创建并插入相应的 eventCategory、eventAction、eventLabel 宏。
  • 我已经为 eventCategory、eventAction、eventLabel 创建了 dataLayer marcos。我需要为 GAevent 创建自定义事件吗?另一个问题:我将 '{{event}} equals GAevent' 设置为触发规则。 dataLayer.push({'event':'GAevent', ...}) 真的会触发 GAevent 吗?
  • 根据 dataLayer 推送的位置,您似乎只在此特定页面上触发了代码。这是你的意图吗?除了这个页面加载之外,没有其他东西可以触发推送。
  • 我的最终目标是,如果我点击一个按钮,那么谷歌分析将在“事件类别”中记录点击操作。我想如果我能够让它在页面加载时工作,那么我离我的目标更近了 1 步。我假设 dataLayer.push({'event':'GAevent', ...}) 在页面加载时实际上触发了 GAevent?

标签: javascript google-analytics google-tag-manager


【解决方案1】:

由于多种原因,您的代码使用错误的变量触发。

如果dataLayer.push() 是正确的,您的标签将只需要 {{url}} 匹配 RegEx .* 作为其规则,因为在容器 sn-p 之前发生的所有推送都可用到所有页面规则。

但是,如果您愿意,您也可以推送'event' : 'GAEvent' pre-container-sn-p。但是您必须删除 {{url}} 规则,因为它会使您的代码触发 两次:首先 {{event}} 等于 GAEvent 然后使用 {{url}} 规则。

即使你修复了上述问题,你的代码也不起作用的原因是你在容器 sn-p 中重命名了 dataLayer 对象:

})(window, document, 'script', 'primecont', 'GTM-1234');

'primecont' 字符串是您提供的 Google 跟踪代码管理器数据层的新名称,出于某种原因。这就是为什么您的 dataLayer.push() 不起作用的原因,因为 Google 跟踪代码管理器正在侦听 primecont.push()

因此,要么将所有 dataLayer 交互更改为 primecont,要么将容器 sn-p 的调用行编辑为如下所示:

})(window, document, 'script', 'dataLayer', 'GTM-1234');

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-10-05
  • 1970-01-01
  • 1970-01-01
  • 2011-06-26
  • 2017-01-08
  • 2015-02-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多