新版Google Analytics(analytics.js)设置中无法跟踪事件。

63

我有一个网站,正在使用新版通用分析(analytics.js)进行跟踪。一切都已经设置好并且正常运行(页面浏览量、引荐等),使用以下代码片段:

<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-39570713-1', 'site.com');
  ga('send', 'pageview');

</script>

这位于</head>标签之前。

我正在使用JQuery来触发事件。我使用一个警告消息测试了JQuery,并且它被调用了,所以那不是问题。这是在点击按钮时触发的片段:

$('#submitButton').on('click', function() {
      ga('send', 'event', 'button', 'click', 'contact form');
    });

分析功能中的事件部分没有显示任何内容。我一直尝试点击按钮,甚至从不同的电脑上尝试,以确保它不会排除我的IP地址。因为Google提供的分析文档没有提供很多解释,所以我现在很茫然。


我也遇到了同样的问题。我可以在实时视图中看到事件,但在内容部分的事件下却看不到。有什么想法吗? - dicemaster
我也遇到了同样的问题。我在想是否因为我们正在跟踪的点击事件会产生新的页面加载(在你的情况下是表单提交,或者在我的情况下是点击链接)。由于我们正在“离开”页面,并且Google Analytics跟踪是异步的,我可以想象跟踪事件必须先被发送(这需要一些时间),然后才能执行原始的“点击”操作(提交或加载新页面)。Google Analytics提供了一个回调来完成这个过程:http://stackoverflow.com/questions/18428690/analytics-js-event-not-working-properly - Patrick Janser
20个回答

196

如果您正在使用Google Tag Manager,并且想通过代码触发一些事件,ga('send'...)似乎不足够。您需要先获取适当的分析对象:

if ("ga" in window) {
    tracker = ga.getAll()[0];
    if (tracker)
        tracker.send("event", "Test", "Test GA");
}
请注意,这假定您的网站只使用单个Google Analytics跟踪代码。如果您使用多个,则可能需要按名称或索引获取相应的代码。

4
以下是用于使用Google Tag Manager发送页面浏览事件的代码片段:const tracker = window.ga.getAll()[0]; if (tracker && tracker.set && tracker.send) { tracker.set('page', props.location.pathname) tracker.send('pageview') } 请注意,该代码需要与Google Analytics一起使用,并且应确保在网站上正确配置了Google Tag Manager。翻译时已尽力使其通俗易懂,但仍需确保在实施前对代码进行充分理解和测试。 - Denis
30
这对我有用。为什么在[Google Analytics事件跟踪页面](https://developers.google.com/analytics/devguides/collection/analyticsjs/events)中没有记录这个呢? - user2233706
4
关于 tracker.send 方法的相关文档,请参见 https://developers.google.com/analytics/devguides/collection/analyticsjs/tracker-object-reference#send。 - ᴍᴇʜᴏᴠ
1
这对我也解决了问题。 - Joseph at SwiftOtter
4
或者,只需像这样添加跟踪器名称:ga('gtm1.send','event','Test','Test GA'); - Bob H
显示剩余5条评论

36

7
针对那些使用 gtag.js 而非 analytics.js 的人。 - Anfuca

10

为了测试目的,您也可以使用hitCallback方法:

ga('send', {
  'hitType': 'event',         
  'eventCategory': 'button', 
  'eventAction': 'click',     
  'eventLabel': 'contact form',
  'hitCallback' : function () {
      alert("Event received");
   }
});

更新:逗号缺失。


8

目前针对这种情况的 Google Analytics(GA)发送新页面在单页应用程序(SPA)中最终看起来是这样的:

if (window.ga){
    window.ga.getAll()[0].set('page', location);
    window.ga.getAll()[0].send('pageview')
}

这显示了GA报告中所需的确切内容,例如访问新页面且标题等全部正确。


5
在我的情况下,问题是uBlock Origin阻止了分析脚本的加载。

4

我曾经遇到同样的问题。我需要新建一个属性,选择“通用分析”而不是“经典分析”(标记为“beta”),这样可以正确地捕获事件。


为什么这个没有文档 :( - Doydle
嗨,感谢@extrabacon!我所做的是:(1)创建一个新的分析属性,(2)将新的跟踪代码复制/粘贴到网站中,(3)查看事件跟踪工作但没有原因...这似乎是其中一种情况,您应该接受自己解决了问题,但不知道如何解决!哈哈! - vcoppolecchia

3

我曾经遇到过同样的问题,现在我认为我找到了解决方案,但是这让我对Universal Analytics留下了不好的印象。

我必须显式地使用同步的分析API。因此,不要像通常一样在<head>标签中包含代码片段,而是使用以下代码:

<script src="//www.google-analytics.com/analytics.js"></script>
<script>
  tracker = ga.create('UA-XXXXXXX-1', 'example.com');
  tracker.send('pageview');
</script>

那么你可以这样调用事件跟踪代码:
tracker.send('event', 'Category', 'Action', 'Label');

这将确保在用户导航到新页面开始加载之前,跟踪信标已发送到Google并得到确认。
这表明Universal Analytics需要某种额外的确认,超出了旧的ga.js分析代码所需的范围。因此,当您将事件附加到单击上,以将用户带到另一个页面时,无法发送该确认,因为浏览器已离开该页面并丢弃了当前的JavaScript执行堆栈。
也许这个问题只存在于某些执行环境中(我正在使用OSX Mountain Lion上的Chrome 34),这可能解释为什么更多的开发人员没有注意到这个问题。

2
今天我第一次需要设置分析数据,但我遇到了同样的麻烦。我发现处理多个跟踪器的最好方法是避免使用“getAll()”,具体步骤如下:
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

ga('create', 'UA-xxxxxx-y', 'auto', 'tracker');
ga('tracker.send', 'pageview');
ga('tracker.send', 'event', 'test', 'click', 'automaticEvent')

请注意,在创建方法中必须传递一个“名称”,然后使用 ga([trackerName].send, ...) 向该跟踪器发送事件。

参考文献:https://developers.google.com/analytics/devguides/collection/analyticsjs/accessing-trackers


2

1
我看不出代码本身有任何问题。您尝试过使用替代事件跟踪吗?
ga('send', {
  'hitType': 'event',          // Required.
  'eventCategory': 'button',   // Required.
  'eventAction': 'click',      // Required.
  'eventLabel': 'contact form'
});

我建议使用GA Debug Chrome插件来测试网站,该插件可以让您查看跟踪信标是否已发送。目前还没有官方的通用分析调试文档,但希望很快能够添加,因为ga_debug.js提供了许多有用的方法来找出分析实现中的问题...

实际上,为了解决这个问题,我只是回退到了经典分析工具...我尝试了这段代码,但它没有起作用。不确定新的 beta 分析工具或我的实现有什么问题,但回退后问题得到了解决。 - squeezemylime

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接