UniConsent 的 Google Tag Gateway 与同意管理

相关系列:Google Consent Mode

什么是 Google Tag Gateway?

Google Tag Gateway (GTG) 是一项 Google 基础设施功能,它从第一方域名(而非 Google 的服务器)提供 Google 标签服务,包括 gtag.js、Google Tag Manager 和 Google Analytics。浏览器不再从 googletagmanager.comgoogle-analytics.com 获取脚本,而是向您域名上的第一方路径(如 your-domain.com/gtg/js)发送请求。CDN(Cloudflare、Akamai 或 Fastly)或负载均衡器会将这些请求透明地代理到 Google。

有关官方文档,请参阅 Google Tag Gateway 文档

GTG 的部署方式

有两种部署方法:

一键 CDN 注入

CDN 提供商(例如 Cloudflare)通过 CDN 将衡量标签直接注入页面的 head 元素中。这使您失去了对加载顺序的控制。CDN 决定何时以及如何重写 Google 标签 URL,您无法控制这些脚本相对于 CMP 代码片段的位置。

由于 GTG 标签作为第一方脚本加载(来自您自己的域名而非 Google 的域名),基于查找从 Google Tag Manager 域名加载的脚本的 Basic Consent Mode 阻止方式变得无效。这些标签表现为第一方资源,不会被基于域名的阻止规则捕获。

手动 GTG 设置

您在页面源代码中手动添加第一方脚本路径,并控制它相对于其他脚本的位置。这使您可以完全控制加载顺序。当同意时序至关重要时,手动设置是推荐的部署方式。

有关设置说明,请参阅 设置 Google Tag Gateway

GTG 对同意的影响

当 GTG 未启用时,Google 标签从第三方域名加载。同意流程是可预测的:您的 CMP 首先加载,设置同意默认值,Google 标签在执行时遵守这些默认值。

当 GTG 启用时,特别是通过一键 CDN 注入方式,Google 标签可能会更快加载,因为它们从第一方域名提供服务。如果在 Google 标签执行时 CMP 尚未设置同意默认值,标签将在没有同意信号的情况下运行。这被称为"延迟"同意信号。

延迟同意信号意味着什么

  • Google 标签可能在用户做出同意选择之前就设置了 Cookie 或收集了数据
  • Consent Mode 默认值(如 denied)在标签首次执行期间未被应用
  • 转化建模和分析数据可能不准确
  • 网站可能违反 GDPR、ePrivacy 或其他要求在数据收集前获得同意的法规

如何防止延迟同意信号

为确保在不违反同意要求的情况下维持衡量功能,您应该设置一个默认拒绝块,使 Google 标签以拒绝状态启动。然后 CMP 加载并为用户已接受的区域明确重新授予同意。事件会被排队,并在同意授予后重放。

如果您使用 Google Tag Manager,可以直接在 GTM 中设置默认拒绝状态:

  1. 在 GTM 中导航至"Configuration"
  2. 进入"Manage" > "Override consent mode defaults"
  3. 将配置设置为拒绝该标签的所有内容

这会在通过 CDN 加载 Google 标签之前注入一个默认拒绝代码块。您还可以使用数据传输控制来防止在同意被拒绝时将行为衡量和配置数据发送给 Google。

有关同意实施和故障排查的更多信息,请参阅 Google 的 Consent Mode 文档

如何检查标签是否加入了 GTG

您可以通过 Google 标签设置验证标签是否已加入 Google Tag Gateway。有关检查 GTG 加入状态的详细步骤,请参阅 访问您的 Google 标签设置

方法 1:Google Tag Manager

  1. 打开 Google Tag Manager
  2. 进入"Admin"部分
  3. 在"Google Tag Gateway"下确认它是否标记为您的特定域名处于活跃状态

方法 2:浏览器开发者工具

  1. 打开开发者工具(F12)并进入 Network 标签页
  2. 加载您的页面并按您自己的域名过滤请求
  3. 查找指向 /gtg/js 或类似第一方路径的请求,这些请求返回 Google 标签脚本
  4. 如果 Google 标签脚本(gtag.js、gtm.js)从您的域名而非 googletagmanager.com 提供服务,则表示 GTG 处于活跃状态

有关加入和配置的详细信息,请参阅 Google Tag Gateway 设置指南

UniConsent 的 Advanced Consent Mode 是启用了 GTG 的标签的推荐机制。Advanced Consent Mode 之所以特别推荐,是因为它与手动 GTG 部署兼容,在这种部署中您可以控制脚本导入顺序。

  1. 在任何标签触发之前设置同意默认值。UniConsent 同意初始化代码片段在页面 <head> 中同步运行,在 Google 标签执行之前将所有同意类型默认设置为 denied,无论标签是从 Google 的服务器还是通过 GTG 加载。

  2. 与手动 GTG 兼容。当您控制脚本导入顺序(手动 GTG)时,将 UniConsent 代码片段放置在 GTG 脚本路径之前可确保始终先设置同意默认值。

  3. 启用转化建模。当同意被拒绝时,Google 标签仍会发送无 Cookie 的 ping,为转化建模提供数据,从而恢复相当一部分转化数据。

第 1 步:在 app.uniconsent.com 注册并获取您的许可证 ID。

第 2 步:在设置期间选择 Advanced Consent Mode。配置 Google Consent Mode 集成时选择"Advanced Mode"。

