返回博客

博客

适用于 Drupal 的 SignalHost:安装模块,连接一次,服务器端跟踪即刻上线

发布于 · 阅读约 7 分钟

在 Drupal.org 获取

SignalHost 模块无需粘贴一行代码,就能把服务器端 Google Tag Manager 装到 Drupal 网站上。它把跟踪加载器添加到每个非管理页面,在我们这边有任何变化时保持它最新,并在你断开连接时再把它移除。本指南按照你遇到它们的顺序展开:安装模块、连接容器、检查是否生效,以及出现问题时该怎么办。

开始之前

  • Drupal 10.3 或 11,运行在 PHP 8.1 或更高版本上,并带有 sodium 扩展——它从 PHP 7.2 起就是 PHP 的一部分。
  • 一个 SignalHost 账号。免费套餐足以试用:每月 10,000 次请求和一个容器。你可以在连接时创建账号。
  • 一个拥有 Administer SignalHost Server-Side Tagging 权限的账号。只有拥有这项权限的用户才能连接或断开网站。

1. 安装模块

像安装任何贡献模块一样,从它在 drupal.org 上的项目页面安装:先用 Composer 添加,然后启用。

composer require drupal/signalhost_server_side_tagging
drush en signalhost_server_side_tagging

如果不用 Drush,可以在「Extend」下启用它,它在「Statistics」分组中,名称是 SignalHost Server-Side Tagging。在网站连接之前,它不会输出任何东西。

2. 把网站连接到容器

打开「Configuration › Web services › SignalHost」(/admin/config/services/signalhost),按「Connect with SignalHost」。如果你还没有账号,「Create a free account」会改为带你去注册。在你按下连接之前,不会向 SignalHost 发送任何东西。

在 signalhost.io 上登录。下一个页面会列出模块能做和不能做的事,并询问网站应使用哪个容器。容器就是你自己的跟踪服务器:一个 Tag Manager 网页容器和一个服务器容器,构建在你自己的 Google 账号中,因此始终归你所有。

选择一个现有容器,或者按「为你的网站新建容器」并走完简短的向导。新容器需要几分钟来构建;你可以立即连接,准备就绪后代码就会马上添加。按「连接」。你会回到 Drupal 中的 SignalHost 页面,并看到消息「Connected」。SignalHost 的代码现在已经添加到你网站的每个页面上了。

3. 检查代码是否已在你的网站上

现在页面会显示「Tracking is live」;如果新容器仍在构建中,则显示「Tracking starts as soon as your container is ready」。然后看「On your home page」这一行:连接之后,模块会立即像访客一样获取你的首页并查找它的代码。「Code found」就是你想要的答案。「Check again」可以随时重新检查,其他答案见「出现问题时」。

4. 测试一下

在无痕窗口中打开你的网站,点击浏览几个页面;拒绝 Cookie 横幅的访客仍会被统计,以 Google 的无 Cookie ping 的形式。然后按「Open statistics & settings」,打开你在 signalhost.io 上的容器页面。

在「详细访问统计」下,「最近」选项卡显示最近 30 分钟的页面浏览,其中包括你自己的。页面底部「故障排查」下的「运行检查」会把你的跟踪服务器收到的数据与 Google Analytics 在同样 30 分钟内报告的数据进行比较。Analytics 中的数字更少是正常的:它不统计拒绝 Cookie 的访客。从 Growth 套餐起,「实时事件监控」会在每个事件到达时把它显示出来。

模块在你的网站上添加了什么

一个小脚本,以及每小时一次的同步:

  • Google Tag Manager 加载器,位于每个非管理页面的 head 部分,指向你自己的跟踪地址而不是 googletagmanager.com。它从那里加载你的 Tag Manager 容器。模块用两个经过校验的值自己构建它;SignalHost 发送的任何内容都绝不会作为脚本输出。这些页面带有一个缓存标签,因此每当加载器变化时,页面缓存都会刷新,包括你连接之前就已缓存的页面。
  • 每小时一次,在某个响应发送出去之后,模块会与 signalhost.io 同步,以保持最新。它只发送模块、Drupal 和 PHP 的版本、你网站的地址,以及代码是否在你的首页上被找到:不发送访客数据、内容或用户账号。如果无法连接到 signalhost.io,网站会保留上一次有效的配置。它存储的任何内容都不会随配置导出一起带走。

