将Ajax与Google Analytics结合使用

时间:2010-11-21 08:29:36

标签: javascript ajax google-analytics

我正在创建一个网站,其中主要内容由Ajax调用更改,我想添加Google Analytics代码(使用async _gaq方法)。 我知道我需要将带有URI的_trackPageview事件推送到_gaq。我有两种方法可以做到这一点:

1)在我的链接和表单上使用onclick属性(或用JQuery绑定事件),例如:onlink =“_ gaq.push(....)”

2)由于我的ajax代码在从ajax请求接收数据时可以处理脚本,因此我可以在提供ajaxed页面时在这样的脚本片段中添加_gaq.push(...)调用。

使用第一个选项,我猜想会产生更清晰,更简洁的代码。但是,缺点是我必须记住放入所有链接并形成分析代码,如果我在带有JS验证的表单上使用它,即使验证失败,也会通过GA分析点击。

第二种选择似乎不太干净,但解决了上述问题。我可以有一个GA代码,只检查我们是否正在服务ajax或普通页面并相应地输出JS片段。此外,只有在真正提交表单时才会记录表单提交。

我将不胜感激任何想法或意见。也许有更多的考虑因素或方法可以做到这一点?

由于 亚龙

2 个答案:

答案 0 :(得分:4)

如果您使用jQuery,有一些更聪明的方法可以做到这一点。

一种可能性是绑定到事件ajaxSuccess

$(document).ajaxSuccess(function(e, xhr, opt){
  _gaq.push(['_trackPageview', opt.url]);
});

然后从那里开始,所有jQuery ajax调用都会触发此事件,它会将您通过Ajax请求的url推送到_gaq

请记住,它会按照您的要求推送网址。所以如果你打电话:

$.ajax('http://www.mydomain.com/path')

http://www.mydomain.com/path将被推送到_gaq。可能那不是你想要的。所以最好像这样调用.ajax

$.ajax('/path');

现在只有/path被推送到_gaq。

如果您确实需要使用整个域名,那么在将其推送到Google Analytics之前清理该网址是一个好主意。

答案 1 :(得分:1)

我将此作为新答案发布,因为这是一种不同的方法。

如果您不想绑定到全局事件ajaxSucess,可以使用延迟手动执行此操作。

$.ajax('/page').done(function(){
  _gaq.push(['_trackPageview', '/page']);
}).done(function(response){
  // Do something with the response
});

糟糕的是完成的回调没有收到url。所以你将两次输入网址。既然你可能要做几次,那么创建辅助函数可能很方便:

function GaAjax(url){
  return (function(u){
    return $.ajax(u).done(function(){
      _gaq.push(['_trackPageview', u]);
    });
  })(url);
}

现在,当您正在执行应发送给Google Analytics的Ajax请求时,您可以调用它而不是jQuery .ajax

GaAjax('/page').done(function(){
  // Do something with the response
});