同意閘道:在他們同意之前,沒有任何可選項目會執行
影片中的規則,用一句話來說:在用戶點擊 Cookie 橫幅上的「接受」之前,不會載入任何追蹤像素、分析工具或第三方腳本。 一個在像素已經觸發後才出現的橫幅根本無法解決問題。這個技能就是要建立那個「等待」的部分。
非法律建議。切勿在程式碼、文案或報告中寫下「完全合規」。請說明應用程式現在做了什麼以及測試了什麼。
在動任何東西之前
- 先進行審計。 如果這個應用程式還沒有
consent-audit報告,請先執行那個技能。你需要一份清單:有哪些供應商、它們從哪裡開始載入、它們傳送了什麼。 - 針對每個追蹤器,問所有者一個問題:保留、設閘或移除? 如果一個追蹤器不是用於決策或廣告,移除它比設閘更好。一個只有必要儲存功能的網站完全不需要橫幅;不要加上一個。
- 了解發布將會釋出哪些內容。 託管式建構工具(如 Lovable 等)會一起發布所有未發布的變更。列出它們並在發布前獲得許可。
- 保護第一方資料。 設閘的追蹤器不得觸及登入、付款或應用程式自身的資料庫寫入(如學生成績、進度、表單)。請在報告中說明。
「設閘」的定義(修復必須符合的清單)
載入
- 一個集中式載入器(
src/lib/consent.ts,參見references/consent.ts)。index.html、根佈局或main.tsx中不得有像素、GTM、gtag、PostHog 或會話重播的<script>。 - 可選腳本不會被擷取,而不僅僅是未初始化:只有在選擇加入後才進行動態
import()或腳本注入。 - 不會重播已排隊的事件:同意前的頁面瀏覽會被丟棄,不會延遲發送。
- 伺服器端轉發(Meta Conversions API、
/api/track、邊緣函數)會檢查相同的儲存選擇,並隨請求一起發送。 - 主機注入的分析工具需在來源端關閉(Lovable → 設定 → 訪客分析關閉;Vercel/Netlify/Cloudflare 分析關閉),或在注入前設閘。腳本載入後再移除已經太遲,因為第一個請求已經發出。
- Google Consent Mode(如果保留 GA/廣告):
gtag('consent','default',{ad_storage:'denied',analytics_storage:'denied',ad_user_data:'denied',ad_personalization:'denied'})並且 gtag 腳本本身在這個技能的預設設定中仍然等待選擇加入。使用 Consent Mode「基本」,而非「進階」,因為進階模式會在同意前發送無 cookie 的 ping。
橫幅
- 接受可選和拒絕可選同等顯眼:相同大小、相同樣式、相同點擊次數。此外還有一個設定選項。
- 類別切換開關(分析、廣告等)起始狀態為未勾選。
- 關閉橫幅(X / Escape 鍵)表示拒絕。
- 選擇結果會以版本號和到期時間(6 到 12 個月)儲存。變更供應商清單時需增加版本號並再次詢問。
- 頁尾需有持續可見的**「隱私選擇」**連結,可重新開啟設定。
- 撤回會停止未來的呼叫,並刪除應用程式擁有的可選 Cookie 和儲存空間(
_ga*、_fbp、_gcl_au、_ttp、ph_*、ajs_*、_hj*、_clck),但不影響驗證狀態。 - 全球隱私控制(
navigator.globalPrivacyControl === true)應被視為對廣告/銷售/分享的拒絕,橫幅需說明已遵循此設定。
即使獲得同意後,傳送的內容
- 像素或分析工具的資料負載中不得包含電子郵件、電話號碼、姓名或出生資料(無 Meta 進階配對,無
identify(email))。僅在確實需要時使用不透明識別碼。 - 網址的傳送應去除
?query和#fragment(禮物碼、重設權杖、搜尋詞)。如果供應商無法去除,則移除該供應商。 - 不得包含來自測驗答案、聊天內容、健康/金融/出生資料或表單欄位的任何資訊。
- 影片頁面: 在播放課程或教學影片的頁面上不得放置廣告像素(聯邦《影片隱私保護法》風險),除非法律顧問另有指示。
聲明
- 在公開路由上放置隱私/Cookie 聲明頁面,並從頁尾和註冊/登入頁面提供連結,列出實際的供應商和類別。僅使用真實的營運商名稱和聯絡電子郵件;切勿捏造地址、DPO 或法律主張。
如何實作
- 本地程式碼 / Claude Code: 將
references/consent.ts複製到應用程式中,將每個可選供應商註冊為loader,刪除硬編碼的標籤,使用應用程式自身的元件建立橫幅,並配置頁尾連結。保持變更差異最小化,並符合應用程式的風格。 - Lovable / Bolt / v0 / Replit(代理程式建構): 貼上來自
~/.claude/skills/consent-audit/references/prompts.md的修復提示(或移除提示)。然後自行驗證;不要相信代理程式的摘要。
證明(在聲明完成前必須執行)
針對預覽環境執行這些測試,然後在發布後針對正式網址再次執行。在 Claude 的內建瀏覽器中,使用已清除儲存空間的新分頁,然後使用 read_network_requests 和 javascript_tool(document.cookie、localStorage):
| 測試 | 通過條件 |
|---|---|
| 全新訪問,未點擊 | 0 個對廣告、分析或會話重播網域的請求;無可選 Cookie 或儲存空間 |
| 拒絕,然後導航 2 個頁面 | 仍為 0;橫幅不再顯示;選擇已儲存 |
| 僅接受分析 | 分析載入;廣告像素未載入 |
| 重新載入 | 記住選擇;無橫幅 |
| 透過頁尾連結撤回 | 未來的呼叫停止;可選 Cookie 已清除;仍保持登入狀態 |
啟用 GPC(navigator.globalPrivacyControl 強制為 true) | 廣告在未點擊的情況下被拒絕 |
| 客戶端導航(SPA) | 追蹤器不會在路由變更時偷偷載入 |
| 使用測試帳號登入 | 任何追蹤器請求中均無電子郵件或用戶 ID |
| 建置 + 型別檢查 | 通過 |
報告:已更改的檔案、每個測試的結果及證據(看到的網域或「無」)、未執行測試及其原因、與之一起發布的未發布變更,以及「非法律建議。如果您投放廣告或服務加州/歐盟訪客,請諮詢法律顧問。」