【问题标题】:Google Analytics events tracking fails for some submissions某些提交的 Google Analytics 事件跟踪失败
【发布时间】:2019-10-05 18:50:48
【问题描述】:

我在我们的网站上使用 Google 跟踪代码管理器,并在提交表单后通过它向 Google Analytics 发送事件。下面的代码只是简单的和提交确认一起打印出来的。

$(document).ready(function() {
    sendGA('form_submit_completed', '{form_id}', '{form_sender}');
});

而sendGA函数定义如下。

function sendGA(anec, anea, anel) {

   if(typeof dataLayer === 'undefined') {
    console.log('Google analytics undefined, aren\'t you logged in?');
    return;
   }

   dataLayer.push({
    'event': 'ga_custom_event',
    'ga_anec': anec,
    'ga_anea': anea,
    'ga_anel': anel
   });

   console.log('ga_sent: {anec: ' + anec + ', anea: ' + anea + ', anel: ' + anel + '}');
}

将来自 Google Analytics 的数据与记录在我们数据库中的提交进行比较时,我发现有些提交没有记录在 Google Analytics 中。我自己无法在任何浏览器中复制它。

有没有人知道可能导致这种行为的原因?我知道所有操作都是异步的,所以有时如果用户立即离开页面,请求可能无法通过。但在上周,这发生在大约 10% 的提交中,这是由这个引起的。

更新的源代码仍有 10% 的下降:

function sendGA(anec, anea, anel)
{
    anec = anec || "empty_anec";
    anea = anea || "empty_anea";
    anel = anel || "empty_anel";
    let loggedIn = false;

    if(typeof window.dataLayer === 'undefined') {
        console.log('Google analytics undefined, aren\'t you logged in?');
        loggedIn = true;
    }

    window.dataLayer = window.dataLayer || [];

    window.dataLayer.push({
        'event': 'ga_custom_event',
        'ga_anec': anec,
        'ga_anea': anea,
        'ga_anel': anel
    });

    if(!loggedIn)
        console.log('ga_sent: {anec: ' + anec + ', anea: ' + anea + ', anel: ' + anel + '}');
}

【问题讨论】:

    标签: javascript google-analytics google-tag-manager


    【解决方案1】:

    这可能是某种竞争条件。如果 GTM 在此 DOM 就绪代码触发后加载,您的代码将不会尝试跟踪(根据您的 typeof dataLayer === 'undefined' 检查)。

    实际上,在这种情况下无需担心时间问题,因为 dataLayer 是一个消息队列。即使它还不存在(即 GTM 尚未加载),您仍然可以将内容推送到其上,并且当 GTM 赶上时您的代码将触发。

    尝试修改如下:

    function sendGA(anec, anea, anel) {
    
       window.dataLayer = window.dataLayer || [];
       window.dataLayer.push({
        'event': 'ga_custom_event',
        'ga_anec': anec,
        'ga_anea': anea,
        'ga_anel': anel
       });
    
       console.log('ga_sent: {anec: ' + anec + ', anea: ' + anea + ', anel: ' + anel + '}');
    }
    

    如果您在此更改后仍然看到缺失数据,是否也存在缺失变量?如果您没有 Event Category 或 Event Action 的值(在您的情况下,Event Action 是变量),则事件命中将无效,并且在 Google Analytics 收集期间将被忽略。

    旁注:如果 {form_sender} 变量是用户的电子邮件地址或其他个人信息,您需要避免收集这些信息,因为它违反了 GA 服务条款以获取个人身份信息 (PII)。

    https://support.google.com/analytics/answer/2795983?hl=en

    【讨论】:

    • 非常感谢您的回答。它始终是“尚未加载”的问题之一,对吧?我还为事件类别和事件操作添加了“默认”值,因此如果那里有任何问题,这也会显示出来。 {form_sender} 是一个响应 ID,希望没问题。我会在一周后回到这里并确认您的回答。谢谢。
    • 所以在改进源代码运行一周后,我仍然可以看到大约 10% 的非记录器事件。我们还启用了对提交按钮点击的跟踪,我什至看不到这些提交的按钮。这些用户是否有可能/可能只是阻止了 cookie/GA? @CVM 我用当前的源代码更新了这个问题。
    • 我刚刚注意到这个比率要高得多。对于我们的一份表格,5 个提交的内容都没有出现在 Google Analytics 中。当我尝试自己提交表单时,一切正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 1970-01-01
    • 2011-12-03
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    相关资源
    最近更新 更多