Google Analytics(分析):dataLayer.push无法正常工作吗?

ken*_*ter 5 javascript google-analytics google-tag-manager

基于此主题:使用Google跟踪代码管理器跟踪事件

我创建了自己的版本,该版本位于例如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>
Run Code Online (Sandbox Code Playgroud)

我打开了Google跟踪代码管理器调试模式,并在Google Analytics(分析)上实时观看了它。

我有2个标记的防火规则:

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

我得到的是实时Google Analytics(分析)中的“ event category: undefined”和“ event action: undefined”。

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

更新 我使用了一个单独的Google跟踪代码管理器帐户并创建了一个测试页,因此一切都已降至最低。似乎是实时工作。无效的Google标记管理器由学校和教职员工共享。我怀疑这是原因吗?

Sim*_*ava 5

出于多种原因,您的代码触发了错误的变量。

如果dataLayer.push()正确,则您的Tag只需要将{{url}}匹配RegEx。*作为其规则,因为在容器代码片段之前发生的所有推送都可用于“所有页面”规则。

但是,'event' : 'GAEvent'如果您愿意,也可以按一下容器前代码段。但是随后,您必须删除{{url}}规则,因为这会使您的代码触发两次:首先使用{{event}}等于GAEvent,然后使用{{url}}规则。

即使解决了上述问题,代码也无法正常工作的原因是因为您已在容器代码段中重命名了dataLayer对象:

})(window, document, 'script', 'primecont', 'GTM-1234');
Run Code Online (Sandbox Code Playgroud)

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

因此,将您所有的dataLayer交互都更改为primecont,或编辑容器代码段的调用行,如下所示:

})(window, document, 'script', 'dataLayer', 'GTM-1234');
Run Code Online (Sandbox Code Playgroud)