当用户导航到一个域内的其他页面时,Google Analytics如何跟踪事件

Eug*_*ica 16 google-analytics

在Google的文档中,据说可以通过以下方式跟踪事件:

<a onclick="_gaq.push(['_trackEvent', 'category', 'action', 'opt_label', opt_value]);">click me</a> 
Run Code Online (Sandbox Code Playgroud)

或更早版本:

<a onclick="pageTracker._trackEvent('category', 'action', 'opt_label', opt_value);">click me</a>
Run Code Online (Sandbox Code Playgroud)

我正在使用Firebug查看点击链接时发出的请求,我看到中止请求:

http://www.google-analytics.com/__utm.gif?utmwv=4.7.2&utmn=907737223&....

发生这种情况是因为浏览器在用户导航到新页面时卸载所有javascript.在这种情况下如何执行事件跟踪?

编辑: 因为一张图片可以胜过千言万语...... 替代文字

当我点击链接时,firebug会向我显示这一系列请求(此处显示前四个,后面是填写页面内容的请求之后)

Cra*_*ent 18

问题是脚本没有足够的时间在用户进入下一页之前完成运行.您可以做的是为您的GA代码创建一个包装函数,并在onclick中调用包装函数,在您的包装函数中触发GA代码后,设置超时并使用链接的url更新location.href.例:

<a href="somepage.html" onclick="wrapper_function(this,'category', 'action', 'opt_label', 'opt_value');return false;">click me</a>

<script type='text/javascript'>
function wrapper_function(that,category,action,opt_label,opt_value) {
  _gaq.push(['_trackEvent', category, action, opt_label, opt_value]);
  window.setTimeout("window.location.href='" + that.href + "'", 1000);
}
</script>
Run Code Online (Sandbox Code Playgroud)

代码会根据你的链接而有所不同,但希望你能得到这个想法 - 基本上它会在将用户带到目标url之前等待一段时间让脚本执行一些时间.

更新: 这个答案是几年前发布的,从那以后发生了很多事情,但我偶尔会得到反馈(和赞成),所以我想我会用新信息更新这个答案.这个答案仍然可行,但如果您使用的是Universal Analytics,那么可以使用hitCallback功能.该hitCallback功能也适用于他们的传统_gaq(ga.js),但它没有正式记录.

  • 在我看来非常麻烦.没有其他方法可以做到吗? (6认同)
  • @SamuelBarbosa这是一个古老的答案,从那以后发生了很多变化.我确实知道这一点,但并没有考虑更新旧答案.但是,自从我收到您的评论通知后,我更新了答案.谢谢! (2认同)

And*_*eas 10

Google的文档中回答了此问题:

使用

<script type="text/javascript">
function recordOutboundLink(link, category, action) {
  try {
    var myTracker=_gat._getTrackerByName();
    _gaq.push(['myTracker._trackEvent', ' + category + ', ' + action + ']);
    setTimeout('document.location = "' + link.href + '"', 100)
  }catch(err){}
}
</script>
Run Code Online (Sandbox Code Playgroud)

要么

<script type="text/javascript">
function recordOutboundLink(link, category, action) {
  try {
    var pageTracker=_gat._getTracker("UA-XXXXX-X");
    pageTracker._trackEvent(category, action);
    setTimeout('document.location = "' + link.href + '"', 100)
  }catch(err){}
}
</script>
Run Code Online (Sandbox Code Playgroud)

这与Crayon Violet的答案大致相同,但有一个更好的方法名称,是Google推荐的官方解决方案.

  • 文档现已更新为包含回调,因此不需要任意延迟. (2认同)