数据层推送事件未发送到 google
Datalayer push events not sent to google
我遇到了数据层事件的奇怪问题。
我推送一个事件对象
{
'event': 'item',
'item_name' : 'generic user',
'item_value' : 'commenced'
}
进入数据层,我可以看到它已正确发送到 google。
参数显示在网络选项卡中的 analytics.js get 调用中,类似于:
https://www.google-analytics.com/collect?...&ec=generic%20user%20%20shop&ea=checkout&el=commenced...
我假设 'checkout' 的插入和 'shop' 的添加是以某种方式在标签管理器中定义的并且不相关?
然后我推送不同类型的事件对象
{
'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 选项卡使用 GTM 预览在每个 dataLayer.push 检查数据层的状态。
示例:
第一次推送
{
'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'
}
我遇到了数据层事件的奇怪问题。 我推送一个事件对象
{
'event': 'item',
'item_name' : 'generic user',
'item_value' : 'commenced'
}
进入数据层,我可以看到它已正确发送到 google。 参数显示在网络选项卡中的 analytics.js get 调用中,类似于:
https://www.google-analytics.com/collect?...&ec=generic%20user%20%20shop&ea=checkout&el=commenced...
我假设 'checkout' 的插入和 'shop' 的添加是以某种方式在标签管理器中定义的并且不相关? 然后我推送不同类型的事件对象
{
'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 选项卡使用 GTM 预览在每个 dataLayer.push 检查数据层的状态。
示例:
第一次推送
{
'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'
}