新Google Analytics(analytics.js)设置中未跟踪事件

时间:2013-04-01 13:05:09

标签: events google-analytics jquery analytics.js

我有一个网站,我正在使用新的Universal Analytics(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');
    });

Google Analytics的“事件”部分中没有显示任何内容。我一直点击按钮,即使是从不同的计算机,只是为了确保它不排除我的IP地址。由于Google提供的Analytics doc并未提供大量解释,因此我不知所措。

19 个答案:

答案 0 :(得分:88)

如果您使用的是 Google跟踪代码管理器,并且还希望通过代码触发某些事件,则ga('send'...)似乎不够。您需要先获取适当的分析对象:

if ("ga" in window) {
    tracker = ga.getAll()[0];
    if (tracker)
        tracker.send("event", "Test", "Test GA");
}

请注意,这假设您在网站上仅使用一个Google Analytics跟踪代码。如果您碰巧使用多个,则可能需要按名称或索引获取适当的。

答案 1 :(得分:7)

对于GA,目前... 对我来说,在SPA中发送新页面的外观终于像这样:

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

这恰好显示了GA报告中想要的内容,例如新页面已被命中,标题全部正确。

答案 2 :(得分:6)

出于测试目的,您还可以使用hitCallback方法:

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

更新:逗号丢失。

答案 3 :(得分:4)

我遇到了完全相同的问题。我必须创建一个新属性并选择“Universal Analytics”而不是“Classic Analytics”(它标记为“beta”)。现在可以正确捕获事件。

答案 4 :(得分:3)

我遇到了同样的问题,而且我认为我已经找到了解决方案,但它确实让我对口碑有了不好的看法。

我必须做的是明确使用同步分析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),这可能解释了为什么更多的开发人员没有注意到这个问题。

答案 5 :(得分:3)

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

答案 6 :(得分:1)

我看不出代码本身有什么问题。您是否尝试过使用备用事件跟踪?

ga('send', {
  'hitType': 'event',          // Required.
  'eventCategory': 'button',   // Required.
  'eventAction': 'click',      // Required.
  'eventLabel': 'contact form'
});

我还建议使用GA Debug Chrome插件测试网站,这样您就可以看到跟踪信号是否已发送。

截至目前,Universal Analytics的“官方”调试文档仍然缺失,但希望很快就会添加,因为ga_debug.js提供了很多有用的方法来找出Google Analytics实施的错误...

答案 7 :(得分:1)

今天我需要第一次设置分析,我发现自己遇到了同样的麻烦。

我发现处理多个跟踪器以避免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')

请注意,您必须将“名称”传递给create方法,然后使用ga([trackerName].send, ...)

向该跟踪器发送事件

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

答案 8 :(得分:1)

新版本的分析功能具有新的语法。替换下面的行;

ga('send', 'event', 'button', 'click', 'contact form');

与此;

gtag('event', 'click', {'event_category' : 'button',
  'event_label' : 'contact form'});

参考; https://developers.google.com/analytics/devguides/collection/gtagjs/events

答案 9 :(得分:0)

我遇到了同样的问题,看起来跟踪了事件,但GA仪表板不允许浏览它们。这是我解释“事件访问次数:1071”的唯一方法,但GA仪表板显示的是“总事件:0”。

UPD :使用GA Chrome调试,发现了问题;第一种方法不起作用(发送没有附加任何数据的事件),但第二种方法没问题。

答案 10 :(得分:0)

我正在使用 Vue.js,似乎我每次都必须创建 ga,即使它已经在窗口中创建:

ga('create', yourGtagId, 'auto');
ga('send', {});

答案 11 :(得分:0)

除了事件(实时和报告)外,我都看到了其他所有内容。我的步骤包括:

  • 打电话给Google,他们发现我的Google Optimize GTM标签正在阻止所有事件发送到Google Analytics(分析)。
  • 从Google跟踪代码管理器中删除了Optimize跟踪代码,事件开始在Google Analytics(分析)中弹出。

如果遇到此问题,请尝试暂停一些标签。还将事件代码连接到某个目标。

答案 12 :(得分:0)

onclick ga()函数不适用于我,我还在<head>部分添加了'analytics.js'-

<a mat-list-item routerLink='/dashboard' onclick="ga('send', 'event', 'Dashboard', 'Click', 'demoClick, 30);">
   <mat-icon color="accent">home</mat-icon>
   <span class="side-item">Dashboard</span>
</a>

gtag()函数对我来说很好用,只有<head>部分中添加的'gtag.js',不需要'analytics.js'或可以将其删除-

<a mat-list-item routerLink='/dashboard' id="sideNavDashboard" onclick="gtag('event', 'Click', {'event_category':'Dashboard', 'event_label':'demoClick', 'value':'30'});">
   <mat-icon color="accent">home</mat-icon>
   <span class="side-item">Dashboard</span>
</a>

结果(Google Analytics(分析)输出)-

enter image description here

答案 13 :(得分:0)

如果有人试图向Google Analytics(分析)发送事件,并且想知道为什么send函数在没有任何明确提示的情况下什么也不做,我建议使用其库的调试版本。它将在浏览器控制台中记录一些有用的提示。

与其从https://www.google-analytics.com/analytics.js获取脚本,不如从https://www.google-analytics.com/analytics_debug.js获取脚本。我从他们的documentation中发现了这一点。

答案 14 :(得分:0)

我开始工作 - 我的例子是使用新的Universal Analytics。

<script type="text/javascript">
    function sliderOnChange() {
    var period = window.convertDays(($("#PeriodSlider").slider("value")));
    var amount_of_credit = $("#AmountOfCreditSlider").slider("value");
    var gaEventInput = "£" + amount_of_credit + " for " + period;
    ga('send', 'event', 'slider', 'sliding', gaEventInput);
}
</script>
  1. 确保Google Analytics / Google跟踪代码管理器过滤器不排除来自其他域的任何流量。 (也许你正在测试它以使用不同的域来工作)
  2. 在ga中重新检查您的GA ID和域名('create','UA-39570713-1','site.com');
  3. 在Google Analytics(GA)中创建新的配置文件以进行测试,并在您在GA中定义的同一域中调试html。
  4. 在GA中更改今天的日期 - 您可能还需要等待一段时间才能显示在GA

答案 15 :(得分:0)

您还应该考虑在ga脚本能够执行'send'方法之前触发提交事件后页面可能会重新加载。为避免这种情况,您可以使用'hitCallback'机制,即阻止提交,调用ga send-method并在回调中提交表单数据。

答案 16 :(得分:-2)

在我的情况下它没有用,因为我直接从文件系统加载了HTML文件。

通过网络服务器加载页面就可以了。

对于本地开发,像https://github.com/tj/serve这样的工具做得很好。

答案 17 :(得分:-2)

我解决问题的唯一方法是回滚到之前版本的Google Analytics(非测试版):

<script type="text/javascript">

  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'UA-39570713-2']);
  _gaq.push(['_setDomainName', 'optimino.com']);
  _gaq.push(['_trackPageview']);

  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();

</script>

答案 18 :(得分:-4)

您还可以使用我为新的Universal Analytics编写的jquery插件: https://github.com/pascalvgemert/jquery-analytics-event-tracking