Sec-GPC ヘッダーはもうどこにでもある: アナリティクスのためのサーバーサイド検出
Global Privacy Control は Sec-GPC リクエストヘッダーとしてすべてのリクエストに付いてきます。エッジでこれを読み取り、Cookie を使わない計測パイプラインで尊重する方法を解説します。
Global Privacy Control(GPC)は法的なシグナルとして語られることが多いですが、エンジニアにとってはまず何よりも HTTP ヘッダーです。GPC を有効にしたブラウザーや拡張機能からのリクエストはすべて Sec-GPC: 1 を伴い、同じ設定はクライアント JavaScript にも navigator.globalPrivacyControl として公開されます。エッジでアナリティクスを動かしているなら、ヘッダーのほうがクリーンな統合ポイントです。計測ロジックが何ひとつ走る前に対応でき、トラッキングコードを 1 バイトも配信する必要がありません。
このシグナルの実際の姿
GPC 仕様はリクエストヘッダーフィールド Sec-GPC を定義しており、意味を持つ値は 1 のみです。これは、ユーザーが自分の個人データの販売や共有に同意しないことを示します。ヘッダーが存在しないことは、何の意思表示もされていないという意味であり、肯定的な 0 とは明確に異なります。仕様はさらに、サイトがそのシグナルを尊重すると宣言するために公開する well-known リソース /.well-known/gpc.json も定義しています。
Sec-GPC は Sec- プレフィックスを使うため、禁止ヘッダー名にあたります。fetch() や XMLHttpRequest から設定・上書きできないため、独自ヘッダーよりもページスクリプトから偽装しにくいのです。ナビゲーションとサブリソースのリクエストの双方で送信されるので、エッジワーカーは最初のヒットからこれを目にします。
Cloudflare のエッジで読み取る
Cloudflare Worker では、このチェックは 1 行で済み、何かを記録するかどうかを判断する前に実行されます。
export default {
async fetch(request) {
const gpc = request.headers.get('Sec-GPC') === '1';
// gpc === true -> ユーザーは販売・共有をオプトアウトした
// それに応じてプライバシー上安全な集計シグナルのみを記録する
return handle(request, { gpc });
}
};
Monoid にとって、これはプロダクトのすでにある動作にそのまま対応します。Monoid は Cookie も localStorage も保存せず、フィンガープリントも導出しないため、そもそも抑制すべきクロスサイトのプロファイルが存在しません。GPC は個人データの販売および共有に対する法的なオプトアウトであり、プライバシーファーストで Cookie を使わない設計が決して行わない振る舞いです。したがって Sec-GPC の検出は、ブラウザーから出ていくデータを切り替えるスイッチではなく、多層防御の一手であり、設定が確かに尊重されたという監査可能な記録になります。
法的に重要な理由(手短に)
GPC の執行力は理論上のものではありません。2022 年のカリフォルニア州司法長官と Sephora の和解は、CCPA が企業に GPC を有効な販売オプトアウトとして扱うことを求めていることを明確にしました。また California Privacy Rights Act の規則はオプトアウト設定シグナルの尊重を義務づけています。コロラド州をはじめ他の米国州法も、同様の普遍的オプトアウト機構の要件を採用しています。サーバーサイドでヘッダーを読むことで、コンプライアンスが成立する決定的でログに残るポイントが得られます。タグマネージャーがルールを発火することに頼るより、はるかに堅牢です。
well-known リソースを公開する
GPC を尊重するなら、そう宣言しましょう。小さなドキュメントで /.well-known/gpc.json を配信します。
{ "gpc": true, "lastUpdate": "2026-07-19" }
これは静的ファイルで、エッジのルートから Content-Type: application/json で返せます。設定が尊重されていることをブラウザー、拡張機能、監査者に示すもので、維持コストはかかりません。
アナリティクスパイプラインへの実践的な指針
- 計測の後ではなく前にヘッダーを確認する。 エッジで対応すれば、下流の処理が始まる前に判断が下されます。
- 不在を同意と扱わない。
Sec-GPCヘッダーがないことは単に意思表示がないという意味であり、既存の法的根拠と組み合わせて考えてください。 - 監査ログは最小限に保つ。 リクエストに
Sec-GPC: 1が付いていたことを——識別子に結びつけずに——記録すれば、プロファイルを作らずに誠実さを示せます。 - ゲーティングには JS API よりヘッダーを選ぶ。
navigator.globalPrivacyControlプロパティはクライアント UI に有用ですが、ヘッダーならコードが走る前に判断できます。
より大きな教訓は、プライバシーシグナルがますますアプリケーション固有の癖ではなくトランスポート層の事実になっているということです。Sec-GPC は DNT(非推奨)、Permissions-Policy ヘッダー、Referrer-Policy と並び、アナリティクスシステムが無視せず読み取るべきものです。Cookie を使わないプロダクトで変更が小さくて済むのは、アーキテクチャがすでにデータを最小化しているからこそです——そしてそれが、はじめからこう作る理由そのものです。
Comments
Loading comments…