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

时间:2010-09-29 16:04:37

标签: google-analytics

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

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

或更早版本:

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

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

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

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

修改 因为一张图片可以胜过千言万语...... alt text

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

4 个答案:

答案 0 :(得分: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>

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

<强>更新 这个答案是在几年前发布的,从那以后发生了很多事情,但我偶尔会得到反馈(和赞成),所以我想我会用新信息更新这个答案。这个答案仍然可行,但如果您使用的是Universal Analytics,则可以使用hitCallback功能。 hitCallback function is also available to their traditional _gaq (ga.js)但它没有正式记录。

答案 1 :(得分:10)

Google's documentation

回答了这个问题

使用

<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>

<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>

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

答案 2 :(得分:2)

如上所述,这是由于在异步调用返回之前页面为unloaded。如果您想实施一个小延迟以允许gaq同步,我建议如下:

首先添加一个链接并添加一个额外的类或data属性:

 <a href="xxx" data-track-exit="true">My Link</a>

然后添加到您的Javascript:

 $("a[data-track-exit]").on('click', function(e) {
   e.preventDefault();
   var thatEl = $(this);
   thatEl.unbind(e.type, arguments.callee);
   _gaq.push( [ "_trackEvent", action, e.type, 'label', 1 ] );
   setTimeout(function() {
     thatEl.trigger(event);
   }, 200);
 });

我并不真的宽恕这种行为(例如,如果你要访问你网站上的另一个页面,尝试捕获该页面上的数据),但这是一个不错的止损。这不仅可以推断为click事件,还可以形成提交和其他任何也会导致页面卸载的事件。希望这有帮助!

答案 3 :(得分:0)

我有同样的问题。尝试这个,它适合我。看起来ga不喜欢数字作为标签值。所以,将它转换为字符串。

trackEvent: function(category, action, opt_label, opt_value){
    if(typeof opt_label === 'undefined') opt_label = '';
    if(typeof opt_value === 'undefined') opt_value = 1; 
    _gaq.push([
        '_trackEvent', 
         String(category), 
         String(action), 
         String(opt_label), 
         opt_value
    ]);
 }