【问题标题】:Datalayer push events not sent to google数据层推送事件未发送到谷歌
【发布时间】:2018-03-22 10:43:36
【问题描述】:

我对数据层事件有一个奇怪的问题。 我推送一个事件对象

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

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

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 中未发送的事件未显示。

有人知道会发生什么吗?

【问题讨论】:

  • 你能添加你的GTM配置吗?您应该有一个在“项目”上触发的默认事件跟踪代码。另一方面,您如何看待这些热门歌曲?我建议你使用 chrome 扩展“GA Debug”。希望对您有所帮助...

标签: google-tag-manager google-datalayer


【解决方案1】:

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

您可以使用 GTM 的预览通过 DataLayer 的选项卡检查每个 dataLayer.push 的 dataLayer 的状态。

示例:

第一推

{ 
  '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'
}

【讨论】:

  • 谢谢,将未使用的值设置为 undefined 可以解决问题。似乎即使 dataLayer 数组单独保存每个对象,也有一个单独的 dataLayer 状态,它结合了所有先前的对象属性。
猜你喜欢
  • 2018-11-07
  • 2015-09-19
  • 1970-01-01
  • 2020-04-10
  • 2017-05-08
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多