Google Tag Manager GDPR 合规配置实操指南
Google Tag Manager GDPR compliance: a complete guide
Stape 梳理了 Google Tag Manager 实现 GDPR 合规的完整配置流程,指出 GTM 本身不决定合规性,核心在于标签触发与同意状态设置。
拆解了 GTM 的 6 种同意信号与 CMP 配置细节,为出海站点与营销团队提供了规避隐私合规风险的实操排查路径。
核心要点
GTM 本身不存在合规或不合规一说——是否合规,完全取决于代码与用户同意设置的具体配置方式。
用户同意机制主要依赖六类信号:
analytics_storage、ad_storage、ad_user_data、ad_personalization、functionality_storage、security_storage。CMP 必须默认设为“拒绝”(denied)状态,并在用户做出选择后实时将更新推送到 GTM。
Google 旗下的代码能自动响应“同意模式”(Consent Mode);其他第三方代码(如 Meta、TikTok、自定义 HTML)则需要明确配置拦截规则和基于同意状态的触发器。
服务端 GTM 虽能增强对发送至第三方服务商的数据控制,但网页端容器仍需向其传递同意信号——它无法替代同意管理机制。
安装 Google Tag Manager (GTM) 通常非常简单:把代码放进 <head> 标签,就算搞定了!
但随着隐私意识的提升与数据保护法规的收紧,真正棘手的是如何确保全流程合规,面对不同地区的法律及其适用范围时尤其如此。
本文不构成任何法律意见,旨在探讨使用 GTM 时常见的术语与法规含义,以及如何实现合规配置。建议务必咨询法务团队,确保业务完全符合所有法定要求。
违反 GDPR 的部分罚款可高达 2000 万欧元(约合 2320 万美元)或上一财年全球年营业额的 4%,以较高者为准。不过万幸的是,这只是顶格处罚,并非所有配置失误都会面临如此重罚。
除了直接的经济处罚,企业还需承担其他资源成本,比如调查投诉、解释未能尊重用户同意意愿的原因,以及修复甚至推倒重构追踪体系。
因此,若企业未能符合 GDPR 或违反相关法规,将面临巨大风险。严肃的背景介绍就到这里,接下来我们看看在使用 GTM 时,这些环节是如何相互关联的。
GTM 本质上只是一个代码管理工具,其自身不追踪也不记录任何内容,仅用于安装或加载其他追踪脚本。最常见的对象就是各类数据分析和广告平台工具。
这样一来,你就不必凡事都依赖开发或工程团队去部署脚本,还能顺手添加额外的追踪事件,例如表单提交、按钮点击、文件下载、完成购买等……总之,凡是你想在网站上追踪的用户行为,都可以通过 GTM 搞定。
那么,在追踪用户在你的网站上的各种行为时,GDPR 是在哪个环节发挥作用的?只要网站开始处理任何个人数据,它就必须介入——哪怕你没有收集用户的真实姓名,只要网络标识符能识别出具体个人,就同样受其约束。
那么,GTM 到底符合 GDPR 规范吗?GTM 本身无所谓合规与否,它只是一种分发机制。真正决定合规性的,是你在其中配置的内容:触发了哪些代码、收集了什么数据、允许在何时触发,以及这些数据最终流向了哪里。
这就需要针对每个 GTM 容器(如果你的业务配置了多个)分别进行评估,并逐一审查其中触发的每一项代码。
或许只有空无一物的 GTM 容器才是绝对合规的。当然,如果你压根不装,那肯定也完全合规。
但 GDPR 监管的远不止数据收集环节,它还涵盖了数据存储与保留、最小化原则、透明度、安全性,以及贯穿整个追踪生命周期的各项个人权利。
若想研读完整的法律条文,可以查阅欧盟 GDPR 法规全文。此外,欧盟 GDPR 与英国版 GDPR 之间也存在一些细微差别。
在讨论网站追踪时,你可能经常听到“GDPR Cookie 授权许可”、“授权横幅(Consent banner)”以及“CMP(许可管理平台)”等说法。
无论用户最终选择同意还是拒绝,在做出决定前,网站都只能写入基础必要 Cookie。通过接入 CMP,配合 GTM(Google 标签管理器)的追踪就能满足合规要求。GTM 的做法是,先将默认许可状态设为“拒绝(denied)”。
CMP 会将这些许可信号同步给 GTM,GTM 再传递给各个代码(Tag)。部分代码本身具备“许可感知(consent-aware)”能力,能自动调整追踪行为;而对于不支持该特性的代码,则需要显式拦截,只在获得相应许可后才触发。
简而言之,GTM 会监听用户的授权决定,确保只有在拿到对应许可的前提下,代码才会向平台回传追踪数据。粗略来说,想让 GTM 符合合规要求,主要通过以下两点实现:
- 1.
将默认许可状态设为“拒绝”。
- 2.
根据用户的实际授权选择来触发代码。
当然,实际细节远不止这么简单。用户的授权选择具体是通过以下信号来传递的:
| 信号 | 控制内容 | 在 CMP 中的对应分类* |
analytics_storage | 用于分析的存储 | 偏好或统计 |
ad_storage | 用于广告营销的存储 | 营销或广告 |
ad_user_data | 向 Google 发送用于广告目的的用户数据 | |
ad_personalization | 个性化广告 | |
functionality_storage | 记录用户偏好(如语言、设置等) | 功能或偏好 |
security_storage | 网站核心功能(如安全登录、页面导航等) | 基础必要或绝对必要 |
*不同 CMP 中的分类名称可能略有不同,它们本质上只是将特定类型的 Cookie 打包归类。
因此,用户一旦勾选“营销/广告”类 Cookie,对应的这三个信号就都会被设为同意。这样一来,用户就不必面对晦涩的技术信号,直接做选择也更简单。
接下来,我们看看具体该如何实操。
1. 盘点现有代码与数据
首先需要全面盘点现有代码以及网站当前收集的所有数据,无论是通过 GTM、插件、应用部署,还是直接硬编码到网页中的。针对每一款工具,记录以下信息:
触发条件是什么
收集并发送了哪些数据(包括各类事件参数)
使用了哪些 Cookie 或浏览器存储
对应哪种许可分类(或信号)
代码模板自带哪些许可检查,是否额外配置了其他许可检查
清理掉所有闲置的脚本和代码,把精力集中在真正需要的项目上。
2. 安装 CMP
CMP 既可以独立部署,也可以通过 GTM 引入;如果希望集中管理,用 GTM 会更方便。不过,即便 CMP 是硬编码写入或通过插件安装的,只要能和 GTM 正常通信,同样可行。
如果选择通过 GTM 部署,务必将其绑定到 Consent Initialization(许可初始化)触发器上。该触发器的唯一用途就是在其他所有代码之前执行并获取许可状态,以便后续代码知晓用户的选择。
正如前文所述,在 GTM 中,除基础/必要分类外,CMP 代码应将默认许可状态统一设置为“拒绝(denied)”。
此外,还可以在 GTM 设置中开启“许可概览(Consent Overview)”,这样管理所有代码的许可状态会轻松得多。

