使用Google Analytics进行Rails 4 turbolinks

我想知道在Rails 4中实施Google Analytics跟踪代码以及turbo链接的最佳方式是什么。普通代码段是否有效? 我也看过这个gem ,但我不确定它是做什么的。

我认为更好的想法是使用新的Universal Analytics(来自analytics.js文件)。

通用分析解决方案

(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o), m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', "#{GA_UA}", "#{GA_URL}"); ga('send', 'pageview'); 

然后,当你想发送一个事件时,你可以使用

  

小心将此代码渲染到正文中,而不是在头部。 Turbo-links只替换身体。

而且要小心:

1)GA_URL需要匹配您网页的url

2)事件实时显示,但在事件选项卡中,它们仅在24h +之后出现

3)您的帐户的属性需要为“通用”才能使此解决方案正常运行

Universal Analytics文档:

https://support.google.com/analytics/answer/2790010?hl=en&ref_topic=2790009

我喜欢vladCovaliov的解决方案,因为似乎大多数新帐户默认使用Universal Analytics(在我看来这也是更好的function)。 但是,我认为这个答案需要与注释掉初始网页浏览的其他建议相结合,使用page:change事件,跟踪网页浏览,而不是事件

例如,在

 <% if Rails.env.production? %>  <% else %>  <% end %> 

然后在js文件中,您已通过资产管道加载:

 $(document).on('page:change', function() { ga('send', 'pageview', window.location.pathname); }); 

这将记录您使用或不使用Turbolinks加载的每个页面的综合浏览量。 请注意, window.location.pathname是必需的,否则您可以获取为所有后续页面加载加载的第一个页面的URL。 (如果您想要删除:id RESTful URL中的:id路径段,这也为您提供了一个编辑报告URL的好地方。)

您也可以轻松致电:

 ga('send', "event", category, action, label, count); 

报告您网站中其他有趣的javascript事件的事件。

我采用了一种不同的方法,我在一些网站上看到,但这似乎是合理的。

像往常一样将GA添加到标题中,但会对trackPageview事件进行一次小的修改,使其自动发生。

  

然后在body某处添加它,因为身体会被重新加载以进行turbolinks。

 <% if Rails.env.production? %>  <% end %> 

生产检查是可选的,但如果您正在积极开发,这是一种不用GA跟踪localhost命中的好方法。 另一个好处是你不必担心搞乱页面:更改或页面:加载绑定,你可以确信它可以在GA可跟踪的任何浏览器上工作,而不必担心双击或任何奇怪的东西。

快速浏览一下源代码显示,这个gem唯一能做的就是在资产管道中添加一些javascript

 # google-analytics-turbolinks/lib/assets/javascripts/google-analytics-turbolinks.js.coffee if window.history?.pushState and window.history.replaceState document.addEventListener 'page:change', (event) => # Google Analytics if window.ga != undefined ga('set', 'location', location.href.split('#')[0]) ga('send', 'pageview') else if window._gaq != undefined _gaq.push(['_trackPageview']) else if window.pageTracker != undefined pageTracker._trackPageview(); 

这里的所有都是它的。 您可以使用gem或手动将此类代码段添加到您的javascript-assets中。

我很欣赏scottwb的答案,但遗憾的是它不适用于Rails 5.在Rails 5中,Turbolinks事件被重命名。 ‘page:change’事件被重命名为’turbolinks:load’。 这就是他的例子不再适用的原因。

您可以在此处找到有关如何重命名的概述: https : //github.com/turbolinks/turbolinks/blob/master/src/turbolinks/compatibility.coffee

由于这花了我一些时间来弄清楚,我正在为所有追随我的人发布适当的Rails 5实现。

将以下代码放在

   

然后在资产管道中的js文件(例如, application.js )中:

 $(document).on('turbolinks:load', function() { ga('send', 'pageview', window.location.pathname + window.location.search); }); 

请务必将“UA-XXXXXXXX-X”替换为您的Google Analytics ID。

这个解决方案对我来说是最好的: http : //reed.github.io/turbolinks-compatibility/google_analytics.html 。

它至少需要Turbolinks v2.1.0或更高版本。

我们刚刚使用Google提供的标准代码段,将其翻译为CoffeeScript,然后修改了最后一个操作,以便它与“ready”和“page:load”事件绑定。 我们还添加了条件语句,仅在当前访问者不在管理员处时才发送数据(因此我们的数据尽可能保持干净)。

 ((i, s, o, g, r, a, m) -> i["GoogleAnalyticsObject"] = r i[r] = i[r] or -> (i[r].q = i[r].q or []).push arguments return i[r].l = 1 * new Date() a = s.createElement(o) m = s.getElementsByTagName(o)[0] a.async = 1 a.src = g m.parentNode.insertBefore a, m return ) window, document, "script", "//www.google-analytics.com/analytics.js", "ga" ga "create", 'UA-XXXXXXXX-XX', "yourdomain.com" $(document).on 'ready page:load', -> ga "send", "pageview", window.location.pathname unless $('body').data('admin') is true 

根据这个网站 ,你只需要做一些修改。 Turbolinks的问题在于它只更新网站的部分内容,因此,Google Analytics通常不会感知页面已更改。 因此,您必须通过将以下CoffeeScript添加到assets / javascript文件夹中的文件来手动通知它:

 $(document).on 'page:change', -> if window._gaq? _gaq.push ['_trackPageview'] else if window.pageTracker? pageTracker._trackPageview() 

注意:这不是我的代码,它直接来自以前链接的网站