Community研究&データ分析github.com

shannonmcgivney/consent-audit

Webサイトやvibe-codedアプリ(Lovable、Bolt、v0、Replit、Next.js、React、プレーンHTML)を監査し、訪問者がCookieバナーで同意する前に読み込まれたりデータを送信したりするトラッキングを検出します(Meta、Google、TikTok、LinkedInの広告ピクセル、Google Tag Manager、アナリティクス、セッションリプレイ、チャットウィジェット、埋め込み、ホスティング注入型アナリティクス、顧客メールやIDを含む)。読み取り専用で、コードスキャンとライブの新規訪問ネットワークチェックを実施し、インベントリと最小限の修正リストを出力します。「これは」と尋ねられたときに使用します。

consent-audit とは?

このスキルは、Webサイトやvibe-codedアプリ(Lovable、Bolt、v0、Replit、Next.js、React、プレーンHTML)を対象に、訪問者が同意ボタンをクリックする前にトラッキングが動作していないかを監査するエンジニアリング監査ツールです。読み取り専用で、コードスキャンとライブの新規訪問ネットワークチェックを組み合わせ、広告ピクセル(Meta、Google、TikTok、LinkedIn)、Google Tag Manager、アナリティクス、セッションリプレイ、チャットウィジェット、埋め込み、ホスティング注入型アナリティクス、さらに顧客メールやIDがトラッカーに送信されていないかを徹底的にチェックします。この監査は、カリフォルニア州の盗聴法(CIPA)に基づく訴訟リスクを軽減するために開発されました。多くの訴訟で、同意バナーは設置されていたもののページ読み込みと同時にトラッキングが起動していたケースが指摘されています。最終的に、同意なしに動作するトラッカー一覧と最小限の修正リストを提供し、より本格的な修正には別のスキル(consent-gate)を推奨します。なお、これは法的助言ではなくエンジニアリング監査であり、結果に基づいて弁護士に相談するよう促します。

対応✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/shannonmcgivney/consent-before-tracking/tree/HEAD/skills/consent-audit

Installed? Explore more 研究&データ分析 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Consent監査:誰も「同意する」をクリックする前に何が動作しているか?

このスキルの背景(Erin Toussaint Jacques博士、IGリール、2026年10月):vibe-codedアプリは簡単に訴えられる危険がある。それは、訪問者が「同意する」をクリックする前にトラッキングピクセルが動作していないか誰も確認しないからだ。ピクセルとはMetaやGoogleなどからの小さなコードで、サイト上でのユーザーの行動を追跡する。カリフォルニア州の盗聴法(CIPA)では、同意なしに開始されるトラッキングは盗聴として扱われる可能性があり、違反1件あたり最高5,000ドルの法定損害賠償が科せられる。そして、ピクセル訴訟は現在何千件も起きている。バナーを表示することと、許可を待つことは全く別のことだ。 訴えられたサイトの多くにはバナーがあった。しかし、トラッキングはページが開いた瞬間に読み込まれていたのだ。

この監査は、ひとつの問いに証拠をもって答える:新しい訪問で、何のクリックもなしに、何が読み込まれ、何が送信され、誰に送られるのか?

これはエンジニアリング監査であり、法的助言ではない。「あなたはコンプライアンスを遵守している」と他人に決して言ってはならない。見つかったこと、修正したこと、チェックしなかったこと、そして広告を配信している場合やEUまたはカリフォルニアで販売している場合は弁護士に確認してもらうべきであることを伝えよ。

デフォルト:読み取り専用

このスキルでは何も変更しない:編集、公開、データベースまたは認証の変更、新しいサービス、規約の承諾は行わない。修正は、所有者が同意した後、consent-gateの役割である。

ステップ1:コードのインベントリ

コードがローカルにある場合(またはLovableプロジェクトのGitHubクローンの場合)、スキャナーを実行する:

python3 ~/.claude/skills/consent-audit/scripts/scan_trackers.py /path/to/app

これにより、見つかったすべてのトラッカー、ピクセル、アナリティクス、リプレイ、埋め込み、サードパーティスクリプトのシグネチャがファイルと行番号ごとにリストされ、メールやユーザーIDを送信しているように見える行にフラグが立てられ、その近くに同意チェックがあるかどうかが示される。「同意チェックが近くにある」というメモは手がかりであり、証拠ではない。各ヒットの周辺コードを読み、以下を確認する:

  • 開始場所。 index.html <head>、main.tsx、App.tsx、_app/layout、またはプロバイダーにある場合、それはすべてのページですべての訪問者に対して動作することを意味する。
  • 何がゲートするか。 そのスクリプトタグ、import、またはinit()は、保存された肯定のオプトインの後にのみ実行されるか?gtag('config')がすでに実行されている間にバナーが自分自身を隠すだけのものはゲートではない。
  • 何を送信するか。 identify(email)、setUser({ email })、Meta高度マッチング(em、ph)、?クエリ文字列や#フラグメント(ギフトコード、リセットトークン、検索テキスト)を含む完全なURL、およびフォームフィールド。
  • サーバーサイド転送。 Conversions API、/api/track、Meta/Google/Segmentに投稿するエッジ関数。これらは同じ選択を尊重しなければならない。

ローカルコードがない場合(ブラウザでのみアクセスできるLovableプロジェクト)、そのプロジェクトのチャット内にあるreferences/prompts.mdの監査専用プロンプトを使用し、そのレポートをステップ2で検証する。

ステップ2:ライブサイトの確認(バナーが偽装できない部分)