接下来,确保各项代码遵从用户的选择。
3. 配置许可状态更新
用户不仅在首次看到同意弹窗并做出选择时会触发更新,后续也可能撤回或调整同意设置。无论哪种情况,GTM 都需要记录这些状态,并把用户的同意信息同步给相关工具。
因此,要将用户的选择映射到前面提到的对应许可信号上。举个例子,如果用户只接受了分析类 Cookie,那就不能放行广告类 Cookie,更不能触发任何营销类代码。
此外,许可状态更新必须在当前页面立刻发送,不能等到跳转之后。否则用户可能刚同意跟踪就离开了页面,导致信号还没来得及传给代码。
许可模式主要分为两种:
- 1.
基本模式(Basic):在获得相关授权之前,会拦截所有 Google 代码,完全不发送任何信息。
- 2.
高级模式(Advanced,亦称 v2):即使同意请求被拒,Google 代码依然会触发,并向 Google 各类工具发送无 Cookie 的 Ping 请求。系统随后会将这些匿名断点数据输入机器学习算法,用于后续的数据建模。
高级许可模式如今基本已成为主流标配,除非法律法规或特殊要求强制完全拦截相关代码。但要注意,即便工具技术上支持发送无 Cookie 的 Ping 请求,也不代表法律上就一定合规,这一点需要单独评估。
前面讨论的都是 Google 官方代码模板,但像 Meta、TikTok 等第三方自定义模板以及所有自定义 HTML 代码,并不会响应“Google 许可模式(GCM)”,必须采用其他配置方式。
这就意味着,在明确拿到“已授权”(granted)信号之前,必须对这些代码进行“显式拦截”。此时,可以将 CMP 推送的 dataLayer 事件,或是变量中包含相关许可信号的具体事件,作为 GTM 中的触发器。
比如,可以在 cookie_consent_update 触发且对应变量包含广告/营销类 Cookie 授权时,再去触发 Meta Pixel;或者在 add_to_cart 等相关触发器激活且营销类 Cookie 获批时,再触发 AddtoCart。
好在目前主流工具的代码模板大多已在代码层级提供了某种形式的 GCM 检查。启用后,代码就会根据 GCM 从 CMP 接收到的许可信号来做出相应响应。

