同意審計:在訪客點擊「接受」之前,哪些東西在執行?
此技能背後的教訓(Dr. Erin Toussaint Jacques,IG 影片,2026 年 10 月):Vibe-coded 應用程式很容易挨告,因為沒人檢查追蹤像素是否在訪客點擊「接受」之前就觸發了。像素是來自 Meta、Google 等公司的少量程式碼,用來追蹤人們在網站上的行為。根據加州竊聽法(CIPA),在獲得同意之前開始的追蹤行為可被視為竊聽,法定賠償金額每次違規可達 5,000 美元,而像素訴訟現在已達數千件。有橫幅和等待許可,是兩件不同的事。 許多被告的網站都有橫幅,但追蹤程式碼在頁面開啟的瞬間就載入了。
因此,這個審計用證據回答一個問題:在新的造訪中,在沒有任何點擊之前,什麼被載入、什麼被發送,以及發送給誰?
這是一項工程審計,而非法律建議。絕不要告訴任何人他們「已合規」。只需說明發現了什麼、修復了什麼、未檢查什麼,並建議如果他們投放廣告或向歐盟或加州銷售產品,應由律師審查。
預設:唯讀
不要對這個技能進行任何修改:不得編輯、發布、進行資料庫或認證變更、新增服務或接受條款。修復是 consent-gate 的工作,需在專案擁有者同意後進行。
步驟 1:盤點程式碼
如果程式碼在本機(或是 Lovable 專案的 GitHub clone),請執行掃描器:
python3 ~/.claude/skills/consent-audit/scripts/scan_trackers.py /path/to/app
它會列出找到的每個追蹤器、像素、分析工具、重播工具、嵌入工具和第三方腳本簽名(依檔案和行號),標記看似會發送電子郵件或使用者 ID 的行,並說明附近是否有同意檢查。「附近有同意檢查」的註記是線索,而非證據。請閱讀每個命中點周圍的程式碼以確認:
- 從哪裡開始。
index.html<head>、main.tsx、App.tsx、_app/layout或 provider,表示它在每個頁面上為每個訪客執行。 - 用什麼來守門。 該
script標籤、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 片段)。務必在全新、無 Cookie 的瀏覽器分頁中檢查已發布的 URL:
- 在新的隱私上下文中開啟網站(在 Claude 的內建瀏覽器中:清除儲存資料後的新分頁,或那裡從未造訪過的網站)。不要點擊任何東西。
- 讀取網路請求(
read_network_requests)。任何在點擊之前發送給廣告、分析或重播網域的請求都是一項發現:列出該網域、URL 路徑,以及它是否攜帶識別碼(fbp、_ga、cid、uid、em、ttp)。 - 透過
javascript_tool讀取 Cookie 和儲存空間:document.cookie、Object.keys(localStorage)。注意是否有_ga、_fbp、_gcl_au、_ttp、_hj*、ph_*、ajs_*、_clck或_uetsid。 - 點擊拒絕(如果沒有拒絕選項,則關閉橫幅)。導航到另外兩個頁面。任何新觸發的東西都是一項發現。
- 在新的上下文中點擊接受。確認追蹤器現在已載入,證明守門機制沒有壞掉。
- 如果存在測試帳戶,請使用它登入(絕對不要用真實客戶的帳戶)。檢查電子郵件或使用者 ID 是否出現在任何追蹤器請求中。
步驟 3:檢查託管和平台設定
由主機注入的追蹤器不會出現在應用程式的程式碼中:
- Lovable: 專案 → 設定 → 訪客分析。預設為開啟;請在每個專案(包括新專案)上將其關閉(或設定守門機制)。
- Vercel(Web Analytics / Speed Insights)、Netlify(Analytics)、Cloudflare(Web Analytics、Zaraz)、Framer/Webflow/Wix/Squarespace(網站設定 → 自訂程式碼 / 分析 / 像素)、EzyCourse / Systeme / Kajabi(追蹤碼欄位、Facebook Pixel 欄位)。
- 標籤管理器: 開啟 GTM 容器,列出每個標籤及其觸發條件。「所有頁面」若沒有同意條件,表示它在同意前就會觸發。
步驟 4:分類和報告
將每個項目分類:
| 類別 | 範例 | 規則 |
|---|---|---|
| 必要 | 登入 session、CSRF、購物車、結帳頁面上的 Stripe、詐欺/機器人檢查、已儲存的 UI 偏好設定 | 可在未經同意的情況下執行。僅此類項目不需要橫幅。 |
| 功能嵌入 | 地圖頁面上的 Mapbox、YouTube/Vimeo 播放器、Calendly、聊天小工具 | 僅在使用的地方載入。偏好使用點擊載入或隱私模式(youtube-nocookie)。 |
| 可選 | 廣告像素、GA/GTM、PostHog、Hotjar、Clarity、HeyCatch、session 重播、再行銷 | 在訪客選擇該類別之前,不得載入、擷取或初始化。 |
報告格式(保持簡短並以證據為基礎):
CONSENT AUDIT: <app> (<url>), <date>
Before any click: <N> optional trackers fired -> PASS / FAIL
| Vendor | Where it starts (file:line or host setting) | Fires before consent? | Sends identity/URL data? | Class | Minimal fix |
Necessary services (OK without consent): ...
Privacy notice: present/missing, linked from footer? accurate vendor list?
Withdraw choice: is there a persistent "Privacy choices" link?
Global Privacy Control honored? yes/no/untested
Unpublished changes that publishing would also release: ...
Not checked: ...
Not legal advice. Have counsel review if you run ads, serve California/EU visitors, or put pixels on video pages.
然後提供 consent-gate 來套用修復。如果某個追蹤器沒有發揮作用,建議移除它而不是為它加守門機制:沒有追蹤器才是最便宜的合規方式(在真實審計中,移除未使用的分析工具常常就是全部的修復方法)。
來自真實審計的注意事項
- 從應用程式進入點檔案(
src/main.tsx)開始的分析,為每個訪客在每個頁面上執行,沒有同意檢查,而且登入程式碼在每次登入時都會將已登入客戶的電子郵件和使用者 ID 發送給分析工具。該工具無法去除查詢字串,因此被完全移除。 - Lovable 的訪客分析預設為開啟,且由主機注入。它不在程式碼中。
- 發布會釋出所有未發布的內容。 在發布隱私修復之前,列出它同時也會發布的舊有未發布變更(登入輔助工具、依賴套件升級、付款修正),並取得擁有者的同意。
- 關閉分析並不等於關閉資料擷取。 應用程式自己的資料庫(學生作品、進度、訊息)是第一方資料,且是分開的。請明確說明這點,因為擁有者會擔心。
- 影片頁面 + Meta 像素會增加另一項聯邦風險(影片隱私保護法)。包含教學影片的課程網站應將這些頁面上的任何像素列為高優先級。