gpc-cookie-integration について
Global Privacy Control と Cookie 同意管理を連携するための、Web 開発者やプライバシーチーム向けガイドです。シグナル検出、CMP の設定、法的要件、実装例、検証方法を扱います。
主な機能
- 01HTTP と JavaScript の GPC 検出
- 02GPC と CMP 同意カテゴリの対応付け
- 03管轄地域ごとのオプトアウト処理
- 04広告 Cookie とタグの遮断確認
- 05同意の競合の記録と解決
活用シーン
- 01Web サイトへの GPC 検出追加
- 02OneTrust または 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 Consent との Global Privacy Control の統合
概要
Global Privacy Control(GPC)は、ユーザーのプライバシー設定をウェブサイトに伝えるブラウザーレベルのシグナルです。GPC コミュニティグループによって仕様が定められ、カリフォルニア州の CCPA/CPRA(2023 年 1 月 1 日施行)、コロラド州の CPA(2024 年 7 月 1 日施行)、コネチカット州の CTDPA(2023 年 7 月 1 日施行)、その他の米国州法の下で法的拘束力のあるオプトアウト手段として認められています。GPC は各リクエストとともに、Sec-GPC: 1 HTTP ヘッダーおよび navigator.globalPrivacyControl JavaScript プロパティを送信します。ウェブサイトはこのシグナルを検出し、ユーザーに追加の操作を求めることなく、販売、共有、ターゲティング広告のオプトアウトを自動的に実行する必要があります。GPC シグナルによって広告用 Cookie とデータ共有が確実に抑制されるようにするには、Cookie 同意管理プラットフォーム(CMP)との統合が不可欠です。
GPC シグナルの仕様
GPC の仕組み
HTTP ヘッダー:
Sec-GPC: 1
ユーザーがブラウザーまたはブラウザー拡張機能で GPC を有効にしている場合、すべての HTTP リクエストに含まれます。
JavaScript API:
navigator.globalPrivacyControl // Returns true if GPC is enabled
GPC 対応ブラウザーと拡張機能:
| ブラウザー/拡張機能 | GPC のサポート | 有効化方法 |
|---|---|---|
| Firefox | 組み込み(v120 以降) | 設定 > プライバシーとセキュリティ > 「ウェブサイトに自分のデータの販売または共有をしないよう伝える」 |
| Brave | 組み込み(デフォルトでオン) | デフォルトで有効。設定 > シールドで無効化 |
| DuckDuckGo Browser | 組み込み(デフォルトでオン) | モバイルとデスクトップでデフォルトで有効 |
| DuckDuckGo Extension | 拡張機能 | 拡張機能をインストール。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の位置付け | 発効日 | 要件 |
|---|---|---|---|---|
| California | CCPA/CPRA | 法的拘束力のあるオプトアウト | Jan 1, 2023 | GPCを販売および共有の有効なオプトアウトとして扱う必要があります(Cal. Civ. Code §1798.135(e); 11 CCR §7025(b)) |
| Colorado | CPA | 法的拘束力のあるオプトアウト | Jul 1, 2024 | GPCを含む「ユニバーサルオプトアウトメカニズム」を尊重する必要があります(C.R.S. §6-1-1313(1)(a); 4 CCR 904-3 Rule 5.11) |
| Connecticut | CTDPA | 法的拘束力のあるオプトアウト | Jul 1, 2023 (UOM: Jan 1, 2025) | 「オプトアウト設定シグナル」を尊重する必要があります(P.A. 22-15, §6(a)(6)) |
| Montana | MCDPA | 法的拘束力のあるオプトアウト | Oct 1, 2024 | ユニバーサルオプトアウトメカニズムを尊重する必要があります |
| Texas | TDPSA | 法的拘束力のあるオプトアウト | Jul 1, 2024 (UOM: Jan 1, 2025) | ユニバーサルオプトアウトメカニズムを尊重する必要があります |
| Oregon | OCPA | 法的拘束力のあるオプトアウト | Jul 1, 2024 (UOM: Jan 1, 2026) | ユニバーサルオプトアウトメカニズムを尊重する必要があります |
| Delaware | DPDPA | 法的拘束力のあるオプトアウト | Jan 1, 2025 (UOM: Jan 1, 2026) | ユニバーサルオプトアウトメカニズムを尊重する必要があります |
| New Hampshire | NHPA | 法的拘束力のあるオプトアウト | Jan 1, 2025 | ユニバーサルオプトアウトメカニズムを尊重する必要があります |
| New Jersey | NJDPA | 法的拘束力のあるオプトアウト | Jan 15, 2025 (UOM: Jul 15, 2025) | ユニバーサルオプトアウトメカニズムを尊重する必要があります |
| Virginia | VCDPA | 任意(UOMの義務なし) | Jan 1, 2023 | UOMの明示的な要件はありませんが、ターゲティング広告のオプトアウトが必要です |
| Utah | UCPA | 任意(UOMの義務なし) | Dec 31, 2023 | 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の対象地域 | California, Colorado, Connecticut, Montana, Texas, Oregon, Delaware, New Hampshire, New Jersey |
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 が反映される | 「販売しないでください」ページに、GPC が検出したオプトアウトの状態が表示される | UI の確認 |
| 変更されたバナーが表示される | バナーが GPC の設定を認識する | 視覚的な確認 |
CCPA/CPRA 固有の要件
カリフォルニア州司法長官の規則(11 CCR §7025)に基づきます。
- サービスを低下させないこと:事業者は、GPC を金銭的インセンティブへのオプトインに対する同意として解釈してはなりません
- 競合の解決:ユーザーが以前に販売または共有にオプトインしていた場合、その後の訪問時に受信した GPC は、そのオプトインの撤回として扱う必要があります
- 再確認を求めないこと:GPC を利用するユーザーに、オプトアウトの選択を再考するよう求めてはなりません
- 記録の保管:GPC によるオプトアウトの記録を 24 か月間保持します
- プライバシーポリシーでの開示:事業者が GPC を尊重することをプライバシーポリシーに記載します
Pinnacle E-Commerce Ltd のプライバシーポリシー文言:
「お使いのブラウザーから送信される Global Privacy Control(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 万ドルで和解
- GPC に関する EDPB 声明(2023 年) — 第 21 条の異議を申し立てる権利の表明としての GPC に関する欧州の見解
- W3C Privacy Community Group — GPC 仕様の策定
- IAB CCPA Compliance Framework — US Privacy String と GPC の相互運用性