不过就算有这种检查机制,依然需要通过预览模式并检查浏览器中的网络请求(Network),来确认用户许可是否真正得到了遵守——这也正是我们接下来要讨论的内容。
4. 充分测试,反复验证!
最后,一定要进行全面测试,观察代码和脚本在各种场景下的表现。测试场景可以包括:
未对弹窗进行任何操作:许可状态应默认为拒绝(denied)。
仅接受必要 Cookie:许可状态应为拒绝,代码不应触发,或者在适用情况下仅发送无 Cookie 的 Ping 请求。
仅接受分析类:仅
analytics_storage状态应为“granted”,不得触发任何营销类代码。仅接受广告类:仅有三个广告信号应为“granted”,不得触发任何分析类代码。
全部接受:这种情况最简单,所有信号都应为“granted”。
撤回之前授予的同意:后续代码应及时调整行为模式。
带着已保存的同意状态再次访问:检查最初的选择是否依然有效。
进行这些测试时,可以结合浏览器存储和网络请求,在 GTM 的预览模式下观察不同状态下分别向各工具发送了哪些数据。如果你配置了服务端跟踪,也可以一并利用 sGTM 的预览模式。
务必重点关注首次浏览页面、结账以及跨域名跳转等关键行为,排查是否存在数据不一致或状态更新异常等问题。
以下几类常见错误非常容易踩坑,提前了解有助于规避风险:
- 1.
未完全由 GTM 控制:访客可能拒绝了 Cookie,但如果部分跟踪代码是通过插件或第三方工具直接加载的,依然会被触发。
- 2.
同意状态更新过晚:用户即便选择了拒绝,但如果状态更新滞后,已经触发的代码请求其实早就发送出去了。
- 3.
将“未设置”直接当成拒绝:必须明确设置默认同意状态,并测试 CMP 未加载或加载缓慢时会出现什么情况。
- 4.
将所有信号绑定一次性授权:用户仅同意分析类跟踪,绝不能顺带把其他所有信号也一并算作已同意。
- 5.
未测试撤回与修改授权信号:重新打开横幅修改同意状态后,后续的跟踪行为必须即时受到相应控制。
- 6.
哈希处理不等于合规:广告平台在做高级客户匹配时使用的邮箱哈希值,并不意味着完全匿名且合法。
上述问题主要集中在 GTM 层面。通常来说,一套规范合规的 CMP 横幅配置还应涵盖以下几个维度:
说明清晰:明确向访客解释每个跟踪分类的具体含义和跟踪内容。
主动选择:无视横幅、滑动页面或继续浏览都不能视为已同意。针对非必要跟踪,必须由用户主动做出选择。
分类独立:访客应能自主选择仅同意分析跟踪而不接受广告跟踪,反之亦然。
拒绝入口显眼:拒绝应当和接受一样简单,不要藏在三级菜单里或埋在很深的位置。
撤回或调整方便:横幅关闭后,依然要保留随时查看和修改 Cookie 偏好的入口。
CMP 还应记录并存储用户的同意凭据,包括用户看到了什么、同意了什么以及具体时间。你也可以强制要求用户先与横幅交互才能继续浏览网站,但“接受”、“拒绝”和“自定义”这几个选项必须同等明显、易于点击。
聊完 CMP 的机制,再来看看目前市面上都有哪些优秀工具和解决方案。
严格来说并不存在绝对的最佳工具,关键在于团队的维护能力以及它与现有技术栈的契合度。
不过行业内确实有一些知名度较高的 CMP,例如 Cookiebot、CookieYes、Usercentrics CMP 等。从核心功能来看,它们(理应)都能实现相同的目标:
传递默认同意状态
根据用户选择发送状态更新指令
保存用户同意记录
支持添加横幅并进行自定义配置
扫描站点 Cookie 并辅助或直接完成分类
集成 Google 同意模式(GCM)
各家的收费档位和界面设计自然会有所差异,因此列出上述工具并不代表官方背书。如果你想看官方精选名单,可以查阅 Google 认证 CMP 合作伙伴。
因此,在挑选 CMP 时,不仅要对比上述核心功能,还要评估它与你的网站或 CMS(如 Shopify、WordPress 或自建系统)的集成兼容性。大多数 CMP 都提供免费试用,不妨先上手实测几款,再做最终决定。
另一种解决方案是采用服务端追踪。很多与 GDPR 和 Cookie 授权相关的合规问题,根源都在于数据是如何直接发送给第三方工具的。
改用第一方环境通常就能化解这些问题:也就是先把追踪数据发送到你自己的服务器上,这样一来,无论数据最终是要同步给 Google Analytics 还是各类广告平台,你都能自主掌控具体向这些工具发送哪些内容。
部署此类服务器有多种工具可选,它们所能带来的收益也有很大差异:
专业的全托管服务商——例如 Stape
手动/自建托管(其他云服务与 Docker)——AWS、Microsoft Azure、Render 或 Cloudflare Workers 等
具体选择哪种工具,在成本以及搭建和维护的工作量上会有很大差异,需要单独深入评估,毕竟最适合的方案还要结合你的业务场景和其他因素来决定。
前文多次提到了服务端 GTM(即 sGTM),现在不妨来深入聊聊它。
在服务端 GTM 架构下,你的 Web 或客户端 GTM 会先将采集到的数据请求发送至 sGTM,随后再由其转发至各自的目标平台。
这样一来,你就多了一层把关机制,能够审查并控制向第三方厂商发送的具体数据。对于支持该功能的 Google 代码,Web 端 Google 代码会将用户授权参数同步至服务端容器,具备授权感知能力的服务端代码便会像在 Web 容器中一样,相应调整其触发逻辑。
其他厂商和自定义事件则需要单独配置授权控制逻辑,不过通常情况下,Web 容器同样可以将授权参数同步至服务端。换句话说,你可以直接在 sGTM 中进行配置:只有在满足特定授权信号的前提下,才将数据转发给对应的厂商。
对于 sGTM,建议重点审查以下几点:
发送至各平台的数据——检查事件参数、URL 及各类标识符,剔除目标平台不需要的所有多余信息。
授权管理——确保 Web 容器采集到的用户授权选择能实时同步至服务端容器,且触发的代码均严格遵循这些选择。
数据保留——如果系统会保存请求日志或用户标识符,必须核查具体存储了哪些内容以及何时删除。托管服务商、底层存储数据库以及接收数据的平台各自都有不同的数据保留策略。
服务器所在地——明确服务器的实际运行地以及接收平台处理数据的具体区域。服务器设在欧洲并不等同于数据就一定会留在欧洲,这一点需要做进一步评估。
sGTM 虽然赋予了你极大的控制权,但你依然必须主动利用好这种掌控力来确保合规,且整个过程应当咨询法务团队的意见。明确了这一点之后,我们来看最后的总结。
安装 GTM、添加代码以及设计一个美观的授权弹窗确实需要投入精力,但单凭这些都无法直接保证合规。从用户数据的采集到各触点的流转,整条链路都必须始终尊重用户的授权意愿,并将其准确传递给每一个下游平台。
全面审查现有配置、梳理实际追踪需求并做好文档记录,能为你合规部署 GTM 提供坚实保障。在此基础上,你还可以进一步引入服务端追踪——这也正是未来数据追踪的大势所趋。
来源:Stape Server-Side Tracking Blog · stape.io