在GA中跟踪滚动虚拟页面视图

时间:2015-06-19 15:56:04

标签: javascript jquery google-analytics

更新:考虑到确保脚本不会缓存事件,到目前为止搜索还不顺利。

我使用下面的脚本来跟踪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

1 个答案:

答案 0 :(得分: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]的布尔值为“true”且不再执行if分支。

如果您要触发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%")
...

你不能简单地将裸百分比作为该函数的参数,并希望它被记录在某处(编辑 oops,我的坏。当然第三个参数作为虚拟页面名称,所以如果你想把百分比作为页面名称,那就好了。

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

我坦率地建议您放弃脚本并使用现有的测试解决方案之一。 jQuery scrollDepth插件非常好,您应该能够根据自己的需要进行调整(比重写自己的更容易)。