2011-12-12 153 views
7

我跟踪一个网站,刊载我的一个项目,这个代码在下载按钮点击:跟踪下载按钮点击与分析利用事件

function trackDownload(link) { 
    try { 
     _gaq.push(['_trackEvent', 'Downloads', 'Click', 'Setup executable']); 
     setTimeout('document.location = "' + link.href + '"', 100); 
    } catch (err) {} 
    return false; 
} 

而且按钮的东西为:

<a href="files/setup.exe" onclick="return trackDownload(this);">Download</a> 

因此,当用户点击它时,会将事件推送到Google Analytics,然后用户被重定向到该文件。

这也适用于外部链接跟踪,没有区别。

现在我的问题。 我可以确定在用户重定向之前,Analytics事件是“已处理”的吗?如果不是,那么重定向会导致事件丢失?目前正在跟踪事件,但我无法确定它们是全部是

我读书,我也可以尝试的东西有点不同,推重定向功能到分析队列:

_gaq.push(function() { document.location = link.href; }); 

但是,如果这个工程现在还不清楚,或者如果它只是相当于以前的一个。实际上,here据说“调用_gaq.push [...]执行命令,因为它们被按下”“。

回答

7

你是对的,你可以push functions onto the analytics queue。由于功能或跟踪事件都执行/顺序进行评估,你将他们推到数组,你应该能够做到这一点:

function trackDownload(link) { 
    _gaq.push(['_trackEvent', 'Downloads', 'Click', 'Setup executable']); 
    _gaq.push(function() { document.location = link.href }); 
    return false; 
} 

注意,try/catch语句是没有必要的,因为push() ISN”没有记录扔任何东西(我建议删除它,因为空的catch块可以mask other problems)。

你问:

但是,如果这个工程现在还不清楚,或者如果它只是相当于以前的一个。

在你的第一个例子(推,setTimeout的),该事件将被丢失,如果当你重定向(因为在那个时候,_gaq只是一个数组)分析未完成加载。在使用push(function...的版本中,无论Google Analytics在用户点击下载按钮时是否完成加载,都会在重定向之前记录该事件。出于这个原因,我会推荐使用push(function...

需要警告push(function...版本将等待分析在重定向发生之前完成加载(这听起来像您想要的),但您可能想要添加一种方法来处理分析不加载的情况。

+0

也许我可以在我发布的'_gaq'中推送重定向,然后在'catch'块中重复一遍,并在更迟的'setTimeout'(一两秒)中重复。所以如果'_gaq'出现问题,我可以肯定用户迟早会被重定向。 –

+0

我同意延迟的setTimeout是处理不分析案例的方式。但是,我认为一两秒钟可能会快一点。另外,我只注意到catch块是不需要的 - 我会更新我的答案。 –

+0

事实上,我不记得为什么我把这个'try..catch'块:)关于超时:我可以设置一个更长的一个(5秒)和点击时按钮上的微调。所以更快的用户不会有这种感觉,没有什么事情发生...... –