每个请求都以广告拦截器无法识别的形式离开浏览器,你的跟踪服务器再把它转发给 Google Analytics 4 以及你在容器页面上设置的广告平台:Google Ads、Meta、TikTok 等。跟踪通过 Google Consent Mode 跟随你的 Cookie 横幅;请把横幅的代码放在 SignalHost 的代码之前。

模块不读取表单或订单,Drupal Commerce 也不例外。页面浏览会自行到达;购买或潜在客户线索要由你的网站推送到数据层,才会到达你的容器。

你自己的跟踪域名

你的容器起初使用 signalhost.io 下的一个地址。在付费套餐中,容器页面上的「设置您自己的域名」会通过在你的服务商处添加一条 DNS 记录,把它迁到你自己网站的子域名上,例如 sgtm.yoursite.com。这个地址能扛过过滤列表,并让点击 Cookie 保持第一方。它上线后,模块会在下一次同步时把你的网站切换过去,通常在一小时内,缓存标签也会刷新你已缓存的页面。不需要手动替换任何东西,在此之前旧地址也会继续工作。

手动添加 SignalHost

你也可以自己粘贴代码。在容器页面上,在「安装到您的网站」卡片中找到你的代码片段,按「复制」。把它粘贴到每个页面的 head 部分(在 Drupal 中,通过你的主题),紧跟在 Cookie 横幅的脚本之后,然后按「我已完成」。「复制给 AI 智能体」可以把同样的任务交给编程智能体。

手动粘贴会失去模块所做的事:没有东西检查你的首页,断开连接时也没有东西移除代码;而当你自己的域名上线时,你需要根据卡片上的「请更新网站代码」或宣布域名上线的电子邮件,自己替换代码。千万不要两种方式同时使用:两份代码会把每次访问计两次。

更新、管理与断开连接

和每个 drupal.org 模块一样,更新通过 Composer 获取,Drupal 的更新状态功能会报告新版本。

SignalHost 页面上的「Disconnect」会先询问一次:「Disconnect this site from SignalHost?」确认后会撤销网站的访问权限,从每个页面移除代码,并刷新你已缓存的页面。你的容器及其统计数据会保留,你可以随时重新连接。

在 signalhost.io 上,容器页面会显示「已由你网站上的 Drupal 模块安装」。它的「管理」按钮会带你前往「设置」中的「已连接的网站」,在那里「断开连接」同样有效:模块会在下一次同步时停止加载 SignalHost,通常在一小时内。

卸载模块同样会撤销网站的访问权限,并移除模块存储的所有内容。

出现问题时

  • 「Could not check (your server refused a request to itself)」:你的主机拦截了发往它自己地址的请求。这与你的访客无关;请在首页源代码中查找你的跟踪地址。
  • 「An older copy is on the page」或「The code is on the page twice」:有一份代码被手动粘贴到了主题、区块或其他模块中。移除它;模块会添加最新的那一份,两份代码会把每次访问计两次。
  • 提示你的网站已经用 Google 自己的代码片段加载了一个 Tag Manager 容器:移除那段代码片段,因为现在由 SignalHost 加载这个容器,两者同时存在会把每次访问计两次。Google Tag Manager 模块(google_tag)也是一样:两者只用其一,不要同时使用。
  • 此网站的地址在连接之后发生了变化:在副本上(例如预发布环境),不会发送任何东西。如果是线上网站搬了家,请断开连接后重新连接。
  • 「Last update」时间很久以前:模块在页面请求之后同步,从不通过 cron 同步。打开 SignalHost 页面也会触发一次同步,「Check again」则会强制同步一次。
  • 其他任何问题:请写信至 hello@signalhost.io,并附上你的网站地址。

商标声明

SignalHost 是 Algorithmo GmbH 的独立产品,与 Drupal 项目、Google、Meta 或 TikTok 没有关联,也未获得其认可。Google Analytics、Google Ads 和 Google Tag Manager 是 Google LLC 的商标;Meta 是 Meta Platforms, Inc. 的商标;TikTok 是 ByteDance Ltd. 的商标;Drupal 是 Dries Buytaert 的注册商标。

别再把数据丢给广告拦截器

免费开始。几分钟即可运行第一个容器。