我正在使用PJAX https://github.com/defunkt/jquery-pjax,我想知道,因为整个页面不会改变用谷歌分析跟踪分析的最佳方式吗?
答案 0 :(得分:40)
接受的答案已不再有效,因为正如Ruy Diaz评论的那样,这已从PJAX in this commit中移除。
这是我的解决方案。在 pjax:end 事件中,设置GA位置,然后发送综合浏览量。
使用pjax:end事件是因为它在“跟随pjaxed链接”(从服务器加载)和“on back / forward navigation”(从缓存加载)时被触发。见pjax events documentation
$(document).on('pjax:end', function() {
ga('set', 'location', window.location.href);
ga('send', 'pageview');
});
或使用旧版本的GA
$(document).on('pjax:end', function() {
if( window._gaq ) {
_gaq.push(['_trackPageview', window.location.href]);
}
});
我不得不手动设置位置变量,因为它没有发现它已经改变了。
答案 1 :(得分:18)
编辑:请注意,现在不再是这样了。请参阅下面的评论。
Defunkts jquery-pjax默认会为你实际处理这个问题(至少对谷歌分析而言)。基本上每当调用pjax页面加载时,它都会告诉gaq对象记录新页面。
它用来执行此操作的代码如下所示:
// Google Analytics support
if ( (options.replace || options.push) && window._gaq )
_gaq.push(['_trackPageview'])
答案 2 :(得分:2)
阅读此http://code.google.com/apis/analytics/docs/tracking/asyncTracking.html和http://code.google.com/apis/analytics/docs/tracking/asyncMigrationExamples.html
Google Analytics(分析)'_trackPageview是一种在ga.js跟踪网站上使用的功能,可让您跟踪网站上未生成综合浏览量的事件。使用_trackPageview JavaScript,您可以为Flash事件,JavaScript事件,文件下载,出站链接等分配特定的页面文件名,例如_gaq.push(['_trackPageview', '/home/landingPage']);
在成功的ajax请求中,您只需要告诉GA“页面”的“URL”。
答案 3 :(得分:1)
我使用PJAX而不是整个页面加载,每个页面加载实际上可以生成几个PJAX请求。
要安全地在网站上工作,我只会在网址更改时提交活动。这不会捕获刷新,但它比每页加载3x +点击次数要好。
href = window.location.href;
if (window.LAST_GOOGLE_ANALYTICS_LOCATION !== href) {
window.LAST_GOOGLE_ANALYTICS_LOCATION = href;
ga('set', 'location', href);
ga('send', 'pageview');
console.log("Analytics: sending hit, this is a new url: " + href);
} else {
console.log("Analytics: not sending hit; same url as before: " + href);
}
答案 4 :(得分:1)
@andrewtweber的答案几乎是正确的,但pjax:complete
仅在页面加载后触发,而不是在恢复的页面上触发(例如,使用后退按钮导航)。
因此应该使用的事件是pjax:end
:
$(document).on('pjax:end', function() {
ga('send', 'pageview', window.location.href);
});
或者在使用旧版Google Analytics时:
$(document).on('pjax:end', function() {
_gaq.push(['_trackPageview', window.location.href]);
});
答案 5 :(得分:0)
location.href对我不起作用,我正在使用:
ga('send', 'pageview', location.pathname + location.search + location.hash);