2

我使用谷歌标签管理器已经好几个星期了。最近我有一个特殊的要求,我还没有找到答案。是否有可能多个容器共享同一个数据层?在两个容器的 Js 代码中,我尝试给 datalayer 起相同的名称:结果相当令人惊讶......每个容器中的所有标签都执行了两次。

具体来说,我尝试在两个不同容器中的两个标签中发送一个事件。我想避免在我的 onclick 上调用最多无数个号码(因此有一个数据层的想法)

4

3 回答 3

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 事件只会触发一次,与页面上使用的容器数量无关。

于 2013-08-05T09:34:58.987 回答
0

到目前为止,似乎对我们有用的一种方法是像 Eike 所说的那样重命名第二个容器的 datalayer 变量。GTM 允许您在初始化时更改变量的名称,如下所述:https ://developers.google.com/tag-manager/devguide#renaming

要跟踪两个容器上的事件,您必须手动推送到每个容器:

var data = {some:'data'};

dataLayer.push(data);
otherDataLayer.push(data);

您可以在每个容器上设置不同的触发器,以便有选择地将跟踪事件触发到 GA 或其他。

于 2015-02-03T09:09:19.760 回答
0

这可能很明显(我还没有测试过),但是您是否尝试过复制您的 dataLayer ?如果您只是在数据层变量下方添加一个赋值

dataLayer2 = dataLayer 

并将您的第二个容器配置为用户 dataLayer2 ?那肯定是一个带有动态推送变量的 PITA,但是在页面加载时呈现的所有内容都应该可以工作。

于 2013-07-29T12:06:21.320 回答