Google 跟踪代码管理器启动得太早了?

Google Tag Manager fires too early?

我正在使用 react-gtm-module 编写动态生成的数据层以响应自定义 HTML 标签。我有一个问题,有时 CustomHTML 标签被成功触发,并且生成了 dataLayer,但是 <script type='application/ld+json'> 元素缺少模板化的 dataLayer 变量。

它在开发环境和生产环境中都会出现,所以它不能与webpack相关。有时 gtm 调试器会在失败的情况下显示带有空字段的标签,有时它会显示标签中填充的字段,即使写入的元素本身没有。

这里是自定义HTML标签中的编写脚本:

var script = document.createElement('script');
  script.type = 'application/ld+json';
  script.innerHTML = JSON.stringify(data);
  document.getElementsByTagName('head')[0].appendChild(script);
})(document); 

下面是两个本质上等价的例子:

https://iiif.cloud/view/afa9ee3c-a7ed-5875-a009-2de3940ebff3

标签被写入 application/ld+json 元素。

这里:

https://iiif.cloud/view/7145e94f-6a10-5bb6-a360-6915ee9b0795

哪里没有。任何进一步调试的建议将不胜感激。

问题是触发器需要等待数据层被填充。有延迟执行的触发选项,"Set minimum on-screen duration"。通过将此设置为 2000 毫秒,现在始终使用 dataLayer 变量创建标签。