第 3 步:将 UniConsent 代码片段放置在页面 <head> 中。它必须出现在任何 Google 标签脚本(包括 GTG 路径)之前。示例顺序:

<head>
  <!-- 1. UniConsent CMP snippet (sets consent defaults) -->
  <script src="https://cmp.uniconsent.com/v2/stubgcm.min.js"></script>
  <script async src="https://cmp.uniconsent.com/v2/a]YOUR_LICENSE_ID/cmp.js"></script>

  <!-- 2. Google consent defaults (if not using GTM) -->
  <script>
  (function() {
      if(!window['gtag']) {
          window['dataLayer'] = window['dataLayer'] || [];
          window['gtag'] = function(){window['dataLayer'].push(arguments);}
      }
      window['gtag']('consent', 'default', {
          ad_storage: 'denied',
          ad_user_data: 'denied',
          ad_personalization: 'denied',
          analytics_storage: 'denied',
          functionality_storage: 'denied',
          personalization_storage: 'denied',
          security_storage: 'granted',
          wait_for_update: 500,
      });
  })();
  </script>

  <!-- 3. Google tags / GTG script path (loads after consent defaults are set) -->
  <script async src="https://www.googletagmanager.com/gtag/js?id=YOUR_ID"></script>
</head>

第 4 步:使用 UniConsent Consent Mode Scanner 验证同意时序,确认同意默认值在 Google 标签执行之前已设置。

第 5 步:在 UniConsent 控制台中进行监控。实施审计报告会标记延迟同意信号和缺失的同意默认值。

检测到同意信号延迟时的处理方法

如果 Google 标签收到的同意信号延迟(在首次执行之后),且已确认 GTG 加入状态,您应该:

  1. 采用 Advanced Consent Mode。在 UniConsent 控制台中启用 Advanced Consent Mode,并确保 UniConsent 代码片段在 GTG 脚本之前加载。Advanced Consent Mode 是启用了 GTG 的标签的推荐机制,因为它与手动 GTG 兼容。

  2. 启用数据传输控制,根据您的需求限制 Google 标签根据同意状态可以传输的数据。

  3. 设置全局同意默认值,根据您的需求为每种同意类型(ad_storagead_user_dataad_personalizationanalytics_storage)定义默认同意状态(granteddenied)。UniConsent 会根据用户所在地区自动配置这些默认值。

或者,您可以将所有标签迁移到 Google Tag Manager 容器中,并通过 GTG 部署 GTM,这将集中化加载顺序控制,使 GTM 内置的同意检查应用于容器内的所有标签。您也可以手动设置 GTG,在这种方式中您可以控制脚本导入顺序,将 UniConsent CMP 代码片段放置在页面源代码中 GTG 脚本引用之前。

数据传输控制和全局同意默认值

Google 的数据传输控制根据用户的同意状态限制 Google 标签发送的数据。结合 UniConsent 的同意信号,这创建了一个分层方法:

控制功能使用场景
全局同意默认值在用户交互之前为所有同意类型设置初始同意状态始终使用,确保标签在首次页面加载时有同意基线
数据传输控制限制特定数据字段发送给 Google当您需要超出同意类型切换的精细控制时
基于地区的默认值按地理区域设置不同的默认值当您同时为 EEA/UK 和其他地区的用户提供服务时

全局默认拒绝 vs 区域默认拒绝

虽然您可以在技术上仅在特定区域(如 EEA)将同意默认值设置为 denied,但 Google 强烈建议设置全局默认拒绝。全局拒绝可以防止在您日后更改横幅区域行为时出现延迟同意问题。对于 Google 标签无法移到 CMP 脚本之后的情况,Google 特别建议使用 Tag Manager 管理面板中的 Global Consent Defaults 界面来设置默认同意状态。

UniConsent 如何自动处理区域同意

UniConsent 会根据检测到的用户区域自动更新同意状态:

  • 对于 EEA、UK 和瑞士,所有同意类型默认为 denied。用户必须与同意横幅交互后才会授予任何同意。
  • 对于不要求同意的区域,UniConsent 会根据您的配置自动授予同意。这意味着这些区域的用户不会被不必要的同意提示阻拦,Google 标签可以立即收集数据,无需等待横幅交互。

此区域感知行为可在 UniConsent 控制台中完全配置,允许您定义哪些区域需要明确同意,哪些区域可以自动授予同意。

Google Tag Gateway 与服务器端 GTM 的对比

GTG 和服务器端 Google Tag Manager (sGTM) 是可以协同工作的不同解决方案:

Google Tag Gateway服务器端 GTM
功能从第一方域名提供 Google 标签脚本通过服务器端容器路由标签请求
部署方式CDN 级别(Cloudflare、Akamai、Fastly)或手动需要服务器端 GTM 容器(Cloud Run、App Engine 等)
对同意的影响改变脚本加载顺序;可能导致同意信号延迟同意检查在服务器端发生,在数据转发之前
成本无额外 Google 费用;需要现有 CDN 或负载均衡器需要服务器托管费用
最适合提高标签交付率,减少广告拦截器的影响完全控制数据流,服务器端同意执行

两者可以配合使用:GTG 从第一方域名提供客户端标签,而 sGTM 在服务器端处理生成的事件,在转发给 Google 之前应用同意检查。

相关教程

Google 官方文档