Compliance & Regulationシリーズの一部
完全ガイドを読むCookie 同意実装ガイド: 法的に準拠した同意管理
2020 年以降、特に Cookie の同意違反に対して 4 億ユーロを超える GDPR 罰金が課されています。 フランス CNIL は、Cookie を拒否するよりも受け入れやすくしたとして、Google に 1 億 5,000 万ユーロ、Facebook に 6,000 万ユーロの罰金を科しました。 Cookie への同意は、もはやチェックボックスを使用するものではありません。これは、特定の技術要件を伴うプライバシー法の厳重に施行される領域です。
このガイドでは、法的要件、技術的な実装、Web サイトと Web アプリケーションの Cookie 同意の継続的な管理について説明します。
重要なポイント
- GDPR と eプライバシーに基づき、必須ではない Cookie を設定する前に同意を取得する必要があります -- 後ではありません
- 同意は与えるのと同じくらい簡単に撤回できる必要があります(ワンクリックで拒否、設定に埋め込まれない)
- Cookie ウォール (「受け入れるか離れるか」) は、ほとんどの EU 加盟国で違法です
- 2024 年 3 月以降、EEA 内の Google アナリティクスと広告には Google 同意モード v2 が必要です
地域別の法的要件
Cookie の同意要件の比較
| 要件 | EU (GDPR + eプライバシー) | 英国 (PECR + 英国 GDPR) | 米国 (CCPA/州法) | ブラジル (LGPD) | カナダ (PIPEDA) |
|---|---|---|---|---|---|
| 必須ではない Cookie に対する事前同意 | はい (オプトイン) | はい (オプトイン) | いいえ (オプトアウト モデル) | はい (オプトイン) | 黙示の同意が許可される |
| 同意バナーが必要です | はい | はい | 必須ではありません (ただし推奨されます) | はい | おすすめ |
| 詳細な選択肢 (カテゴリ別) | はい | はい | 不要 | はい | おすすめ |
| 受け入れ/拒否の同等の顕著性 | はい | はい | 該当なし | はい | 該当なし |
| クッキーウォールは許可されます | いいえ (ほとんどの州) | いいえ | 該当なし | いいえ | 該当なし |
| 同意記録が必要です | はい | はい | いいえ | はい | はい |
| 同意更新期間 | 最長 12 か月 | 最長 12 か月 | 該当なし | 指定されていません | 指定されていません |
| Cookie ポリシーが必要です | はい (詳細) | はい (詳細) | はい (追跡する場合) | はい | はい |
Cookie としてカウントされるもの
eプライバシー指令は、HTTP Cookie だけでなく、ユーザーのデバイスに情報を保存またはアクセスするすべてのテクノロジーを対象としています。
- HTTP Cookie (ファーストパーティおよびサードパーティ)
- LocalStorage と SessionStorage
- インデックス付きDB
- デバイスのフィンガープリンティング
- 追跡ピクセル/ウェブビーコン
- 追跡に使用される ETag
クッキーの分類
標準カテゴリ
| カテゴリー | 同意が必要ですか? | 例 | デフォルト状態 |
|---|---|---|---|
| 必ず必要 | いいえ | セッション Cookie、CSRF トークン、ロード バランサー Cookie、認証 | 常にオン |
| 機能/設定 | はい | 言語設定、テーマ設定、保存されたカート | オフ (同意するまで) |
| 分析 / パフォーマンス | はい | Google Analytics、Hotjar、Plausible (Cookie を使用) | オフ (同意するまで) |
| マーケティング/広告 | はい | Google 広告、Facebook Pixel、リターゲティング Cookie | オフ (同意するまで) |
Cookie を監査する
同意を実装する前に、Web サイトが設定するすべての Cookie を監査します。
// Browser console: list all cookies
document.cookie.split(';').forEach(c => console.log(c.trim()));
// Or use a scanning tool
// cookiebot.com/en/cookie-checker
// 2gdpr.com
各 Cookie を文書化します。
| クッキー名 | カテゴリー | 目的 | 期間 | ファースト/サードパーティ |
|---|---|---|---|---|
| コード0 | 必ず必要 | 認証 | セッション | ファーストパーティ |
| コード0 | 必ず必要 | トークンのリフレッシュ | 7日間 | ファーストパーティ |
| コード0 | 必ず必要 | 言語の好み | 1年 | ファーストパーティ |
| コード0 | 分析 | Google アナリティクスの訪問者 ID | 2年 | サードパーティ (Google) |
| コード0 | マーケティング | Facebook ピクセル追跡 | 90日 | サードパーティ (Facebook) |
技術的な実装
オプション 1: 同意管理プラットフォーム (CMP)
| CMP | 無料利用枠 | GDPR 準拠 | Google CMP パートナー | IAB TCF 2.2 |
|---|---|---|---|---|
| クッキーボット | 1ページまで | はい | はい | はい |
| ワントラスト | いいえ | はい | はい | はい |
| 小佐野 | 最大 5,000 人の訪問者 | はい | はい | いいえ |
| 定期 | ベーシックプラン | はい | はい | いいえ |
| クッキースクリプト | 最大 1 サイト | はい | はい | いいえ |
オプション 2: カスタム実装
完全なコントロールが必要なチームの場合:
// lib/cookie-consent.ts
type ConsentCategory = 'necessary' | 'functional' | 'analytics' | 'marketing';
interface ConsentPreferences {
necessary: true; // Always true, cannot be changed
functional: boolean;
analytics: boolean;
marketing: boolean;
timestamp: string;
version: string;
}
const CONSENT_COOKIE = 'ecosire_consent';
const CONSENT_VERSION = '2.0';
const CONSENT_DURATION = 365; // days
export function getConsent(): ConsentPreferences | null {
const cookie = document.cookie
.split(';')
.find(c => c.trim().startsWith(`${CONSENT_COOKIE}=`));
if (!cookie) return null;
try {
const prefs = JSON.parse(decodeURIComponent(cookie.split('=')[1]));
// Invalidate if consent version changed
if (prefs.version !== CONSENT_VERSION) return null;
return prefs;
} catch {
return null;
}
}
export function setConsent(preferences: Omit<ConsentPreferences, 'necessary' | 'timestamp' | 'version'>) {
const consent: ConsentPreferences = {
necessary: true,
...preferences,
timestamp: new Date().toISOString(),
version: CONSENT_VERSION,
};
const expires = new Date(Date.now() + CONSENT_DURATION * 86400000).toUTCString();
document.cookie = `${CONSENT_COOKIE}=${encodeURIComponent(JSON.stringify(consent))}; expires=${expires}; path=/; SameSite=Lax`;
// Apply consent decisions
applyConsent(consent);
return consent;
}
function applyConsent(consent: ConsentPreferences) {
if (consent.analytics) {
// Initialize Google Analytics
loadScript('https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX');
}
if (consent.marketing) {
// Initialize marketing pixels
loadScript('https://connect.facebook.net/en_US/fbevents.js');
}
if (!consent.analytics) {
// Remove analytics cookies
deleteCookie('_ga');
deleteCookie('_gid');
}
if (!consent.marketing) {
// Remove marketing cookies
deleteCookie('_fbp');
deleteCookie('_fbc');
}
}
Google 同意モード v2
2024 年 3 月以降、EEA 内の Google アナリティクスと Google 広告に必須:
<!-- Set default consent state BEFORE loading Google tags -->
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
// Default: deny all until user consents
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', // Always granted (necessary)
'wait_for_update': 500 // Wait for CMP
});
</script>
<!-- Load Google Tag Manager -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
ユーザーが同意した場合:
// Update consent state when user interacts with banner
function updateGoogleConsent(preferences) {
gtag('consent', 'update', {
'ad_storage': preferences.marketing ? 'granted' : 'denied',
'ad_user_data': preferences.marketing ? 'granted' : 'denied',
'ad_personalization': preferences.marketing ? 'granted' : 'denied',
'analytics_storage': preferences.analytics ? 'granted' : 'denied',
'functionality_storage': preferences.functional ? 'granted' : 'denied',
'personalization_storage': preferences.functional ? 'granted' : 'denied',
});
}
同意バナーのデザイン要件
EU の法的要件
- バナーは必須でない Cookie が設定される前に表示されます
- 「すべて受け入れる」ボタンと「すべて拒否する」ボタンは視覚的に同じように目立つようになります。
- 詳細なカテゴリ選択が可能 (全か無かだけではありません)
- 必須ではないカテゴリの事前チェックボックスはありません
- 各カテゴリの明確で平易な説明
- 完全な Cookie ポリシーへのリンク
- いつでも同意の撤回にアクセス可能 (フッターリンクなど)
- Cookie ウォールなし (同意せずにサイトを使用できる必要があります)
- タイムスタンプとバージョンとともに記録された同意
アクセシビリティ要件
- バナーはキーボードで操作可能です
- スクリーン リーダーとの互換性 (ARIA ラベル)
- 十分な色のコントラスト
- 重要なコンテンツを永久にブロックしません
Cookie を使用しない分析の代替手段
Cookie 同意バナーを完全に回避したい Web サイトの場合:
| ツール | クッキー | GDPR の同意が必要 | データの場所 | 価格 |
|---|---|---|---|---|
| もっともらしい | なし | いいえ | EU | $9/月 |
| ファゾム | なし | いいえ | EU/米国/カナダ | $14/月 |
| うま味 | なし | いいえ | 自己ホスト型 | 無料 |
| シンプルな分析 | なし | いいえ | EU | $9/月 |
| Piwik (Cookie なしの構成) | オプション | いいえ (Cookie なし) | 自己ホスト型 | 無料 |
Cookie を使用しない分析を使用すると、分析の同意が不要になり、マーケティング Cookie (使用されている場合) のみをカバーする同意バナーが簡素化されます。
よくある質問
必要な Cookie のみを使用する場合、Cookie バナーは必要ですか?
いいえ。厳密に必要な Cookie (認証、CSRF、負荷分散) のみを使用する場合、同意は必要なく、バナーも必要ありません。ただし、これらの Cookie をプライバシー ポリシーで開示する必要があります。分析 (Google Analytics) またはサードパーティの追跡を追加すると、EU では同意バナーが法的に義務付けられます。
「ソフト オプトイン」(閲覧を継続 = 同意)を使用することは合法ですか?
いいえ、GDPR に基づくものではありません。欧州データ保護委員会は、継続的な閲覧、スクロール、または同様の受動的なアクションは有効な同意とはみなされないと明確に述べています。同意は、「同意する」または同様のボタンをクリックする、明確な積極的な行動である必要があります。ソフト オプトインは、Planet49 で非準拠と判断されました (CJEU、2019)。
シングルページ アプリケーションの同意はどのように処理すればよいですか?
SPA の場合は、最初のページ読み込み時とルート変更ごとに同意状態を確認します。同意が得られていない場合は、追跡スクリプトを初期化しないでください。同意の設定をファーストパーティ Cookie に保存します (これ自体、同意を記憶するために必ず必要です)。ユーザーが同意すると、ページのリロードを必要とせずに追跡スクリプトを初期化します。
Odoo Web サイトには Cookie の同意が必要ですか?
Odoo Web サイトが EU 訪問者にサービスを提供し、分析、マーケティング ピクセル、または機能的 Cookie を必要以上に使用している場合は、「はい」です。 Odoo には基本的な Cookie に関する通知がありますが、GDPR 基準を満たしていません。 Cookiebot などの適切な CMP を実装するか、カスタム ソリューションを構築します。 ECOSIRE は、GDPR 準拠の Cookie 同意を含む Odoo Web サイト サービス を提供します。
次に何が起こるか
Cookie の同意は、Web プライバシー コンプライアンスの最も目に見える側面です。アプリケーション アーキテクチャには プライバシー バイ デザイン、完全なデータ プログラムには データ ガバナンス、より広範なコンプライアンスには サイバーセキュリティ規制 を組み合わせます。
Cookie 同意の実装およびプライバシー コンプライアンスのコンサルティングについては、ECOSIRE にお問い合わせください。
ECOSIRE が発行 -- 企業がユーザーに信頼されるプライバシー コンプライアンスの実装を支援します。
執筆者
ECOSIRE Research and Development Team
ECOSIREでエンタープライズグレードのデジタル製品を開発。Odoo統合、eコマース自動化、AI搭載ビジネスソリューションに関するインサイトを共有しています。
関連記事
監査準備チェックリスト: ERP によって監査が 60% 高速化される方法
ERP システムを使用して監査準備チェックリストを完了します。適切な文書化、管理、自動化された証拠収集により、監査時間を 60% 削減します。
国境を越えたデータ転送規制: 国際的なデータ フローをナビゲートする
SCC、十分性決定、BCR を使用して国境を越えたデータ転送規制をナビゲートし、GDPR、英国、および APAC 準拠のための転送影響評価を行います。
地域別のサイバーセキュリティ規制要件: グローバル ビジネス向けのコンプライアンス マップ
米国、EU、英国、APAC、中東にわたるサイバーセキュリティ規制をナビゲートします。 NIS2、DORA、SEC ルール、重要なインフラストラクチャ要件、コンプライアンスのタイムラインをカバーします。
Compliance & Regulationのその他の記事
監査準備チェックリスト: ERP によって監査が 60% 高速化される方法
ERP システムを使用して監査準備チェックリストを完了します。適切な文書化、管理、自動化された証拠収集により、監査時間を 60% 削減します。
国境を越えたデータ転送規制: 国際的なデータ フローをナビゲートする
SCC、十分性決定、BCR を使用して国境を越えたデータ転送規制をナビゲートし、GDPR、英国、および APAC 準拠のための転送影響評価を行います。
地域別のサイバーセキュリティ規制要件: グローバル ビジネス向けのコンプライアンス マップ
米国、EU、英国、APAC、中東にわたるサイバーセキュリティ規制をナビゲートします。 NIS2、DORA、SEC ルール、重要なインフラストラクチャ要件、コンプライアンスのタイムラインをカバーします。
データ ガバナンスとコンプライアンス: テクノロジー企業のための完全ガイド
コンプライアンス フレームワーク、データ分類、保持ポリシー、プライバシー規制、テクノロジー企業向けの実装ロードマップを網羅した完全なデータ ガバナンス ガイド。
データ保持ポリシーと自動化: 必要なものを保持し、必要なものを削除
法的要件、保持スケジュール、自動適用、GDPR、SOX、HIPAA のコンプライアンス検証を備えたデータ保持ポリシーを構築します。
従業員データのプライバシー管理: 人事ニーズとプライバシー権のバランスをとる
GDPR 要件、人事データ処理根拠、監視ポリシー、国境を越えた転送、保持のベスト プラクティスを使用して従業員データのプライバシーを管理します。