关于 gpc-cookie-integration
面向网站开发和隐私团队的 GPC 与 Cookie 同意集成指南,说明如何检测浏览器信号并更新 CMP 设置。内容涵盖法律适用范围、实现示例和验证方法。
主要功能
- 01检测 HTTP 与 JavaScript GPC 信号
- 02将 GPC 映射到 CMP 同意类别
- 03按司法辖区处理退出请求
- 04验证广告 Cookie 与标签拦截
- 05记录并处理同意状态冲突
适用场景
- 01为网站添加 GPC 信号检测
- 02配置 OneTrust 或 Cookiebot
- 03测试广告追踪是否被拦截
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ mukul975/ privacy-data-protection-skills --skill gpc-cookie-integration安装后在 Claude Code 中输入/gpc-cookie-integration确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/template.mdreferences/standards.mdworkflows.mdscripts/process.py详细介绍
全局隐私控制与 Cookie 同意集成
概述
全局隐私控制(GPC)是一种浏览器级信号,用于向网站传达用户的隐私偏好。GPC 由 GPC 社区组制定,并根据加利福尼亚州的 CCPA/CPRA(自 2023 年 1 月 1 日起生效)、科罗拉多州的 CPA(自 2024 年 7 月 1 日起生效)、康涅狄格州的 CTDPA(自 2023 年 7 月 1 日起生效)及美国其他州的隐私法,被认定为具有法律约束力的退出机制。每次请求中,GPC 都会发送 Sec-GPC: 1 HTTP 标头和 navigator.globalPrivacyControl JavaScript 属性。网站必须检测此信号,并自动触发退出出售、共享和定向广告,无需用户采取其他操作。与 Cookie 同意管理平台(CMP)集成至关重要,可确保 GPC 信号正确阻止广告 Cookie 和数据共享。
GPC 信号规范
GPC 的工作方式
HTTP 标头:
Sec-GPC: 1
当用户在浏览器或浏览器扩展中启用 GPC 后,该标头会出现在每个 HTTP 请求中。
JavaScript API:
navigator.globalPrivacyControl // Returns true if GPC is enabled
支持 GPC 的浏览器和扩展:
| 浏览器/扩展 | GPC 支持 | 启用方式 |
|---|---|---|
| Firefox | 内置(v120+) | 设置 > 隐私与安全 >“告知网站不要出售或共享我的数据” |
| Brave | 内置(默认开启) | 默认启用;可在设置 > Shields 中关闭 |
| DuckDuckGo 浏览器 | 内置(默认开启) | 默认在移动设备和桌面设备上启用 |
| DuckDuckGo 扩展 | 扩展 | 安装扩展;默认启用 GPC |
| Privacy Badger(EFF) | 扩展 | 安装扩展;默认启用 GPC |
| OptMeowt | 扩展 | 专用于 GPC 的 Chrome/Firefox 扩展 |
| Safari | 不原生支持 | 需要第三方扩展 |
| Chrome | 不原生支持 | 需要扩展(DuckDuckGo、Privacy Badger) |
GPC 与 Do Not Track(DNT)的区别
| 功能 | GPC | DNT |
|---|---|---|
| HTTP 标头 | Sec-GPC: 1 | DNT: 1 |
| JavaScript API | navigator.globalPrivacyControl | navigator.doNotTrack |
| 法律认可 | 是 — CCPA/CPRA、CPA、CTDPA 及其他州法律 | 没有法律强制机制 |
| 适用范围 | 退出出售、共享和定向广告 | 一般跟踪偏好 |
| 浏览器采用情况 | 逐渐普及(Firefox、Brave、DuckDuckGo) | 大多数浏览器已弃用 |
| 行业合规情况 | 在适用司法管辖区内具有法律强制性 | 基本被忽视 |
美国各州法律对应关系
各州 GPC 法律要求
| 州 | 法律 | GPC 状态 | 生效日期 | 要求 |
|---|---|---|---|---|
| 加利福尼亚州 | CCPA/CPRA | 具有法律约束力的退出选择 | 2023 年 1 月 1 日 | 必须将 GPC 视为有效的拒绝出售和共享请求(Cal. Civ. Code §1798.135(e);11 CCR §7025(b)) |
| 科罗拉多州 | CPA | 具有法律约束力的退出选择 | 2024 年 7 月 1 日 | 必须遵守“通用退出机制”,包括 GPC(C.R.S. §6-1-1313(1)(a);4 CCR 904-3 Rule 5.11) |
| 康涅狄格州 | CTDPA | 具有法律约束力的退出选择 | 2023 年 7 月 1 日(UOM:2025 年 1 月 1 日) | 必须遵守“退出偏好信号”(P.A. 22-15, §6(a)(6)) |
| 蒙大拿州 | MCDPA | 具有法律约束力的退出选择 | 2024 年 10 月 1 日 | 必须遵守通用退出机制 |
| 得克萨斯州 | TDPSA | 具有法律约束力的退出选择 | 2024 年 7 月 1 日(UOM:2025 年 1 月 1 日) | 必须遵守通用退出机制 |
| 俄勒冈州 | OCPA | 具有法律约束力的退出选择 | 2024 年 7 月 1 日(UOM:2026 年 1 月 1 日) | 必须遵守通用退出机制 |
| 特拉华州 | DPDPA | 具有法律约束力的退出选择 | 2025 年 1 月 1 日(UOM:2026 年 1 月 1 日) | 必须遵守通用退出机制 |
| 新罕布什尔州 | NHPA | 具有法律约束力的退出选择 | 2025 年 1 月 1 日 | 必须遵守通用退出机制 |
| 新泽西州 | NJDPA | 具有法律约束力的退出选择 | 2025 年 1 月 15 日(UOM:2025 年 7 月 15 日) | 必须遵守通用退出机制 |
| 弗吉尼亚州 | VCDPA | 自愿(无 UOM 强制要求) | 2023 年 1 月 1 日 | 没有明确的 UOM 要求,但必须允许退出定向广告 |
| 犹他州 | UCPA | 自愿(无 UOM 强制要求) | 2023 年 12 月 31 日 | 无 UOM 要求 |
GPC 会触发什么
在适用司法管辖区检测到用户的 GPC 时:
| 处理活动 | GPC 影响 | 必须采取的行动 |
|---|---|---|
| 出售个人信息 | 触发退出选择 | 停止出售该用户的 PI |
| 为跨情境行为广告而共享 | 触发退出选择 | 停止与广告合作伙伴共享 PI |
| 定向广告 | 触发退出选择(CPA、CTDPA、TDPSA) | 禁用行为定向 |
| 用于自动化决策的画像分析 | 触发退出选择(部分州) | 禁用画像分析 |
| 分析(第一方) | 不触发 | GPC 不会退出第一方分析 |
| 必要 Cookie | 不触发 | 严格必要的 Cookie 不受影响 |
CMP 集成
检测和响应流程
Page Load
│
├── Check for GPC signal
│ ├── navigator.globalPrivacyControl === true
│ │ OR
│ └── Server detects Sec-GPC: 1 header
│
├── Determine user jurisdiction
│ ├── IP geolocation → US state mapping
│ └── Check if state has GPC legal requirement
│
├── If GPC detected AND applicable jurisdiction:
│ ├── Automatically set consent state:
│ │ ├── ad_storage: denied
│ │ ├── ad_user_data: denied
│ │ ├── ad_personalization: denied
│ │ ├── analytics_storage: [per CMP default — GPC does not cover]
│ │ └── sale_of_data: opted_out
│ │
│ ├── Block advertising cookies and tags
│ ├── Do NOT fire: Meta Pixel, Google Ads remarketing, third-party ad tags
│ ├── DO fire: GA4 (if analytics consent separate from GPC)
│ │
│ ├── Display modified banner (optional):
│ │ "We detected your Global Privacy Control preference.
│ │ We will not sell or share your personal information.
│ │ [Manage Other Preferences]"
│ │
│ └── Record GPC opt-out in consent log
│
└── If GPC detected but NON-applicable jurisdiction (e.g., EU):
└── Treat as privacy signal but apply jurisdiction's own rules
(EU still requires opt-in consent regardless of GPC)
Pinnacle E-Commerce Ltd 的实现
服务器端 GPC 检测(Node.js 中间件):
function detectGPC(req, res, next) {
const gpcHeader = req.headers['sec-gpc'];
const gpcEnabled = gpcHeader === '1';
req.gpcSignal = gpcEnabled;
if (gpcEnabled) {
// Determine jurisdiction from IP
const userState = geolocateToState(req.ip);
// States where GPC is legally binding
const gpcMandatoryStates = ['CA', 'CO', 'CT', 'MT', 'TX', 'OR', 'DE', 'NH', 'NJ'];
req.gpcLegallyBinding = gpcMandatoryStates.includes(userState);
req.gpcOptOut = {
sale: gpcEnabled && req.gpcLegallyBinding,
sharing: gpcEnabled && req.gpcLegallyBinding,
targetedAdvertising: gpcEnabled && req.gpcLegallyBinding,
};
}
next();
}
客户端 GPC 检测和 CMP 更新:
function handleGPCSignal() {
const gpcEnabled = navigator.globalPrivacyControl === true;
if (!gpcEnabled) return;
// Get user's jurisdiction (from server or geolocation)
const userJurisdiction = getUserJurisdiction();
const gpcBindingStates = ['CA', 'CO', 'CT', 'MT', 'TX', 'OR', 'DE', 'NH', 'NJ'];
if (gpcBindingStates.includes(userJurisdiction)) {
// Update Google Consent Mode
gtag('consent', 'update', {
'ad_storage': 'denied',
'ad_user_data': 'denied',
'ad_personalization': 'denied',
// analytics_storage not affected by GPC
});
// Update CMP state
updateCMPState({
sale_optout: true,
sharing_optout: true,
targeted_advertising_optout: true,
source: 'gpc_signal',
});
// Remove any existing advertising cookies
removeAdvertisingCookies();
// Log GPC opt-out
logConsentEvent({
type: 'gpc_auto_optout',
jurisdiction: userJurisdiction,
timestamp: new Date().toISOString(),
gpc_header_present: true,
});
}
}
function removeAdvertisingCookies() {
const adCookies = ['_fbp', '_fbc', '_gcl_au', 'IDE', 'fr', 'NID'];
adCookies.forEach(name => {
document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; domain=.pinnacle-ecommerce.com`;
});
}
// Run on page load
handleGPCSignal();
CMP 平台集成
OneTrust GPC 配置:
| 设置 | 值 |
|---|---|
| 遵守 GPC 信号 | 已启用 |
| GPC 处理方式 | 应用于“出售个人数据”和“定向广告”类别 |
| GPC 适用地区 | US-CA, US-CO, US-CT, US-MT, US-TX, US-OR, US-DE, US-NH, US-NJ |
| GPC 横幅行为 | 隐藏退出选择横幅(已退出);显示确认通知 |
| GPC 同意记录 | 将 GPC 信号记录为退出选择来源 |
Cookiebot GPC 配置:
| 设置 | 值 |
|---|---|
| 遵守 GPC | 已启用 |
| GPC → 类别映射 | GPC = 拒绝“营销”类别 |
| GPC 地区 | 加利福尼亚州、科罗拉多州、康涅狄格州、蒙大拿州、得克萨斯州、俄勒冈州、特拉华州、新罕布什尔州、新泽西州 |
GPC 验证与合规
测试 GPC 集成
| 测试 | 预期行为 | 验证方法 |
|---|---|---|
| 发送 GPC 标头 | 浏览器发送 Sec-GPC: 1 | 网络检查器 |
| 服务端检测到 GPC | 中间件设置 req.gpcSignal = true | 服务端日志 |
| 屏蔽广告 Cookie | 不设置 _fbp、_gcl_au、IDE Cookie | Cookie 检查器 |
| 屏蔽广告标签 | 不发送 Meta Pixel、Google Ads 再营销请求 | 网络检查器 |
| 分析不受影响 | GA4 仍会触发(GPC 不涵盖分析) | GA4 实时报告 |
| 同意日志记录 GPC | 记录 GPC 退出选择的时间戳和司法辖区 | 数据库查询 |
| CCPA 退出链接反映 GPC 状态 | “Do Not Sell”页面显示检测到 GPC 的退出状态 | UI 检查 |
| 显示修改后的横幅 | 横幅确认已识别 GPC 偏好 | 视觉验证 |
CCPA/CPRA 特定要求
根据加利福尼亚州总检察长法规(11 CCR §7025):
- 不得降低服务质量:企业不得将 GPC 解读为同意选择加入财务激励计划
- 冲突解决:如果用户此前已选择加入出售/共享,之后访问时出现的 GPC 应视为撤销该选择加入
- 不得再次提示:不得要求使用 GPC 的用户重新考虑其退出选择
- 记录保存:保留由 GPC 触发的退出记录 24 个月
- 隐私政策披露:在隐私政策中声明企业认可 GPC
Pinnacle E-Commerce Ltd 隐私政策文本:
“我们会识别浏览器发送的全球隐私控制(GPC)信号。当我们检测到来自加利福尼亚州用户的 GPC 信号时,会将其视为用户根据《加利福尼亚消费者隐私法案》(CCPA)和《加利福尼亚隐私权法案》(CPRA)的定义,要求退出出售和共享个人信息。我们会自动应用此退出选择,无需您采取任何其他操作。”
边缘情况
| 场景 | 处理方式 |
|---|---|
| 用户已启用 GPC,但此前已选择加入共享 | GPC 优先——视为退出(以最近的信号为准) |
| 用户已启用 GPC,但所在州不适用(例如 Utah) | 尊重 GPC 隐私偏好,但法律并无此要求 |
| 用户已启用 GPC,且位于 EU | GPC 不能替代选择加入同意;应用 EU 规则 |
| 在 API 请求中检测到 GPC(无浏览器) | 如果存在 Sec-GPC 标头,则予以遵从(可能来自注重隐私的应用) |
| 部分页面启用 GPC,其他页面禁用 | 按请求评估;通常不应出现此情况 |
| 存在多个退出信号(GPC + Cookie 横幅拒绝) | 应用限制最严格的处理方式——两者都会导致退出 |
重要法律和技术参考
- GPC 规范(globalprivacycontrol.org) — GPC 信号的技术规范
- CCPA/CPRA Cal. Civ. Code §1798.135(e) — 企业必须将 GPC 视为有效的退出请求
- 11 CCR §7025(b)-(c)(加利福尼亚州总检察长法规) — GPC 实施要求
- Colorado CPA Rules, 4 CCR 904-3, Rule 5.11 — 通用退出机制要求,包括 GPC
- Connecticut CTDPA P.A. 22-15, §6(a)(6) — 退出偏好信号要求
- 加利福尼亚州总检察长执法行动:Sephora(2022 年 8 月) — 首例因未遵从 GPC 而执行的 CCPA 案件;和解金额为 120 万美元
- EDPB 关于 GPC 的声明(2023) — 关于 GPC 可否作为行使第 21 条异议权的表达的欧洲观点
- W3C 隐私社区组 — GPC 规范的制定
- IAB CCPA 合规框架 — US Privacy String 与 GPC 的互操作性