我现在使用Google跟踪代码管理器几周了。最近我有一个特殊的要求,我没有找到答案。是否有可能多个容器共享同一个数据层?在两个容器的Js代码中,我试图给datalayer指定相同的名称:结果相当令人惊讶......每个容器中的所有标签都执行两次。
具体来说,我尝试在两个不同容器中的两个标签中发送一个事件。我想避免在我的onclick上进行最多无数次调用(因此想要拥有单个数据层)
答案 0 :(得分:3)
可以对多个容器使用相同的dataLayer。也可以在第一个容器中包含第二个容器(作为标签)。
但是“所有页面”规则将针对页面上包含的每个容器触发一次。因此,如果您有3个容器,则在“所有页面”上触发的每个标记都将被触发3次。 (对于“gtm.js”等其他事件也是如此......)
我们找到了解决此问题的简单方法。只需在每个页面上包含“page_loaded”事件,并相应地更改“所有页面”规则:
<script>
var dataLayer = [];
</script>
<!-- Google Tag Manager -->
<!-- End Google Tag Manager -->
<script>
dataLayer.push({"event": "page_loaded"});
</script>
page_loaded事件只会触发一次,与页面上使用的容器数量无关。
答案 1 :(得分:0)
这可能是显而易见的(我还没有对其进行过测试)但您是否尝试过复制dataLayer?如果您只是在数据层变量下面添加一个赋值
dataLayer2 = dataLayer
并将第二个容器配置为用户dataLayer2?这肯定是一个动态推送变量的PITA,但是在页面加载时呈现的所有内容都应该有效。
答案 2 :(得分:0)
到目前为止,似乎对我们有用的一种方法是重命名第二个容器的数据层变量,就像Eike所说。 GTM允许您在初始化时更改变量的名称,如下所述:https://developers.google.com/tag-manager/devguide#renaming
要跟踪两个容器上的事件,您必须手动推送到每个容器:
var data = {some:'data'};
dataLayer.push(data);
otherDataLayer.push(data);
您可以在每个容器上设置不同的触发器,以便有选择地将跟踪事件跟踪到GA或其他。