ClaudeでConsent Modeの実装を棚卸しする手順 — 4パラメータの照合
GTMのコンテナやgtagのソースをClaudeに渡し、Consent Modeの4パラメータとdefault/updateの順序をチェックリストで照合させる手順と、静的な点検の限界をまとめます。
Cookie同意バナーを置いても、Consent Modeが正しく動いているとは限りません。defaultが遅れていたり、updateが片方のパラメータにしか無かったりする実装は珍しくありません。この記事では、gtag.jsのソースやGTM(Google Tag Manager)のコンテナ定義をClaudeに渡し、Googleの要件をチェックリストにして照合させる手順を書きます。あわせて、Claudeだけでは確認できない範囲も示します。
Consent Modeの棚卸しでClaudeに任せられること
Consent Modeとは、ユーザーの同意状態に応じてGoogleタグの挙動(Cookieの書き込みや計測データの送信)を切り替える仕組みです。Claudeに向くのは、ソースや設定を読んで「要件の何が欠けているか」を洗い出す静的な点検です。
任せられる作業は次の3つです。
- ページのソースから
gtag('consent', 'default', ...)の有無と順序を読む - defaultとupdateで、指定しているパラメータが揃っているかを突き合わせる
- GTMのコンテナJSONから、同意関連のテンプレートとトリガーを拾う
逆に、ブラウザで実際にタグが発火したかどうかは、ソースを読んだだけでは分かりません。この点は後半の「静的な点検で分からないこと」で扱います。
照合に使うチェックリスト
Claudeに「Consent Modeを点検して」とだけ頼むと、観点が毎回ぶれます。先にGoogleのガイドから観点を固定し、それを渡すのが安定します。以下は同ガイドの記述をもとにした11項目です。
| 観点 | 確認すること | 出典ページ |
|---|---|---|
| 1. defaultの位置 | 確認することgtag('consent','default',...) が、config や event など計測を送るコマンドより前にある | 出典ページ設定ガイド |
| 2. 4パラメータ | 確認することad_storage / ad_user_data / ad_personalization / analytics_storage が揃っている | 出典ページ設定ガイド(v2) |
| 3. 全ページ | 確認することdefaultが全ページで呼ばれる | 出典ページ設定ガイド |
| 4. updateの網羅 | 確認することdefaultを置いた各パラメータにupdateの経路があり、grantedにもdeniedにも変えられる | 出典ページトラブルシュート |
| 5. 更新の即時性 | 確認することバナー操作の直後にupdateを呼ぶ | 出典ページ設定ガイド |
| 6. 選択の保持 | 確認することConsent Modeは選択を保存しないので、CookieやlocalStorageに保存し次ページでupdateする | 出典ページ設定ガイド |
| 7. 非同期CMP | 確認することバナーが遅れて読み込まれるなら wait_for_update を指定する | 出典ページ設定ガイド |
| 8. GTMの作り | 確認すること同意はテンプレートタグで扱い、Consent Initialization - All Pagesで発火させる | 出典ページトラブルシュート |
| 9. リージョン | 確認すること地域別defaultはISO 3166-2で指定し、各パラメータに漏れがない | 出典ページ設定ガイド |
| 10. 旧タグ | 確認することga.js・analytics.js・conversion.jsが残っていない | 出典ページ設定ガイド |
| 11. タグのブロック | 確認すること同意が出るまでGoogleタグの読み込み自体を止めていない | 出典ページトラブルシュート |
Consent Mode v2の必須パラメータは、従来の ad_storage と analytics_storage に、2023年11月の更新で加わった ad_user_data と ad_personalization を足した4つです。
手順1: 渡す素材を用意する
素材は3種類あります。どれも、渡す前に個人情報や社内IDが含まれないか確認してください。GTMのエクスポートにはコンテナIDやタグの設定値が入るため、共有してよい範囲かを先に確かめます。Claudeに渡してよい情報の一次資料の見方は、Claudeに個人情報を入力する前に見るべき一次資料で整理しています。
- ページのソース(head内のスクリプト全体。CMPのタグも含める)
- GTMのコンテナエクスポート(管理画面の「コンテナのエクスポート」で出るJSON)
- Tag AssistantのConsentタブのスクリーンショット(実測との突き合わせ用)
Claude Codeなら、画像はドラッグ&ドロップ、Ctrl+V での貼り付け、ファイルパスの指定のいずれかで渡せます。ソースとJSONはプロジェクトのディレクトリに置いて、パスで指定します。
手順2: チェックリストを指定してClaudeに照合させる
プロンプトは、指示・チェックリスト・素材をタグで分けると取り違えが減ります(書き方はXMLタグでの構造化を参照)。次のような形です。
<instructions>
下の <checklist> の各項目について、<source> と <gtm_export> を根拠に
「OK / NG / 判定不能」で答えてください。
NG と判定不能には、該当するコードの行か JSON のキーを引用してください。
default の値が正しいかは、こちらの方針次第なので判定しないでください。
</instructions>
<checklist>
1. gtag('consent','default') が config / event より前にある
2. ad_storage, ad_user_data, ad_personalization, analytics_storage の4つが default にある
3. default の各パラメータに update の経路があり、granted と denied の両方に変えられる
4. GTM では、同意をテンプレートタグで扱い、Consent Initialization で発火している
5. カスタム HTML タグで gtag('consent', ...) を呼んでいない
</checklist>
<source>
(head のスクリプトを貼る)
</source>
<gtm_export>
(コンテナ JSON を貼る、またはパスを指定)
</gtm_export>「判定不能」を選択肢に入れるのがコツです。ソースに現れない事柄を推測でOKと答えさせないためです。回答が返ったら、引用された行が本当にその内容か、自分の目で照合してください。
チェックリストの対象は4パラメータですが、GTMのテンプレートが扱う同意タイプは7種類あります。functionality_storage(言語設定など)、personalization_storage(動画のおすすめなど)、security_storage(認証や不正対策)が加わります。独自のキーで追加もできます。これらをdefaultに置く実装では、4パラメータと同じく更新経路の有無を項目に足します。
手順3: 典型的な不備を見分ける
次の例は、チェックリストに照らすと項目1と2に当たるコードです。
<script async src="https://www.googletagmanager.com/gtag/js?id=TAG_ID"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'TAG_ID');
gtag('consent', 'default', {
'ad_storage': 'denied',
'analytics_storage': 'denied'
});
</script>問題は2点です。defaultが config の後にあり、順序が違うとdefaultは効かない並びです。さらに ad_user_data と ad_personalization が無いので、v2の4パラメータが揃っていません。トラブルシュートのページにも、defaultを遅く設定した例として「広告タグがCookieを読み書きした後にdefaultがdeniedになる」流れが挙げられています。
gtagのコマンドを書く場所は、GTMでは3通りに分かれます。
同意コマンドを書く3つの場所
ページのソースに直書き
<script>の中でgtag('consent', 'default', ...)とupdateを呼ぶ形です。GTM向けの例も、GTMのスニペットより前にdefaultを置く直書きで示されています。カスタムHTMLタグ
gtag('consent', ...)を呼ぶ用途には使わない、とトラブルシュートが注意しています。コンテナJSONで見つかったら指摘の対象です。テンプレートタグ
setDefaultConsentStateとupdateConsentStateを使い、Consent Initialization - All Pagesで発火させます。自作テンプレートでもgtag('consent','update',...)は使いません。
テンプレートでupdateを updateConsentState に限るのは、gtagのコマンドが他の保留中のメッセージの後ろにキューされ、次のイベントの開始までに処理されない場合があるためです。defaultについても、トラブルシュートのgtag.jsの節が非同期に設定しないよう求めています。
自作テンプレートは、ガイドのサンプルと見比べると抜けが分かります。サンプルは各defaultに wait_for_update を500ミリ秒で入れ、Cookieに保存された選択を読み込み時に読んでupdateへ流します。権限の手順で書き込みを許可するのは ad_storage など4つで、他の同意タイプを使うなら同じ手順で足す、と書かれています。一方でサンプルのコードは7種類を書き込むので、コードと権限の一覧が揃っているかも照合の対象です。
手順4: 更新のタイミングと遷移まわりを確認する
updateの抜けは、ソースだけでは見えにくい不備です。Claudeに次の2点を追加で問うと拾えます。
- 「同意ボタン」と「同意撤回ボタン」のそれぞれで、4パラメータすべてにupdateを送っているか
- updateを呼んだ直後にページ遷移やリロードが起きる作りになっていないか
ガイドの「よくある問題」には、遷移ページで同意を更新しないと、Google Analyticsで同意済みセッションの多くに session_start が欠けることがある、と書かれています。updateをページのアンロード時に呼ぶと、ブラウザーが通信を中断して計測が欠ける可能性がある点も同じ節にあります。
また、非同期に読み込むCMPでは wait_for_update の指定も見ます。例は 'wait_for_update': 500(ミリ秒)で、CMPがupdateを呼ぶまで、指定したミリ秒を上限にタグの発火を待たせます。
手順5: リージョン別の設定を洗い出す
欧州向けだけ厳しくするような実装では、リージョンごとのdefaultが複数書かれます。地域はISO 3166-2で指定し、地域を指定しないdefaultは「他のどの地域指定にも当たらない訪問者」に効きます。US と US-CA のように包含関係がある場合は、より具体的な指定が優先されます。
Claudeに頼むのは、地域ごとのdefaultを一覧表にすることです。トラブルシュートには、地域指定が片方のパラメータにしか無い例があり、地域を切り替えて全パラメータの挙動が方針どおりかを確かめるよう求めています。表にすると、指定の抜けが行と列の空白として見えます。
オプション機能の url_passthrough と ads_data_redaction も、設定の有無と値を拾わせます。役割が逆向きなので、混同しない読み方を先に決めておきます。
URLパススルーと広告データの秘匿
url_passthrough
ad_storage や analytics_storage がdeniedでも、広告クリックやセッションの情報をURLのクエリで次のページへ渡します。次の条件がそろったときに働きます。
- Googleタグが同意に対応していて、ページにある
- 広告主が機能を有効にしている
- ページにConsent Modeが実装されている
- リンク先が現在のページと同じドメインである
- Google広告とFloodlightのタグでは、URLにGCLIDかDCLIDがある
ads_data_redaction
ad_storage がdeniedのとき、Google広告とFloodlightのタグが送るクリック識別子を伏せます。リクエストはサードパーティCookieを持たないドメイン(例は pagead2.googlesyndication.com)経由になります。
ad_storage がgrantedのとき、または gtag('consent') を使っていないときは効果がありません。
ad_storage がdeniedでも、送られるデータにはクエリ内の広告クリック情報を含むページURLがそのまま入ります。伏せたいなら ads_data_redaction が要るので、設定の有無はプロンプトで必ず問います。
url_passthrough を使う実装では、gclid・dclid・gclsrc・_gl・wbraid がリンクに付きます。リダイレクトがこれらを落とさないか、分析ツールがURL上で除外しているかも、ソースから拾える確認事項です。GTMでは、Conversion Linkerの「Enable linking on all page URLs」を使う形があります。GoogleアナリティクスのタグのFields to Setに url_passthrough を true で置く形もあります。ソースではdefaultと同じく、config より前に gtag('set', 'url_passthrough', true) があるかを見ます。
同意が出るまでGoogleタグを止めていないか
チェックリストの11番目は、Consent Modeの外側にある実装です。同意が出るまでGoogleタグの読み込みを止める構成だと、コンバージョンのモデリングの精度が下がり、Googleアナリティクスの行動モデリングも使えなくなる、とトラブルシュートのページは述べています。ページのソースに「同意後にgtag.jsを動的に挿入する」処理があれば、Claudeに該当箇所を引用させてください。
設定ガイドには、Consent Modeはbasicとadvancedのどちらの方法でも実装でき、選択と各defaultは自社のガイドラインで決める、とあります。止めるか、読み込んだうえでdefaultをdeniedにするかも、組織の方針とツールの設計で決まります。点検の結果は「止めている」という事実の報告にとどめ、方針の是非は人が判断します。
静的な点検で分からないこと
ここまでの照合は、あくまでソースと設定の読み取りです。次の点はClaudeに渡した素材からは判定できません。
- 実際のページ読み込みで、defaultがどのタグより先に処理されたか
- 各タグが同意状態に応じて発火したか、ブロックされたか
- CMPが実運用でupdateを送ったか
- 地域の切り替えが実ブラウザーで反映されたか
これらはGoogleのTag Assistantで確かめます。
Tag Assistantでdefaultとupdateを実測する
- 1
URLを入力する
Tag Assistantにサイトのアドレスを入れると、サイトが新しいタブで開きます。「Could not connect」と出たら、GoogleタグやGTMコンテナのブロックが疑われます。
- 2
バナーで全パラメータを承認する
ブロックされていた場合も、承認すると接続できるはずです。
- 3
defaultを見る
Summaryで最も早いConsentイベントを開き、API Callで4パラメータが設定されているかを確かめます。Output of your tagのConsentタブなら、On-page Default列です。
- 4
updateを見る
Summaryの最新のConsentイベントで、同じ4パラメータが更新されているかを確かめます。ConsentタブではOn-page Update列にあたります。
- 5
タグごとの発火を見る(GTM)
SummaryのTagsタブで各タグを開き、同意設定どおりに動いたかを確かめます。
地域別のdefaultがあるなら、Chromeで訪問者の位置を切り替えて同じ手順を繰り返します。
Tag Assistantが対応する同意の仕組みは、gtagのconsentコマンド、GTMのConsent Modeテンプレートのタグ、TCF(Transparency and Consent Framework)の3つです。TCFを使うCMPは、トラブルシュートの別ページ(Troubleshooting TCF)が扱う対象です。
Tag AssistantのConsentタブのスクリーンショットをClaudeに渡せば、手順2のチェックリストとの照合を続けられます。ただし画像の読み取りは補助として扱い、defaultの欄に4パラメータが揃っているかは自分の目でも確かめてください。
棚卸しをリポジトリの作業にする(Claude Code)
サイトのソースがリポジトリにあるなら、Claude Codeに読ませるほうが漏れが減ります。まずgrepで対象ファイルを絞ります。
grep -rln "googletagmanager.com" src/ public/
grep -rn "'consent'" src/ public/
grep -rn "wait_for_update\|url_passthrough\|ads_data_redaction" src/チェックリストは、リポジトリに置いておくと毎回貼らずに済みます。たとえば次のようにCLAUDE.mdへ規約として書きます(記法の考え方はCLAUDE.mdに規約を教えると同じです)。
## Consent Mode の点検
- 点検の観点は docs/consent-checklist.md に置く(Google 公式ガイドの要件)
- default の値の妥当性は判定しない。方針との食い違いだけ指摘する
- 判定は「OK / NG / 判定不能」。NG にはファイルと行番号を付ける
- 実行時の挙動(タグの発火)は Tag Assistant の結果が必要と明記するClaude Codeの出力を、そのまま監査結果として提出することは避けてください。指摘された行をエディターで開いて実物と照らす作業が、この手順の最後の1歩です。
まとめ
11項目のうち、ソースとコンテナJSONだけでOKかNGかが付くのは、1・2・3・6・8・10です。4・5・11は、コードの有無は読めても、updateが実際に送られたか、タグが止まったかはTag Assistantの実測が要ります。
最初に前者をClaudeへ依頼し、NGを直してから実測に進むと、画面で見る箇所が絞れます。