相反,我宁愿在具有表单的页面上使用以下jQuery代码:
$('#form_id').submit(function() {
_gaq.push('_trackEvent', 'my category', 'my action');
});
我担心上述方法会错过一些事件的跟踪,因为在调用该JavaScript之后,浏览器会立即提交表单并转到另一个网页。如果 utm.gif 跟踪图像没有及时加载,我就会错过事件 :(。
我的担忧是否合理?我该如何确保不会错过要跟踪的事件?
相反,我宁愿在具有表单的页面上使用以下jQuery代码:
$('#form_id').submit(function() {
_gaq.push('_trackEvent', 'my category', 'my action');
});
我担心上述方法会错过一些事件的跟踪,因为在调用该JavaScript之后,浏览器会立即提交表单并转到另一个网页。如果 utm.gif 跟踪图像没有及时加载,我就会错过事件 :(。
我的担忧是否合理?我该如何确保不会错过要跟踪的事件?
hitCallback
您可以在跟踪器对象上指定自定义回调函数。
_gaq.push(['_set', 'hitCallback', function(){}]);
“hit is sent successfully.”之后会调用回调函数。
如果您想要跟踪提交按钮的点击并在发送表单后进行此操作,则可以使用以下代码(使用jQuery):
var _this = this; // The form input element that was just clicked
_gaq.push(['_set','hitCallback',function() {
$(_this).parents('form').first().submit(); // Submit underlying form
}]);
_gaq.push(['_trackEvent', 'My category', 'My action']);
return !window._gat; // Ensure that the event is bubbled if GA is not loaded
或者作为 <input type="submit">
元素的单行代码:onclick
onclick="var _this=this;_gaq.push(['_set','hitCallback',function(){$(_this).parents('form').first().submit();}]);_gaq.push(['_trackEvent','My category','My action']);return !window._gat;"
它的作用是跟踪事件 My category/My action
,使用jQuery查找刚刚推送的提交按钮底下的表单元素,然后提交整个表单。参见: Google Analytics-发送数据到Google Analytics-Hit Callback(感谢supervacuo)
更新内容:如果您正在使用带有定义ga()函数的现代analytics.js代码,则可以编写以下内容:var _this = this;
ga('send', 'event', 'My category', 'My action', {
'hitCallback': function() {
$(_this).parents('form').first().submit();
}
});
return !window.ga;
确保所有表单提交(在启用JS且未阻止GA的用户中)100%的方法只有两种:
这是因为Google Analytics没有回调函数,因此即使您设置了10秒延迟,也无法确定您是否捕获了所有提交。
或者,您可以将GET值传递给提交的页面,并在该页面上设置值的检查。如果已设置,则可以发送trackEvent调用。
hitCallback
的属性,其值为一个函数即可。 - coredumperror对于那些使用Google Analytics Universal并在hitCallback上进行某些操作(例如,在表单验证之后但提交之前跟踪事件)的人,请记住,google-analytics.js可能会被阻止,但ga函数仍将被定义,因此提交不会发生。
ga('send', 'pageview', event, {
'hitCallback': function() {
_this.submit();
}
})
return !window.ga;
可以通过检查ga是否已经加载来修复。
ga('send', 'pageview', event, {
'hitCallback': function() {
_this.submit();
}
})
return !(ga.hasOwnProperty('loaded') && ga.loaded === true)
return
语句是什么意思。我错过了什么吗?谢谢。 - Julián Landerreche您可以将此与多个命令推送结合使用,以确保它们按顺序添加(并节省调用)。除了命令数组之外,您还可以将函数对象推送到_gaq队列。这些函数可以包含任意的JavaScript代码,并且与命令数组一样,它们按照被推送到_gaq的顺序执行。
$('input[type="submit"]').click(function(e) {
// Prevent the form being submitted just yet
e.preventDefault();
// Keep a reference to this dom element for the callback
var _this = this;
_gaq.push(
// Queue the tracking event
['_trackEvent', 'Your event', 'Your action'],
// Queue the callback function immediately after.
// This will execute in order.
function() {
// Submit the parent form
$(_this).parents('form').submit();
}
);
});
$('#form_id').submit(function(e) {
var form = this;
e.preventDefault(); // disable the default submit action
_gaq.push('_trackEvent', 'my category', 'my action');
$(':input', this).attr('disabled', true); // disable all elements in the form, to avoid multiple clicks
setTimeout(function() { // after 1 second, submit the form
form.submit();
}, 1000);
});
虽然 hitCallback 解决方案不错,但我更喜欢设置一个 cookie 并在下一页触发事件。这样,GA 中的故障不会影响我的网站:
// Function to set the event to be tracked:
function setDelayedEvent(category, action, label, value) {
document.cookie='ev='+escape(category)+'!'+escape(action)+'!'+escape(label)+'!'+value
+'; path=/; expires='+new Date(new Date().getTime()+60000).toUTCString();
}
// Code run in every page, in case the previous page left an event to be tracked:
var formErrorCount= formErrorCount || 0;
var ev= document.cookie.match('(?:;\\s*|^)ev=([^!]*)!([^!]*)!([^!]+)!([^!]+)(?:;|\s*$)');
if (ev && ev.length>2) {
_gaq.push(['_trackEvent', unescape(ev[1]), unescape(ev[2]),
unescape(ev[3]), parseInt(ev[4])]);
document.cookie='ev=; path=/; expires='+new Date(new Date().getTime()-1000).toUTCString();
}
gtag.js
中进行事件回调的方法,以确保在更改页面URL之前发送Google Analytics数据:gtag('event', 'view_promotion', { myParameter: myValue, event_callback: function () {
console.log('Done!');
// Now submit form or change location.href
} });
来源:https://developers.google.com/analytics/devguides/collection/gtagjs/sending-hits
这是一篇介绍如何发送Google Analytics数据的文档。它涉及使用gtag.js库收集网站和移动应用程序的数据,并将其发送到Google Analytics帐户以进行报告和分析。当每个提交都需要跟踪时,我通常在后端设置一个带有所有必需数据的cookie。然后在GTM中设置一个规则,根据此第一方cookie的存在触发标签。标签解析所需值的cookie并执行所需操作,然后删除cookie。
更复杂的例子是购买跟踪。 当用户执行购买时,您想要触发5个不同的标签。竞争条件和立即重定向到某个欢迎页面使得依赖简单的“onSubmit”跟踪变得困难。因此,我使用包含所有购买相关数据的cookie,并且在用户最终停留的任何页面上,GTM将识别cookie,触发“入口点”标签,该标签将解析cookie,将所有值推送到dataLayer,删除cookie,然后标签本身将推送事件到dataLayer,从而触发需要购买数据(已经在dataLayer中)的5个标签。