google-tag-manager - Datalayer 推送事件未发送至 google

标签 google-tag-manager google-datalayer

我在数据层事件方面遇到了一个奇怪的问题。 我推送一个事件对象

{ 
    'event': 'item',
    'item_name' : 'generic user',
    'item_value' : 'commenced'
}

进入数据层,我可以看到它已正确发送到谷歌。 这些参数显示在网络选项卡中的analytics.js get 调用中,如下所示:

https://www.google-analytics.com/collect?...&ec=generic%20user%20%20shop&ea=checkout&el=commenced...

我假设“结账”的插入和“商店”的添加是在标签管理器中以某种方式定义的并且不相关? 然后我推送不同类型的事件对象

{ 
    'event': 'item',
    'item_name' : 'generic user',
    'item_description' : 'bermuda shorts',
    'item_size' : 'medium'
}

再次正确发送。

https://www.google-analytics.com/collect?...&ec=generic%20user%20%20shop&ea=medium&el=bermuda%20shorts...

当我尝试推送另一个原始类型的对象时

{ 
    'event': 'item',
    'item_name' : 'generic user',
    'item_value' : 'next'
}

不是将新对象发送到 Google,而是重新发送以前的对象。

https://www.google-analytics.com/collect?...&ec=generic%20user%20%20shop&ea=medium&el=bermuda%20shorts...

如果我不在中间发送新类型的对象,我可以发送任意数量的原始对象类型,并且它们会被正确发送。

使用 DataSlayer,显示正在添加正确的事件。 如果我检查 dataLayer 对象,我可以看到数组中的正确事件。 在 GA 中查看实时事件,analytics.js 发送的事件按预期显示,但 dataLayer 中未发送的事件不会显示。

有人知道会发生什么吗?

最佳答案

问题是你没有清理dataLayer,当你推送最后一个dataLayer时,它会覆盖你正在推送的变量,但是之前推送的变量不会再次推送,它们仍然在dataLayer中可用。

您可以在每次 dataLayer.push 时使用 GTM 的 DataLayer 选项卡预览来检查 dataLayer 的状态。 enter image description here

示例:

第一次推送

{ 
  'event': 'item',
  'item_name' : 'generic user',
  'item_value' : 'commenced'
}

数据层状态:

{ 
  'event': 'item',
  'item_name' : 'generic user',
  'item_value' : 'commenced'
}

第二次推送

{ 
  'event': 'item',
  'item_name' : 'generic user',
  'item_description' : 'bermuda shorts',
  'item_size' : 'medium'
}

数据层状态:

{ 
  'event': 'item', // overwrited
  'item_name' : 'generic user', // overwrited
  'item_description' : 'bermuda shorts', // added
  'item_size' : 'medium', // added
  'item_value' : 'commenced' //still available from first push
}

第三个数据层推送

{ 
  'event': 'item',
  'item_name' : 'generic user',
  'item_value' : 'next'
}

数据层状态:

{ 
  'event': 'item', // overwrited
  'item_name' : 'generic user', // overwrited
  'item_description' : 'bermuda shorts', // available from previous push
  'item_size' : 'medium', // available from previous push
  'item_value' : 'next' //overwrited
}

为了解决这个问题,您应该通过将不需要的变量插入未定义来清理数据层。

第三次推送示例

{ 
  'event': 'item',
  'item_name' : 'generic user',
  'item_description' : undefined,
  'item_size' : undefined,
  'item_value' : 'next'
}

关于google-tag-manager - Datalayer 推送事件未发送至 google,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49426603/

相关文章:

google-analytics - Google Analytics 不会将数据 View 拆分为单独的域

javascript - 如何使用 GTM 将第二个产品推送到数据层

javascript - 如何在 Google 跟踪代码管理器中使用自定义 <img> 标签跟踪按钮点击

javascript - 路线更改后谷歌标签管理器不发送分析请求

javascript - 使用纯 Javascript 提取字符串的复杂部分

google-analytics - 有没有一种安全的方法可以将 eventCallback 与 GTM DataLayer 一起使用?

javascript - 基于电子商务数据层对象的 Google 跟踪代码管理器自定义 JavaScript 变量

javascript - 从 GTM 访问数据层

javascript - 跟踪代码管理器无法识别 Google 跟踪代码管理器数据层

google-analytics - 当我的应用程序加载到跨域 iframe 中时,为什么 Google Analytics(分析)不发送命中?