2014-11-05 57 views
3

谷歌新的增强型电子商务追踪具有一些非常棒的功能,包括展示数据和基于展示次数的点击率。这很好,但默认example given by Google是为页面加载中的每个产品设置addImpression。问题是,如果一个网站有大量的分类页面(例如一页上有100个产品),那么许多这些产品可能实际上并没有被查看过,因此“印象”确实没有发生,数据也不准确。使用滚动事件正确实施GA增强型电子商务addImpression

addImpression方法也可以通过事件发送,所以我的解决方法是将函数绑定到滚动事件,并使用jQuery Viewport plugin来查看某个项目是否真的在视图中。如果项目在视图中,它抓取我添加到每个产品的数据属性标签中的信息,它为该对象创建一个印象,并为其分配一个类'impressionSent',以便产品不会再次发送(阻止在单页加载时产生双倍的印象)。在每个函数的末尾,使用.promise()。done(),新的展示数据将与事件一起发送。

简单的脚本是:

$j(window).bind("scroll", function() { 
      $j('li.item:in-viewport').not('.impressionSent').each(function(){ 
      $j(this).addClass('impressionSent');   
       ga('ec:addImpression', { 
        'id': $j(this).attr('data-sku'), 
        'name': $j(this).attr('data-name'), 
        'category': $j(this).attr('data-category'), 
        'brand': $j(this).attr('data-brand'), 
        'list': 'Category', 
        'position': $j(this).attr('data-position')      
       });   
      }).promise().done(function() { 
       ga('send', 'event', 'scroll', 'impression', {'nonInteraction': true});  
      }); 
     }); 

在开发这种方法效果很好,除了一个问题:这些被解雇的事件数。在控制台和使用Google Analytics调试器时,浏览网站时出现以下错误:
Exceeded rate limit for sending hits. Aborting hit.

根据Google,每次会话最多可发送500个事件。

所以我的问题是: (1)是否有一个js/jquery方法可用来限制每个会话发送的事件数量少于执行setInterval函数并检查是否有新信息要发送?就像在变量中存储特定数量并在达到特定大小或退出页面时将其发送出去一样? (2)对于分析专家:这是否可以解决我的问题,或者是“最多500个事件”,包括包含的addImpression方法的数量。即如果我在单个页面上有500个产品并在单个事件中发送500个addImpression,那么是否会超过最大值?

+1

还有另一个限制,您可以从20次交互式匹配开始,每次2次匹配时进行补充 - 快速滚动列表可能意味着您的活动正在发送到快速处理。 – 2014-11-05 15:45:29

+0

@EikePierstorff - 这也是一个问题。有没有关于谷歌接受多少点击次数的文档? – James 2014-11-06 00:52:59

回答

0

是的,你发现一个印象,你可以将其添加到队列,并调用发送事件的功能,而“反跳”每次它,例如使用:

https://lodash.com/docs#debounce

,会做你想要什么“创建一个去抖动函数,该函数会延迟调用func,直到自上次调用去抖函数后等待几毫秒后。

关于debounce功能,您从展示队列中取出所有内容,并将其发送给GA。 这会降低你的事件的使用情况,您可以发送所有排队的印象中1项活动,如:

impressionQueue = []; 

function filterDuplicates(impressions) { 
    // TODO: return impressions array without duplicates 
} 

var sendImpressions = _.debounce(function() { 
    filterDuplicates(impressionsQueue).forEach(function(impression) { 
    ga('ec:addImpression', impression); 
    }); 
    impressionQueue.length = 0; 
    ga('send', 'pageview'); 
}, 2000); // debounce for 2 seconds 

// call this for every product that enters the viewport 
function trackProductImpression(impression) { 
    impressionQueue.push(impression); 
    sendImpressions(); 
} 

较高的去抖动延迟,更少的事件,你会送(还有更多的机会有些印象如果用户关闭标签/在发送印象之前快速导航,则会丢失)

相关问题