在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。在这种情况下如何执行事件跟踪?
修改 因为一张图片可以胜过千言万语......
当我点击链接时,firebug会向我显示这一系列请求(此处显示前四个,后面是填写页面内容的请求之后)
答案 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)
使用
<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
]);
}