カテゴリー
Develop

WordPressでのCookie同意制御 #1

世界的に個人情報保護の観点からCookieの制御要件が高まりグローバル企業ではGDPR、CCPAなどの対応が訴訟リスク回避の観点からも必要になっている。

日本も海外ほどでは無いけれども2022年施行の改正個人情報保護法により、「個人を識別可能な情報の第三者提供」に対する一定の同意が必要になっている。

日本の規制強度も高まる可能性があるため、そのへんも見越してWordpressで構築されたサイトでの対応方法を検証してみる。

📗 経緯

2025年時点で日本国内限定では「Cookieを利用している旨の通知とCookie解除方法の提示」が必要で、「Cookieオプトイン・オプトアウト機能の提供」は推奨のレベル(詳細は参考サイトで要確認)

📝 参考サイト(個人情報保護法)

個人情報保護法に必要な対応は

  • Cookieそのものは「個人情報」に該当しない
  • Cookieの値が広告IDや識別情報と紐づくと「個人関連情報」となる
  • Cookie情報が第三者(例:Google, Facebook)に渡る場合、提供先とその目的を明示する必要がある
  • 欧州(GDPR)のように事前同意(オプトイン)義務はない
  • ユーザーがオプトアウトできる手段を設けることが望ましいが、義務ではない

といったところで、利用ケース別では以下のような感じ

  • アクセス解析(GA4など)だけ使用 >通知で十分
  • 広告配信(AdSense, Google Ads, Meta Ads) >対応推奨
  • 公的機関、教育、医療系サイト >透明性の観点で対応推奨
  • 機微な個人情報やリマーケティング利用 >できる限り対応すべき

ただそう遠くない将来にGDPRと同等のオプトアウト機能の提供まで求められる可能性があるためGDPRレベルの対応について検証してみる。

📝 余談(対象ビジターと適用法令の関係)

ちょっとグレーな部分として「EU居住者を対象にしたサービス(GDPR第3条) であれば、たとえ物理的に日本からアクセスしていても、GDPRの適用対象になり得る」という点がある。

参考:GDPR compliance checklist – GDPR.eu

これは「日本に旅行中のEU居住者がアクセスした場合、日本の法令対応だけで“完全に問題ない”とは言い切れない」ということで、これを考慮すると一番制約の強いGDPRを適用しておくのが安全という考え方になる。

プラグインの中にはGeoIP機能を用いて適用法令を出し分けする機能を持っているものもあるが、この機能では上記制約への対応は不完全になる。

阪急阪神百貨店公式通販サイト | HANKYU HANSHIN E-STORESさんのサイトはこの辺を加味して設計されているような気がする。

📗 主要な外部連携サービスへの対応

今回の検証の構成として一般的なコーポサイトで利用頻度の高い以下サービスを対象とする。それぞれのGDPR対応を整理してみると・・・

🌐 SiteKit (WordPressプラグイン)

  • 同意不要(Cookie利用なし)
  • Site Kit 自体はCookieを利用しないが、GTMなど連携設定した場合はGTMから出力するタグがCookie制御対象になる場合あり
  • 今回はGTMのSnippetを出力(GA4はGTM経由で設定)
  • Admin SettingのConsent modeは有効に設定 (ConcentMode連携する場合は別途WP Consent APIプラグインのインストール必要)

🌐 Google Tag Manager

  • 要同意の場合あり
  • 単体ではCookie利用しないがGTM経由でGAや広告を配信する場合はそれらの対応が必要(※今回はGA4設定だけに利用を想定)
  • Googleタグの同意設定はなしを設定
  • SiteKitでSnippetを挿入

🌐 Google Analytics(GA4)

  • 要同意(Cookie利用あり)
  • GAはCookieを利用しIPや閲覧履歴を追跡する
  • GTMでSnippetを設定

🌐 Google Search Console

  • 同意不要(Cookie利用なし)
  • Cookieは関与しない。サーバー側のデータのみ。
  • Console側の設計結果を踏まえSitekitに紐づけられる

🌐 Google reCAPTCHA

  • 要同意(Cookie+IP+マウス動作解析)
  • バージョン2/3ともにGoogle側がトラッキング要素を含む
  • WP側のセキュリティ系、フォーム系プラグインで設定
  • 同意NGの場合にフォーム送信をどう対応するか悩ましいがGoogle的には基本的に拒否させない方針っぽい (今回ここは深追いしない・・・😓)

🌐 Google カスタム検索(CSE)

  • 要同意(Cookie使用+検索履歴送信)
  • 結果表示時にCookie+Googleスクリプトが動作。特に検索結果に広告が出る構成では注意

📗 Consent Mode(同意モード)

