Community生產力與協作github.com

shannonmcgivney/consent-gate

修復網站或直覺式編寫的應用程式,確保沒有任何廣告像素、分析工具、會話重播或可選的第三方腳本在訪客同意前載入、擷取或傳送任何內容——一個預設拒絕的同意載入器、誠實的橫幅(接受與拒絕同等顯眼、類別未勾選)、撤回機制、全球隱私控制、不傳送客戶電子郵件或完整網址的追蹤資料,以及一份準確的隱私聲明——然後透過全新訪客測試來證明。在同意審計發現未經同意即進行追蹤之後,或當有人說…時使用。

consent-gate 是什麼?

此技能可建立一個「同意閘道」,強制網站在使用者透過橫幅明確選擇同意之前,不得載入或執行任何可選的第三方腳本(如分析、廣告像素、會話重播等)。這項修復基於一套詳盡的清單,涵蓋腳本載入、橫幅行為、資料傳輸及隱私聲明等面向,確保實作符合預設拒絕的原則。技能支援在 Claude Code 等本地編碼環境進行精細的程式碼整合,也適用於 Lovable、Bolt 等直覺式開發平台,並提供完整的測試程序來驗證修復效果。最終產出是一份詳細的報告,記錄所有變更與測試結果,同時強調此工具不構成法律建議,必要時應諮詢法律顧問。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/shannonmcgivney/consent-before-tracking/tree/HEAD/skills/consent-gate

Installed? Explore more 生產力與協作 skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

同意閘道:在他們同意之前,沒有任何可選項目會執行

影片中的規則,用一句話來說:在用戶點擊 Cookie 橫幅上的「接受」之前,不會載入任何追蹤像素、分析工具或第三方腳本。 一個在像素已經觸發後才出現的橫幅根本無法解決問題。這個技能就是要建立那個「等待」的部分。

非法律建議。切勿在程式碼、文案或報告中寫下「完全合規」。請說明應用程式現在做了什麼以及測試了什麼。

在動任何東西之前

  1. 先進行審計。 如果這個應用程式還沒有 consent-audit 報告,請先執行那個技能。你需要一份清單:有哪些供應商、它們從哪裡開始載入、它們傳送了什麼。
  2. 針對每個追蹤器,問所有者一個問題:保留、設閘或移除? 如果一個追蹤器不是用於決策或廣告,移除它比設閘更好。一個只有必要儲存功能的網站完全不需要橫幅;不要加上一個。
  3. 了解發布將會釋出哪些內容。 託管式建構工具(如 Lovable 等)會一起發布所有未發布的變更。列出它們並在發布前獲得許可。
  4. 保護第一方資料。 設閘的追蹤器不得觸及登入、付款或應用程式自身的資料庫寫入(如學生成績、進度、表單)。請在報告中說明。

「設閘」的定義(修復必須符合的清單)

載入

  • 一個集中式載入器(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
建置 + 型別檢查通過

報告:已更改的檔案、每個測試的結果及證據(看到的網域或「無」)、未執行測試及其原因、與之一起發布的未發布變更,以及「非法律建議。如果您投放廣告或服務加州/歐盟訪客,請諮詢法律顧問。」

Individual skills in this repo

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

相關技能