コードは省略によって嘘をつくことができる(タグマネージャー、ホスティングアドオン、CMSスニペット)。公開URLを新しいCookieのないブラウザタブで常に確認する:

  1. 新しいプライベートコンテキストでサイトを開く(Claudeの内蔵ブラウザの場合:ストレージをクリアした新しいタブ、またはそこでまだ訪問したことのないサイト)。何もクリックしないこと。
  2. ネットワークリクエストを読む(read_network_requests)。クリックの前に広告、アナリティクス、またはリプレイドメインへのリクエストがあれば、それは検出結果である:ドメイン、URLパス、およびそれが識別子(fbp、_ga、cid、uid、em、ttp)を運んでいるかどうかをリストする。
  3. Cookieとストレージをjavascript_toolで読む:document.cookie、Object.keys(localStorage)。_ga、_fbp、_gcl_au、_ttp、_hj*、ph_*、ajs_*、_clck、または_uetsidがあればメモする。
  4. 拒否(または拒否ボタンがない場合はバナーを閉じる)をクリックする。さらに2ページに移動する。新しく動作するものがあれば、それは検出結果である。
  5. 新しいコンテキストで同意するをクリックする。トラッカーが読み込まれることを確認し、ゲートが単に壊れているわけではないことを確認する。
  6. テストアカウント(実際の顧客のものではない)でサインインする。メールアドレスまたはユーザーIDがトラッカーリクエスト内で流出していないか確認する。

ステップ3:ホスティングとプラットフォーム設定の確認

ホストによって注入されたトラッカーはアプリのコードに表示されない:

  • Lovable: プロジェクト → 設定 → 訪問者アナリティクス。デフォルトでオンになっている;すべてのプロジェクト(新しいものも含む)でオフにする(またはゲートする)。
  • Vercel(Web Analytics / Speed Insights)、Netlify(Analytics)、Cloudflare(Web Analytics, Zaraz)、Framer/Webflow/Wix/Squarespace(サイト設定 → カスタムコード / analytics / pixels)、EzyCourse / Systeme / Kajabi(トラッキングコードフィールド、Facebook Pixelフィールド)。
  • タグマネージャー: GTMコンテナを開き、すべてのタグとそのトリガーをリストする。同意条件なしの「すべてのページ」は、同意の前に発動することを意味する。

ステップ4:分類と報告

各項目を分類する:

分類例ルール
必要ログインセッション、CSRF、カート、チェックアウトページのStripe、不正/ボットチェック、保存されたUI設定同意なしで実行してもよい。これらだけならバナーは不要。
機能的な埋め込みマップページのMapbox、YouTube/Vimeoプレーヤー、Calendly、チャットウィジェット使用される場所でのみ読み込む。クリックして読み込む形式かプライバシーモード(youtube-nocookie)を推奨。
オプション広告ピクセル、GA/GTM、PostHog、Hotjar、Clarity、HeyCatch、セッションリプレイ、リターゲティング訪問者がそのカテゴリにオプトインするまで、読み込み、取得、初期化をしてはならない。

報告書の形式(簡潔で証拠に基づくこと):

CONSENT AUDIT: <app> (<url>), <date>
何のクリックもなし:<N> 個のオプショントラッカーが発動  ->  合格 / 不合格

| ベンダー | 開始場所(ファイル:行、またはホスト設定) | 同意前に発動するか? | ID/URLデータを送信するか? | 分類 | 最小限の修正 |

必要なサービス(同意なしでOK):...
プライバシー通知:あり/なし、フッターからリンク?正確なベンダーリスト?
選択の撤回:永続的な「プライバシー選択」リンクはあるか?
Global Privacy Controlが尊重されているか:はい/いいえ/未テスト
公開すると同時にリリースされる未公開の変更:...
チェックしなかったこと:...
法的助言ではありません。広告を配信している場合、カリフォルニア/EUの訪問者にサービスを提供している場合、または動画ページにピクセルを設置している場合は、弁護士に確認してもらってください。

次に、consent-gateを適用して修正を提供する。トラッカーが価値を生んでいない場合は、ゲートするよりも削除を推奨する:トラッカーがないことが最も安価なコンプライアンスである(実際の監査では、未使用のアナリティクスツールを削除することが修正全体であることがよくあった)。

実際の監査からの注意点

  • アナリティクスがアプリのエントリファイル(src/main.tsx)から開始され、すべてのページですべての訪問者に対して同意チェックなしで実行され、ログインコードがサインインするたびにサインインした顧客のメールとユーザーIDをアナリティクスツールに送信していた。ツールはクエリ文字列を削除できなかったため、完全に削除された。
  • LovableのVisitor analyticsはデフォルトでオンであり、ホストから注入される。コードには表示されない。
  • 公開すると、未公開のものがすべてリリースされる。 プライバシー修正を公開する前に、一緒にリリースされる古い未公開の変更(ログインヘルパー、依存関係のバンプ、支払い修正)をリストし、所有者の承認を得る。
  • アナリティクスをオフにすることは、データ収集をオフにすることと同じではない。 アプリ独自のデータベース(学生の作業、進捗、メッセージ)はファーストパーティのものであり、別物である。所有者が心配するので、明示的にそう伝える。
  • 動画ページ + Metaピクセルは、別の連邦リスク(Video Privacy Protection Act)を追加する。レッスン動画があるコースサイトでは、それらのページ上のピクセルを優先度の高いものとして扱うべきである。

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

関連スキル