検証対応を整理する前にGoogleがGDPR対応として提案している規格「Consent Mode(同意モード)」についておさらい。

  • ユーザーのCookie同意の有無に応じてGoogleタグの動作を制御する仕組み
  • 同意がないユーザーでも匿名で効果測定が可能(データの断絶を避けられる)
  • 広告や分析の「コンバージョン最適化」を維持
  • v2 は 2024年3月から EUの「デジタルマーケット法(DMA)」に対応するためにアップデートされた

🧠 Consent Modeの基本制御

デフォルト状態の定義

サイト訪問時点で、すべてのストレージを拒否状態に初期化する

gtag('consent', 'default', {
  ad_storage: 'denied',
  analytics_storage: 'denied',
  personalization_storage: 'denied',
  functionality_storage: 'denied',
  security_storage: 'granted'
});

ユーザー同意取得後の更新

ユーザーが「同意」したタイミングで、許可されたカテゴリだけ granted に変更する

gtag('consent', 'update', {
  ad_storage: 'granted',
  analytics_storage: 'granted'
});

🎯 ストレージカテゴリの定義

personalization_storagefunctionality_storagesecurity_storageの3カテゴリはv2で追加

ad_storage広告の表示・測定
analytics_storageアクセス解析(GAなど)
personalization_storageコンテンツのパーソナライズ
functionality_storageサイトの機能維持(ログイン情報等)
security_storage不正検知(例:reCAPTCHA
※常に granted を推奨

🚦 タグの制御パターン

denied通信は送信するが、個人識別情報を含まない匿名リクエストのみ送信
grantedトラッキングが有効
同意なしdefault設定に従う(=denied

🛠 対応が必要なGoogleタグ

Google Analytics 4(GA4)✅ 完全対応
Google Ads✅ 完全対応
AdSense✅ 対応中(匿名広告含む)
Google Tag Manager✅ フル対応(Consent設定可)
reCAPTCHAsecurity_storage で制御
YouTube Embed等遅延読込とConsent連携必要

📗 GDPRの対応観点

大きく制御開始タイミングと制御方法の2つ。それぞれ対応パターンをまとめると以下の感じ

📌 A. 制御の開始タイミング(同意処理前後)

A1. 同意前は送信しない

  • ユーザーが同意を与えるまで個人情報を含む通信は一切しない。GDPRで最も推奨される構成。
  • GTMでタグ自体を発火させない設定やスクリプトを除外する方式

A2. 同意後から送信制限

  • 同意取得後からは制限するが同意前に一部通信が発生
  • SiteKitなどでスクリプトが先にロードされるとこの状態になるリスクがある。

規制対応として望ましいのはA1。A2は原則NGまたは改善が必要。

📌 B. 制御の方法(技術的アプローチ)

B1. タグを埋め込まない

  • スクリプト自体を出力しない
  • 「マーケティング未同意ならタグ非出力」など。
  • 厳格で確実な制御方式

B2. タグは埋め込むが通信させない

  • スクリプトはあるが、通信が起きない or 停止する
  • 可能だが限定的。
  • たとえば gtag(“config”, {…}) のタイミングを制御することで実現できるケースあり(タグ自体は読み込むが発火させない)

B3. タグは通信するが匿名にする(Consent Mode)

  • スクリプトは存在、通信もするが、個人識別子を含まない(もしくは匿名モードとして送信する)
  • Google Consent Mode v2 の典型例。
  • 匿名データ送信 → 同意取得後に個人情報含めて再送信も可能

Google推奨のConsent Mode v2の推奨構成は「A1+B3」=匿名送信からの段階的許可

📗 制御の確認方法

制御方法により確認方法は変わる部分あるが、主にスクリプトの出力状況、ネットワーク通信、パラメータ、Cookieの状態など、複数の観点がある。

🧭 1. GAタグが出力されているか

  • gtag.js や gtm.js が読み込まれているか
    • タグがページに存在するか
    • DevTools > Network > 検索 gtag, gtm.js
  • gtag("consent", "default", ...) が出力されているか
    • Consent Modeが初期化されているか
    • DevTools > Console or 検索で script 確認

🧭 2. GAタグが発火しているか(collectリクエスト)

個人情報を送信するcollectリクエストの有無を確認

  • collect?... リクエストがあるか
    • GAタグが発火してデータ送信しているか
    • Network タブ > フィルタで collect 検索
  • collectが「存在しない」
    • GAタグが未出力 or Consent未取得で非発火(GTM制御)
  • collectが「存在するが匿名」
    • Consent Modeにより匿名送信(pscdl=denied 等)

🧭 3. Consent Mode パラメータが付与されているか

collectリクエストの以下パラメータで確認できる

pscdl=denied または noapiConsent未同意時の匿名モード
denied = Consent Mode によるAPIが使われていないか制御外 / denied = Consent Mode の“拒否”状態
_eu=…同意ステータスの識別子
パラメータあり = 同意済み / パラメータなし = 同意無し
seg=0 or 10 = セグメント無効 / 1 = 有効
gcs=G1…Consentパラメータがある通信
gcd=…Google Consent Data(GTM経由で設定した場合に付与)

🧭 4. Cookie の発行状況

自サイト以外でCookie保存されているケースがあるので、匿名送信モード動作を確認するのが現実的かなー(検証前にDevツールでCookieリセットするという手はあるかも)

  • __gads, __gpi, _ga など
    • 同意前 >存在しないのが理想
    • 同意後 >許可されたカテゴリのCookieが発行される
  • Cookieが存在するが pscdl=denied
    • Consent Modeが匿名送信モードとして正常動作している状態

🧭 5. スクリプトやタグの挙動(上級)

  • gtag("consent", "default", {...}) の前に gtag("config", ...) が実行されている
    • Consent Modeが機能していない可能性(初期化順序エラー)
  • GTMタグに「Consentタイプ」の設定があり、denied でタグが発火していない
    • GTMのConsent設定による制御が正しく効いている
  • collect が Consent取得後に発火
    • Consent Modeによる「遅延 → 復元」動作が機能している証拠

🧾 確認パターン

色々書いたがシンプルにまとめるとこんな感じ・・・? (パラメータ間に従属関係があるのか分からない・・😓)

collect が発生しないタグ未出力(B1)または GTM Consentによるブロック
collect あり、pscdl=deniedConsent Mode(B3)が匿名で動作中
collect あり、_euあり、 seg=1Consent Mode で明示的に同意取得済み(フルトラッキング)

実践的な確認手順としては以下のような感じになりそう

  1. 「 collect リクエストが発生しているか」確認
  2. リクエストあり >リクエストに含まれているパラメータ値 (pscdl_euseg )を確認
  3. リクエストなし >GTMがタグを止めている(= Consent設定で発火ブロック)
📝 AdSenseの匿名モードについて

今回はAdSenseは対象外だが、AdSenseの匿名モードに関係するリクエストパラメータは以下のような感じ。ざっくりなので各人で詳細確認してください。

drt=0広告のパーソナライズが無効化されている状態(=匿名広告)
nfp=1ファーストパーティCookie未使用であることを示す(No First Party Cookies の略)
output=afd_adsAFD = AdSense for Domains ではなく、「匿名対応のAd Format Delivery」 形式(※cookieレス広告を指す場合がある)
drt=0 かつ nfp=1Googleはこの状態を「Consent未同意時の広告配信(=匿名モード)」として扱っているケースが多い

ちなみにCollectリクエストでnfpに該当するのはnpaっぽい

npa=1ユーザーが広告の個別化を拒否している状態、つまりパーソナライズ広告が無効化されている。

📗 リサーチプラグイン

GDPR対応のWordpressプラグインの有名どころは以下

各プラグインにプラン仕様が異なるので詳細は各人確認してもらうとして、今回の検証は「無料プラン利用、多言語展開無し」の条件で調査。

📝 参考サイト(プラグイン比較)

📗 検証結果

🍪 Complianz – GDPR/CCPA Cookie Consent

参考サイト:WordPressのGDPR対応|Complianzの設定手順と対象国のみ同意バナーを表示する方法 | ワードプレステーマTCD

導入は簡単。ただしフリープランだとConcent Modeに対応してない(Complianz Pricing FAQs – Complianz)。そのせいだか各設定状態でのCollectパラメータ値は期待する値になっていなかった😓 設定ミスの可能性はあるがプラン説明を読んでもどこまで制御しているのか読み解けず・・・🤮

🧾 確認結果 (Collectパラメータ)

設定前

Collect通信あり
pscdlnoapi
_euなし
seg0 (無効)

すべて許可

Collect通信あり
pscdlnoapi
_euあり AAAAAAQ
seg1 (有効)

すべて拒否

Collect通信あり
pscdlnoapi
_euあり AAAAAAQ
seg1 (有効)

🍪 CookieYes – Cookie Banner for Cookie Consent

参考サイト:同意管理プラットフォーム(CMP)のCookieYesを導入してみました(GTMの同意設定に対応) | and,a株式会社

フリープランのページ制限が100ページのため断念(Pricing & Plans – CookieYes)。初期設定は簡単。おそらく有料プランだと良い感じだと思う。

通信確認は実施せず

🍪 Cookie Notice & Compliance for GDPR / CCPA

参考サイト:【WordPress】Cookie同意ボタンを作成しよう(Googleアナリティクス、GTM対応) – Sight-R(サイタル)

対応法令パターンが非常に多くて良さそうだったのだけどフリープランだと対象50ページ制限だったので断念(Cookiebot Pricing and Plans – CMP Solution – Cookiebot™)。Cookie NoticeとCookie Complianceの2つの機能を組み合わせた構成になっているようで、Cookie Compliance側のプラン仕様がよく分からなかった。有料プランだとかなり色々設定できそう。

通信確認は実施せず

🍪 Beautiful Cookie Consent Banner

参考サイト:Cookieへ同意するBeautiful Cookie Consent Bannerプラグイン | WordPressを使ったホームページの作り方

設定バナーはシンプルでストレージカテゴリレベルの設定はできず全許可 or 全拒否のみ。

GTMのConcetMode連携設定は有料プランのみのようで拒否設定してもCollectパラメータ値は期待する値になっていなかった😓 GTMでdataLayerやイベントを自力で設定すれば動作するかもだけど情報を見つけられず・・・

Google Tag Manager dataLayer support. Full GTM support with premium add-on.

(Beautiful Cookie Banner – WordPress Plugin for easy compliance with GDPR and others)

🧾 確認結果 (Collectパラメータ)

設定前

Collect通信あり
pscdlnoapi
_euなし
seg0 (無効)

すべて許可

Collect通信あり
pscdlnoapi
_euあり AAAAAAQ
seg1 (有効)

すべて拒否

Collect通信あり
pscdlnoapi
_euあり AAAAAAQ
seg1 (有効)

WPConsent – Cookie Consent Banner for Privacy Compliance (GDPR / CCPA)

参考サイト:WPConsentのレビュー:あなたにぴったりのCookie Consentプラグインは?

最近リリース(1.0.2 は 2025‑02‑20)されたプラグイン。ネット上まだあまり情報が無かったが設定は簡単。ストレージレベル、サービスレベルで設定できる。またCookie Policyページも利用サービスをスキャンした結果に準じた内容で生成できる。

GTM同意モードにも対応しているが、GTMテンプレは無く自力でGTMのdataLayer、イベント設定が必要なため今回は検証してない(How to Trigger Google Tag Manager Tags Based on User Consent – WPConsent

設定バナーで拒否した際にpscdlsegなどが変化した唯一のプラグイン。ただカテゴリとパラメータの関係が読み解けず正しい状態なのかは確証は持てず・・・😓 (内訳は下記確認結果参照)

ちなみにSiteKitのConcentModeを無効にするとCollectリクエスト自体が発火しない挙動になった (これはこれで良いかも)

🧾 確認結果 (Collectパラメータ)

設定前

Collect通信あり
pscdlnoapi
_euなし
※カスタム検索実行時はAEE
seg0 (無効)

すべて許可

Collect通信あり
pscdlnoapi
_euあり AAAAAAQ
※カスタム検索実行時はAEEAAAQ
seg1 (有効)

すべて拒否

Collect通信あり
pscdldenied
_euなし
※カスタム検索実行時はAEE
seg0 (無効)

Marketingカテゴリのみ拒否

Collect通信あり
pscdldenied
_euあり AAAAAAQ
※カスタム検索実行時はAEEAAAQ
seg1 (有効)

Statisticsカテゴリのみ拒否

Collect通信あり
pscdlnoapi
_euなし
※カスタム検索実行時はAEE
seg0 (無効)

📗まとめ

以上の結果を踏まえWPConsent – Cookie Consent Banner for Privacy Compliance (GDPR / CCPA)を選択。このブログにも適用してしばらく様子をみてみる。どっかで時間ができたらGTM側のCocentMode設定をきちんとやってみる。

全般的に各種規制ルールが難解なのと、各サービスのパラメーター仕様、ConcentMode挙動の仕様は公開されていない場合もあるため把握ハードルが高い。

WPConsentはHome – Cookie Libraryというフリーライブラリを公開しているようだが、サービス側からの申請によるホワイトリスト管理をしないと実行的な運用は難しい印象。(ただ誰がホワイトリスト審査するのかの問題はある・・・この辺はスマホアプリと同様)

もしくは昨今目覚ましい進化を遂げているAIがユーザーレベルのAgentとしてOS、ブラウザ操作を監視・防御するような性悪説に基づいた構成とかぐらいしか根本を解決するのは難しいような予感・・・。

ダークパターンも含め、この状況は自由資本主義の限界なのかしら・・・😓 (参考 >UXにおけるダークパターンと行動ナッジ – darkpatterns.jp)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です