Google 标签管理器数据层推送未存储对象

Google Tag manager dataLayer push not storing object

我已经通读了几篇 SO 帖子和 docs and api. My understanding is that the dataLayer global object should behave Array-like and increase in size when you .push() an event object into it. According to the screenshot here

我的 dataLayer 对象不是这样增长的。它存在于 window 上,我可以 运行

dataLayer.push({'event': 'trackEvent'});

没有错误,只是没有增加dataLayer的大小。

除了数组增长之外,我还能如何判断 .push() 是否正常工作?

浏览器是否应该在检测到事件时执行 xhr 请求?

GTM 脚本是否会在将 GTM 设置 (tags/triggers) 发送到 google 之前执行 client-side 逻辑?即,事件是否因为未通过验证而未推送。

如果我在本地主机上测试它重要吗?

我该如何解决这个问题?

数据层是一个数组,所以是的,它的行为应该像一个数组。各个项目是对象。

它不应执行 xhr 请求,因为 GTM 已捆绑并下载到您的页面中,因此不需要 xhr。

GTM 事件本身永远不会发送到 Google(它们仅用于触发标签,然后可能会将数据发送到 Google。它们不会自动映射到 Google Analytics事件)。它们未经验证,GTM 只是修改 push 方法以查看参数是否包含键 "event"(此时 GTM 脚本的内部状态已使用新值更新)。

加载 GTM 后您的数据层似乎发生了一些变化(您有开始事件,但没有 gtm.dom 或 gtm.load)所以您可能想检查是否重新声明了数据层在 GTM 片段之后。但是要实际调试问题,如果我们能够看到您如何嵌入 GTM 并设置数据层(如果有任何机会我们可以浏览您的页面或显示相同问题的示例页面,那将是很有帮助)。

我的同事能够加载预览模式并验证推送到数据层的事件。显然,duckduckgo 扩展阻止了预览模式任务栏的加载。

我会将其作为 DDG 团队的错误打开。

对于未来的搜索者,您应该能够很容易地启动 gtm 预览模式。您会看到屏幕截图中的网络事件。