结合Google Analytics (gtag.js)和Google Tag Manager (gtm.js)

19

Google Analytics 最新迁移至使用谷歌标签管理器的“全局站点标签”让我很困惑。它是标签管理器,但又不是?

常规的 Google 标签管理器 集成如下:

<!-- 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-XXXXXXX');
</script>

而且 Google Analytics全局站点标签 集成就像这样:

<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-XXXXXXXXX-X"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', 'UA-XXXXXXXXX-X');
</script>

它们加载不同的资源。但是两者都会触发dataLayer的 push 方法。对象创建的方式不同(假设这两种方式可以互换)。虽然一个实现中的dataLayer对象与另一个实现冲突,但我们是否应该同时使用两个集成呢?

顺便说一下,这两个资源都包含 jQuery 1.9.1。虽然加载和实例化 jQuery 两次(或三次,如果我们在其上方有自己的jQuery)并不是最优解,但有没有什么解决方法或建议呢?


4
GTM/Gtag并没有与jQuery捆绑在一起。GTM代码内置了一个选择器引擎,与jQuery相似到谷歌同意包含jQuery的版权声明,但它不是(甚至接近)完整的jQuery库。这个信息来自于谷歌开发者专家Simo Ahava,因此我相信这是准确无误的。 - Eike Pierstorff
1
在源代码中写着jQuery Foundation的jQuery 1.9.1。快来看看https://www.googletagmanager.com/gtag/js - tim
我很久以前看过,这就是我有机会问的原因。我的评论中传达的答案就是我得到的答案。 - Eike Pierstorff
据我所知,它使用了从jQuery 1.9.1复制的一些代码,但并没有包含整个jQuery库。 - Collin Anderson
1个回答

11
gtag.js开发者指南中得知:

如果您已经在使用Tag Manager,请继续使用。如果您不需要标记管理系统,则可以使用每个产品提供的gtag.js跟踪代码。

Tag Manager和gtag.js建立在相同的基础设施上,如果部署在同一页面上,则应该正常工作。

全局站点标签 (gtag.js) 是一种新的方式,与AdWords或DoubleClick等其他Google产品一起使用analytics.js
实际上,gtag.js会根据您配置的服务加载同样旧的analytics.js和其他库。例如,如果您使用具有gtag('config', 'AW-XXXXXXXX-X');的AdWords帐户进行配置,则脚本将自动加载conversions.js。此外,gtag.js还会对服务进行一些基本的初始化,例如触发Analytics的页面查看或AdWords的重新营销查看。

尽管如此,它确实有点像标记管理器。但是,它仅适用于Google产品。因此,它更像是将所有Google标记包装成一个标记的简化配置。

需要注意的是,如果您正在设置新的Analytics帐户,则以全局站点标记格式获取跟踪代码!您没有选择。

另一方面,Google Tag Manager(像大多数标记管理系统一样)使您能够管理超出Google产品范围的标记。它配有用户界面,版本控制,访问管理和所有其他花哨的东西。就像analytics.js一样,gtag.js只是另一个JavaScript库,Tag Manager可以与之通信。

1
我认为它不能同时用于两个服务,因为在dataLayer.push(['config', 'AW-XXXXXXXX-X'])之后紧跟着dataLayer.push(['config', 'UX-XXXXXXXX-X']); dataLayer.push(['event', {obj}])会重置服务到最后的配置。这意味着Adwords将不会接收任何事件。 - tim
2
gtag.js 的主要目的之一是与多个谷歌产品配置,就像在这里提到的一样:https://developers.google.com/gtagjs/devguide/add。`Array.push()` 方法不会清除数组,而是将新值附加到数组末尾,因此先前推送的配置不会被覆盖。 - dferenc
1
谢谢。我以为由于事件没有指定它是为哪个服务而设计的,只有最后配置的服务会接收到它。现在我明白了,Google可能有一些内部映射和引用来解决这个问题。感谢您花时间和精力回答这个话题。 :) - tim

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