如何使用 dataLayer 向 google 标签管理器发出 http 请求?

how to make http request to google tag manager with dataLayer?

我有以下代码行,基本上是 google 标签管理器脚本:

<!DOCTYPE html>
<html dir="ltr">
<head>
<!-- Google Tag Manager -->
<script>
window.dataLayer = window.dataLayer || [];
(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-M3WNDLC');</script>
<!-- End Google Tag Manager -->
  <meta charset="utf-8"/>
  <title>Test Page</title>
</head>
<body>
</body>
</html>

接下来我要做的是:

  1. 将该代码粘贴到任何 HTML 页面上
  2. 打开开发者工具。
  3. 转到“网络”选项卡并清除其他所有内容,这样我就不会对即将发出的 HTTP 请求感到困惑
  4. 转到 javascript 控制台
  5. 输入 window.dataLayer.push({food:"pizza",event:"pageview"}) 然后按 enter
  6. 我输入 window.dataLayer 来检查它的内容,并确认它有第 5 步中的新项目。
  7. 我转到我的开发人员控制台中的“网络”选项卡并注意到 没有向 google 标签管理器服务器
  8. 发出 http 请求

所以我的问题是,如何将我的新 window.dataLayer 元素传输到 google 标签管理器? window.dataLayer 应该是可观察的吗? GTM 有一些观察器会在 window.dataLayer 的状态发生变化时触发功能?

在当前版本中,Google 跟踪代码管理器是一种纯粹的客户端技术。 GUI 的唯一功能是配置这些标签,然后将这些标签与一些样板 Javascript(一个选择器引擎,以及评估触发器条件和变量值的逻辑)捆绑在一起。这个文件然后被浏览器下载,从那时起就没有与 GTM 服务器的交互。

您的示例所做的只是向 dataLayer 数组添加一个值。虽然 GTM 使用一些额外的逻辑增强了 dataLayer 数组的 push 方法,但这在核心上仍然只是一种向数组添加值的方法,不需要服务器交互。如果您配置了与服务器交互的标签,您将只会收到 http 请求。

显然 Google 正在开发用于标签管理的服务器端解决方案(我认为类似于 segment.com),它将存在于 Google 云中的虚拟机上,并且那时向 GTM 发送 http 请求的想法可能有意义。目前,GTM 是一个已经存在于浏览器中的 Javascript,因此不需要 http 请求来与 GTM 通信。