2015-06-19 36 views
3

更新:研究确保脚本不会缓存事件,但到目前为止搜索并没有顺利进行。跟踪在GA中滚动虚拟页面视图

我正在使用下面的脚本来跟踪GA中的虚拟页面浏览量,该网站有一个非常长的主页,我们正在跟踪此页面。我遇到的问题是,一旦用户向下滚动到下面的部分,如果他们向上滚动(使其每页最多1个视图),它就不会注册为新的页面视图。任何帮助,这将不胜感激。我使用jQuery和下面的脚本发送/跟踪。

此脚本是在标记之前实施的Universal Analytics代码的补充。下面的第一个代码是正常的Analytics代码,因为这是帐户定义的位置,所以需要正确运行调试器。第二个脚本是我遇到问题的脚本。

普通UA脚本(位于head标签):

<script> 
    (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', 'UA-123456-1', 'auto'); 
    ga('require', 'displayfeatures'); 
    ga('send', 'pageview'); 
</script> 

脚本用于滚动虚拟页面访问量:

<script language="javascript"> 

// Predefined variable 
Frequency = 10;  

//Tracking and Sending 
_frequency = Frequency; 
_repetition = 100/Frequency; 
var _scrollMatrix = new Array(); 
for (ix = 0; ix < _repetition; ix++) { 
    _scrollMatrix[ix] = [_frequency, 'false']; 
    _frequency = Frequency + _frequency; 
} 
$(document).scroll(function (e) { 
    for (iz = 0; iz < _scrollMatrix.length; iz++) { 
     if (($(window).scrollTop() + $(window).height() >=  $(document).height() 
* _scrollMatrix[iz][0]/100) && (_scrollMatrix[iz][1]== 'false')) { 
      _scrollMatrix[iz][1] = 'true'; 
      ga('send', 'pageview', _scrollMatrix[iz][0]+'%'); 
     } 
    } 
}); 

</script> 

This is how it currently shows in Analytics

+0

我被告知,我所需要做的就是修改代码,不要缓存滚动点,或重置每个滚动事件上的缓存。我会研究如何做到这一点。 – Ryan

+0

你需要做的不仅仅是这些。至少您需要从滚动事件中删除循环,因为您要在每次滚动中发送10%-100%的值,并且您需要将对Google Analytics的调用修复为正确的方法调用(并发送用户在页面中的实际位置)。我真的没有在下面写下我的答案来惹恼你或什么,只是指出你的脚本有几个问题。 –

+0

我并不是想让它看起来好像我忽略了你的建议,但我真的很欣赏你为此付出的时间和精力。但是,从我完成的每一项测试中,我们都会按照预期向Google Analytics报告,除非用户滚动到XX%并且该页面视图发送一次,否则如果用户返回该页面滚动位置。 使用ga('send','pageview','page path')的格式;确实发送给GA,因为这是他们建议的基本虚拟页面视图。 我绝不是一个编码专家,但他们正按预期发送(一次)。 – Ryan

回答

1

您脚本创建具有阈值的一个数组的数组由“悔改”变量确定的值从10到100作为索引(这并不意味着你认为它的意思;你的意思是“重复”,除非你真的很抱歉写这个脚本)。如果数组的数组是布尔型“false”,则每个元素的值之一。

这个布尔值是在document.scroll函数的循环中求值的。如果该值为“false”,则执行浏览量并将该变量设置为“true”。发生在此位:

if (($(window).scrollTop() + $(window).height() >=  $(document).height() 
* _scrollMatrix[iz][0]/100) && (_scrollMatrix[iz][1]== 'false')) { 
      _scrollMatrix[iz][1] = 'true'; 

这意味着各地的布尔为_scrollMatrix[iz][1]接下来的时间是“真”,不再执行,如果分支。

如果您想启用Google Analytics代码,无论您是否可以移除布尔值及其评估的部分。所以,你的脚本应该是这样的:

<script language="javascript"> 

// Predefined variable 
Frequency = 10;  

//Tracking and Sending 
_frequency = Frequency; 
_repentance = 100/Frequency; 
var _scrollMatrix = new Array(); 
for (ix = 0; ix < _repentance; ix++) { 
    _scrollMatrix[ix] = [_frequency]; 
    _frequency = Frequency + _frequency; 
} 
$(document).scroll(function (e) { 
    for (iz = 0; iz < _scrollMatrix.length; iz++) { 
     if (($(window).scrollTop() + $(window).height() >=  $(document).height() * _scrollMatrix[iz][0]/100) ) { 
      ga('send', 'pageview', _scrollMatrix[iz][0]+'%'); 
     } 
    } 
}); 

</script> 

虽然你说的脚本跟踪我必须指出的是,所产生的GA代码其实是错误的。您跟踪调用是这样的:

ga("send", "pageview", "10%") 
ga("send", "pageview", "20%") 
... 

你不能简单地把在炫目的百分比作为参数传递给函数,并希望它得到的地方(编辑哎呀,我的坏当然第三个参数的作品记录。作为虚拟页面名称,所以如果你想将百分比作为页面名称,那么该位就可以)。

由于您的脚本在每个滚动事件上执行循环,因此它实际上会发送数十个ga调用,并且计算出的百分比与用户的实际滚动位置无关(它仅发送每个10-100%的所有值滚动事件)。加上每个滚动事件的循环使得浏览器资源方面的成本非常高昂。当然,您每秒的点击次数和每次会话的点击次数都很高,而且您的脚本会很快达到这些配额。

我会坦率地建议您放弃脚本并使用现有的测试解决方案之一。jQuery scrollDepth插件是相当不错的,你应该能够适应你的需求(比重写你自己的更容易)。

+0

是否可以发送自定义事件,例如'ga(“send”,“pageScroll”,true)'? – Soundar

+0

编号命中类型是预定义的 - pageView,事件,usertiming和其他一些。分析中没有滚动事件匹配类型。您可以发送一个事件,该事件需要一些参数(类别和操作,以及可选的标签和值 - 请参阅https://developers.google.com/analytics/devguides/collection/analyticsjs/events)。 –

+0

我会看看你建议的scrollDepth插件。而“重复”问题是我不完全确定我是如何忽略它的。 但是,以下格式的跟踪调用在Google Analytics中显示效果不错,并允许通过简单过滤器调整名称。 (https://developers.google.com/analytics/devguides/collection/upgrade/reference/gajs-analyticsjs#virtual-pageviews) ga(“send”,“pageview”,“10%”) 真实问题在于页面浏览仅触发一次,如果用户滚动备份页面,则不会重复。 – Ryan