在点击表单提交后,在Google分析中跟踪事件
当有人填写表单并点击提交时,我需要跟踪Google分析中的事件。 出现的结果页面是一个标准的仪表板types的页面,所以为了跟踪该页面上的事件,我不得不在URL中传递事件,然后阅读url并输出google analytics事件跟踪javascript代码基于它。 这是一个经常书签的页面,但重新加载,点击返回等,所以我真的不想在URL中传递跟踪事件,搞砸了分析。
相反,我宁愿做一些类似下面的jQuery代码在页面上的forms:
$('#form_id').submit(function() { _gaq.push('_trackEvent', 'my category', 'my action'); });
我担心的问题是,我会错过一些被跟踪的事件,因为在调用JavaScript之后,浏览器将会提交表单并转到另一个网页。 如果utm.gif跟踪图像没有及时加载,我错过了事件:(。
我的恐惧是否合理? 我如何确保我不会错过正在跟踪的事件?
只有两种方法可以确保所有表单提交(具有JSfunction且不阻止GA的用户)如下:
- 你可以做一个AJAX提交,然后不必担心页面的改变,因此世界上的所有时间GA都要处理,而你的新页面要加载到旧页面。
- 您可以强制表单在新窗口中打开其操作,从而使主页上的所有后台进程都能正常工作,并防止您担心的竞争状况。
原因在于Google Analytics(分析)不具备回叫function,因此即使投入了10秒的时差,您也无法确定是否要捕获所有提交内容。
或者,您可以将GET值传递给提交的页面,然后在该页面上设置值作为检查。 如果设置了,你可以发送一个trackEvent调用。
使用Google Analytics(分析) hitCallback
您可以在跟踪器对象上指定自定义callback函数。
_gaq.push(['_set', 'hitCallback', function(){}]);
在“命中发送成功”之后调用callback。
如果您想跟踪提交button的点击并发送表单,则可以使用以下代码(使用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来查找刚刚推送的提交button的基础表单元素,然后提交整个表单。
请参阅: Google Analytics(分析) – 将数据发送给Google Analytics(分析) – 点击回拨 (感谢supervacuo)
更新如果您正在使用ga()函数定义的现代analytics.js代码,可以这样写:
var _this = this; ga('send', 'event', 'My category', 'My action', { 'hitCallback': function() { $(_this).parents('form').first().submit(); } }); return !window.ga;
对于那些处理谷歌分析通用和做一些与hitCallback(fx轨道事件后validation,但在提交表单之前跟踪事件)请记住,谷歌analytics.js可能会被阻止,但GAfunction将仍然定义,所以提交将不会发生。
ga('send', 'pageview', event, { 'hitCallback': function() { _this.submit(); } }) return !window.ga;
可以通过validation来检查ga是否被加载
ga('send', 'pageview', event, { 'hitCallback': function() { _this.submit(); } }) return !(ga.hasOwnProperty('loaded') && ga.loaded === true)
这个问题现在已经有几年了,似乎谷歌分析已经提供了一个方法来做到这一点,没有上面的黑客。
从谷歌分析文档 :
除了命令数组之外,还可以将函数对象推送到_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(); } ); });
如果你对100%的准确度没有太大的困扰,你可以在1秒内延迟一秒。
$('#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解决scheme是好的,我更喜欢设置一个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(); }
当跟踪每个提交至关重要时,我通常会在后端设置一个包含所有必需数据的Cookie。 然后在GTM中设置一个规则来根据这个第一方cookie的存在来发出一个标签。 标签parsingcookie的所需值,并做任何需要与他们并删除cookie。
一个更复杂的例子是购买追踪。 您想在用户进行购买时触发5个不同的标签。 竞争条件和立即redirect到一些欢迎页面使得难以依靠简单的“onSubmit”跟踪。 因此,我设置了一个包含所有与购买相关的数据的cookie,并且在用户最终在GTM上的任何页面上都会识别该cookie,引发一个“入口点”标签,将parsingcookie,将所有值推送到dataLayer,删除cookie那么标签本身将把事件推送到dataLayer,从而触发需要购买数据的5个标签(已经在dataLayer中)。
好吧,因为我们已经转移到Universal分析,我想用GTM和UA来回答相同的问题。
GTM :
使用GTM在点击表单提交时跟踪Google分析中的事件是相当容易的。
- 创build一个UA标签,并在GTM中将types设置为
event
。 - 填写所需的事件操作,类别和标签
- 创buildtypes表单提交的触发器。
- 把更多的条件来定位你想要的button
这是OP的最佳,最佳和易于使用的方法。
这是您在gtag.js
进行事件callback的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