使用滚动事件正确实现GA增强型电子商务addImpression
Correct implementation of GA Enhanced Ecommerce addImpression using scroll event
谷歌新增强的电子商务跟踪功能非常棒,包括印象数据和基于印象的点击率。这很好,但谷歌给出的默认示例是为页面加载上的每个产品设置一个addImpression。问题是,如果一个网站有大的类别页面(例如,一个页面上有100种产品),那么其中许多产品实际上可能永远不会被浏览,因此"印象"真的没有发生,数据也会不准确。
addImpression方法也可以通过事件发送,所以我解决这个问题的方法是将一个函数绑定到滚动事件,并使用jQuery Viewport插件查看项目是否真的在视图中。如果项目在视图中,它会从我添加到每个产品的数据属性标签中获取信息,为该对象创建印象,并为其分配一个类"impressionSent",这样产品就不会再次发送(防止单页加载时出现双重印象)。在每个函数的末尾,使用.proise().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});
});
});
在Dev中,除了一个问题外,这个方法非常有效:正在激发的事件数。在控制台中,使用Google Analytics Debugger,我在浏览网站时遇到以下错误:Exceeded rate limit for sending hits. Aborting hit.
根据谷歌的说法,每个会话最多可以发送500个事件。
所以我的问题是:(1) 除了执行setInterval函数和检查是否有新的信息要发送之外,js/jquery方法是否可以限制每个会话发送的事件数量?类似于将特定数量存储在变量中,并在达到特定大小或页面退出时将其发送?
(2) 对于分析专家来说:这会解决我的问题吗?还是"最多500个事件",包括"addImpression"方法的数量。即,如果我在一个页面上有500个产品,并且在一个事件中发送500个addImpression,这会超过最大值吗?
是的,每次检测到印象时,都可以将其添加到队列中,并调用一个函数来发送事件,然后"取消反弹",例如使用:
https://lodash.com/docs#debounce
这将做你想做的"创建一个反跳函数,延迟调用func,直到自上次调用反跳函数以来等待了毫秒之后。"
在debounce函数中,您从印象队列中获取所有内容,并将其发送给GA。这将减少你对事件的使用,因为你可以在一个事件中发送所有排队的印象,例如:
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();
}
取消跳动延迟越高,发送的事件就越少(如果用户在发送印象之前关闭选项卡/快速导航,则丢失一些印象的可能性也就越大)
很棒的代码,但它会发送太多空点击。我做了一些改变。
var send_ga = false;
$(window).bind("scroll", function() {
$('p.grid-link__meta:in-viewport').not('.impressionSent').each(function(){
$(this).addClass('impressionSent');
ga("require", "ec");
ga('ec:addImpression', {
'id': $(this).attr('data-sku'),
'name': $(this).attr('data-name'),
'list': '{{ collection.title | escape | replace: "'", "'" }}',
'position': $(this).attr('data-position')
});
console.log($(this).attr('data-position'));
send_ga = true;
}).promise().done( function() {
if(send_ga){
ga('send', 'event', 'scroll', 'impression', {'nonInteraction': true});
send_ga = false;
}
});
});
});
如果需要,可以使用setTimeout
$.fn.scrollEnd = function(callback, timeout) {
$(this).scroll(function(){
var $this = $(this);
if ($this.data('scrollTimeout')) {
clearTimeout($this.data('scrollTimeout'));
}
$this.data('scrollTimeout', setTimeout(callback,timeout));
});
};
- 动态分配GA增强型电子商务跟踪器
- $window.ga在AngularJS事件中未定义
- 6502仿真增强型基本无限循环$C000至$E0ED
- 在 angularjs 的 ga 命令中设置动态参数
- 检查Google Analytics是否已加载并调用ga('create',..)
- 在网站上显示该网站的GA统计数据
- 如何抓住'ga未定义'在您的开发环境中
- 谷歌分析ga setVar
- Google Analytics在某些页面上的ga(“发送”、“页面视图”)中出错
- javascript form.submit() 丢失由 GA _linkByPost 创建的查询字符串
- 使用 jQuery 跟踪 GA 事件
- 如何在用户会话的辅助页面中获取 GA utm 参数
- 使用 GA API v3 获取自定义维度名称列表
- 正确使用 vimeo.ga.js插件
- Dojo 增强型数据网格未填充 JsonRest 存储
- 是否可以使用 jQuery .load() 加载 GA 转换脚本?
- 有没有办法将Google Analytics for Web置于“试运行”模式,例如GA移动SDK
- onclick=GA 代码给出服务器错误 500
- _gaq.push(['_trackPageview']有什么区别);和 ga('send', 'pageview');
- 使用滚动事件正确实现GA增强型电子商务addImpression