谷歌标签管理器定位

4
我有一个关于谷歌标签管理器代码段位置的一般性问题。根据谷歌的实施指南,标签管理器应该在body标签开始后立即实施。我的问题如下:
  • 那些应该在head中加载的跟踪脚本会发生什么?
  • 那些应该在body结束时加载的跟踪脚本会发生什么?
例如,VWO(视觉网站优化器)建议在head中加载代码以避免闪烁...
我能否有两个容器?一个在head的末尾,一个在body的开头?
2个回答

2
可以有两个标签管理器标签,但这不会实现您想要的效果(并可能导致问题)。GTM 应该直接放置在开头的 body 标签之后,而不是在另一个元素内部,因为 GTM 做了一些 DOM 操作来插入包含的标签。所有配置的标签都被打包成一个 JavaScript 对象,插入到您的页面中,并从那里触发。将 GTM 标签放在其他位置不会改变插入标签的位置(除非用户已禁用 JavaScript,在这种情况下,图像标签将显示在 iframe 中)。但这意味着 GTM 标签可能会失败,因为注入 JavaScript 的 DOM 操作可能无法从指定的位置之外的其他位置工作(尤其是如果将其放在 body 之外)。实际上,Google 表示标签管理器不适用于更改页面外观的标签(例如 A/B 测试工具,自 GTM 首次发布以来就被列为“即将推出”),原因就是如此。

有人给我点了一个踩,我猜想是因为这个答案在某些方面已经不准确了。现在推荐的 GTM 代码片段是将其包含在 head 中,并且官方支持多个容器。但就问题而言,它仍然是正确的。您不能将两部分代码片段放在不同的容器中并使用该技术来同步执行依赖于特定顺序的标签。 - Eike Pierstorff

1
这已经随着时间的推移而改变,现在GTM具有与A/B测试工具(如Google的Optimize)的集成功能。
为了实现这一点,您需要添加两个代码片段: 一个位于<head>标签之后。
    <!-- Google Tag Manager -->
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-CONTAINER_ID');</script>
<!-- End Google Tag Manager -->

紧接着 <body> 标签之后。
<!-- Google Tag Manager (noscript) -->
<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-CONTAINTER_ID"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<!-- End Google Tag Manager (noscript) -->

我认为你的意思是在<head> HTML标签内(而不是<header>)。 - Consta Gorgan
将以下代码添加到网站每个页面尽可能靠近开头的<head>标签处。- 来自官方文档:https://developers.google.com/tag-platform/tag-manager/web - Consta Gorgan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接