網站資安

Cookie 同意分類做到位?彈窗背後要接住三個技術動作

多數網站彈出的同意通知只有兩顆按鈕,接受全部,或是拒絕全部。你點下其中一個,畫面關掉,然後呢?網站上其實同時在跑好幾種不同用途的腳本,讓網站站得住的必要功能、記住你偏好設定的加值功能、統計流量的分析工具,還有把你的行為拿去投放廣告的行銷像素。二選一的按鈕只能把這些通通放行或通通擋下,沒有中間值可選。

結果常是兩敗俱傷。使用者按下拒絕,分析工具跟廣告像素一起被擋掉,行銷團隊看到的流量報表跟廣告成效同時少了一截;更常見的情況是,畫面上明明有「自訂偏好」可以選,實際上後端根本沒有真的分開執行,使用者拒絕了行銷類別,行銷像素還是照樣默默把資料送出去。依類別分別徵求同意,做的正是把必要、功能、分析、行銷這幾種用途拆開來,各自對應各自的開關,只是這件事光靠同意通知彈窗上多幾個文字分類做不到,背後要有一套機制,讓使用者對某一類說不,能真的對應到那一類的腳本不會被執行。

使用者關掉行銷類別、畫面顯示設定成功,後端的行銷像素卻照樣執行、資料照樣送出,畫面有選項不等於後端真的把那一類停下
使用者關掉行銷、畫面顯示設定成功,那支像素卻沒被通知停下,可見畫面有選項跟後端真的分開執行是兩件事。

一顆按鈕管不住四種各自要同意的用途

很多網站以為,同意通知只要在文案上多分幾個類別、多放一顆「自訂偏好」的按鈕,就算是做到了分類同意。但畫面上有分類選項,跟後端真的把每一類分開放行或阻擋,是完全不同的兩件事。前者做了,不代表後者也做了;很多時候,使用者點開自訂偏好、關掉行銷類別、按下儲存,畫面顯示設定成功,那支行銷像素卻壓根沒被通知要停下來,還是照常執行。

國際廣告產業自己制定的透明度與同意框架(Transparency and Consent Framework,簡稱 TCF)可以拿來對照這個落差。這套由 IAB Europe 主導的自願性產業標準,把整個生態系分成三種角色:發佈商是實際蒐集資料的網站經營者,廠商是廣告伺服器、測量供應商、需求方平台這類真正拿得到資料的第三方,CMP 則是負責產出同意通知介面、捕捉使用者偏好的軟體服務。核心機制是一組叫做 TC String 的標準化編碼,把使用者的同意選擇轉成一串固定格式的資料,在發佈商跟各個廠商之間傳來傳去;業界必須在 2026 年 2 月 28 日前完成最新版本的採用。這套標準之所以要花這麼大力氣去定義角色、編碼、傳輸格式,就是因為在真正的產業實務裡,分類從一開始就是要對應到某個廠商能不能拿到資料,而不是同意通知文案上的分組修辭。

換句話說,分類同意的終點不是把文字寫清楚,是要讓每一類同意的結果,真的接得到後面某支腳本會不會執行、某筆資料會不會被傳出去。

分類同意背後,法規要求與廣告效果的雙重驅動

驅動力其實有兩層,很容易被混成一句「因為法規規定」帶過。一層來自法規本身,另一層來自你現在正在用的行銷工具,兩層疊在一起,才是「這件事值得投入」的完整理由。

歐盟資料保護規則要求同意對應個別處理目的

歐盟的資料保護規則明文要求,當一次同意涵蓋多個處理目的時,每一個目的都要能夠讓使用者個別表態,不能用一個籠統的「同意」字樣打包所有用途。這也是「功能、分析、行銷要分開徵求同意」在規則原文上的依據,目的不同,就要分開讓使用者表態,不是通知文案愛怎麼分組都行。

同一份規則也講清楚,什麼樣的動作才算數。有效同意必須是清楚、肯定的行動,勾選網站上的方框、設定資訊服務裡的技術選項,或是口頭聲明都算數;但沉默、預先勾選好的方框、什麼都不做,都不構成同意。這一條後面會接到一個很實際的設計原則,同意通知的預設狀態不能全部打勾,使用者不主動去點,就等於什麼都沒同意。

台灣個資法沒有專屬的 Cookie 條文,同意原則仍普遍適用

不少台灣網站的同意通知寫得好像在配合個資法,但個資法其實沒有一條專門講 Cookie。真正銜接得上的,是個資法對個人資料採取相當廣義的定義,只要一組資料能直接或間接指向特定使用者,就有可能落入這個定義;能被拿來跨站辨識同一個人的 Cookie 識別碼,就有機會被涵蓋進去。

判斷的前提不是看到 Cookie 兩個字就套用個資法,而是先問這筆資料能不能識別到特定的人。一旦答案是可以,同意、目的外利用、使用者事後要求停止把資料用在行銷上的一般原則,就會跟著接上;答不上來,這件事就回到單純的商業判斷,不必硬扯上法規。

Google Consent Mode 讓同意類別變成廣告數據品質的現實

就算一個網站的受眾完全不在歐盟、自認個資法風險也不高,只要還在用 Google Ads 或 Google Analytics,同意類別設得對不對,就直接決定了行銷報表跟廣告投放拿到的是真實數據,還是被系統自動打折的估算值。Consent Mode 目前有四個核心參數:ad_storage 管廣告用途的儲存與 Cookie、analytics_storage 管分析用途的儲存與 Cookie、ad_user_data 決定要不要把使用者資料傳給 Google 做廣告用途、ad_personalization 決定要不要允許個人化廣告投放,後兩者是 2023 年 11 月才新增的參數。

這四個開關會直接對應到你在同意通知裡設計的類別怎麼分。分析類別對到 analytics_storage,行銷類別則同時牽動 ad_storage、ad_user_data、ad_personalization 三個開關,缺一個沒接對,廣告平台看到的同意狀態就是錯的。這件事已經是多數網站行銷工具運作的技術前提,不是可有可無的合規裝飾。

分析類別對應 analytics_storage,行銷類別要同時接對 ad_storage、ad_user_data、ad_personalization 三個 Consent Mode 參數
分析類別只接 analytics_storage,行銷類別得同時接對 ad_storage、ad_user_data、ad_personalization 三個參數才不會出錯。

同意類別要對應到腳本載入、資料傳輸與紀錄留存三個技術動作

很多人以為,裝一個同意通知外掛就等於做到了分類同意。實際上,使用者選了某個類別之後,真正要發生的是三件各自獨立的技術動作,缺了任何一件,分類同意都只是半套。

分類同意要接住載入端擋下腳本、傳輸端讓平台看懂同意狀態、留存端留下選擇紀錄三個各自獨立的技術動作
載入端擋腳本、傳輸端接 Consent Mode、留存端留紀錄,三件各自獨立、缺一件分類同意都只是半套。

第一件是載入端,那個類別對應的腳本、追蹤碼、像素在使用者同意之前,根本不能被載入或執行。第二件是傳輸端,就算腳本本身被允許執行,它送出去給 Google 或其他廣告平台的資料,還要另外看那個平台認不認得使用者的同意狀態,這正是 Consent Mode 在處理的事。第三件是留存端,使用者做了什麼選擇、什麼時候做的、依據哪一版的同意通知內容,這些都要被記下來,將來被質疑或稽核的時候才拿得出證據。

只做了第一件,沒接第二件,行銷工具照樣能收到資料;做了第一、第二件,沒留第三件,網站沒辦法證明自己真的有落實同意機制。這三件事互相獨立,也不能互相替代。

從腳本盤點到分類,把每個工具放進正確類別

分類同意的第一步不是選一套同意管理工具,是先知道自己的網站上跑了哪些第三方腳本、Cookie、追蹤像素。這一步經常被跳過,很多網站直接套用同意通知外掛給的預設分類,卻從沒真的核對過自己裝的工具實際屬於哪一種。

必要類別免另外同意,功能、分析、行銷都需同意,分類判準是資料拿去做什麼而不是看工具名稱
分類看的是資料拿去做什麼,不是工具名稱:必要免同意,功能、分析、行銷都要徵求同意。

盤點的做法很直接,把網站上所有第三方 script 標籤、iframe,以及代碼管理工具容器裡的每一個標籤都列出來,逐一核對它在做什麼用途。分類的判準看的是這個工具蒐集到的資料要拿去做什麼,不是看工具的名稱,一個名字裡帶「分析」的工具,實際用途也可能已經越界到行銷。分錯類別最常見的後果,是把行銷像素誤放進必要類別,等於使用者永遠拒絕不了它。

必要類別只留下網站運作缺不了的機制

必要類別是最容易被浮濫使用的一類,判準只有一個,工程上真的少了這個機制網站會壞掉,才算數。工作階段管理、購物車運作、安全防護、流量負載平衡,這些屬於嚴格必要,不需要另外徵求同意。

「這個工具對我們的行銷很重要」不是必要類別的判準,業務上重要跟技術上不能沒有,是兩件不同的事,前者常被拿來把不該免同意的工具硬塞進必要類別,這是分類最容易出錯的第一關。判斷一個工具該不該留在必要類別,問的永遠是拿掉它網站能不能正常運作,不是拿掉它對業績有沒有影響。

功能類別對應使用者自己打開的體驗加值功能

功能類別常常跟必要類別混在一起,界線其實很清楚。真人客服對話視窗、影片嵌入的個人化設定、記住使用者偏好的語言或字體大小這類機制,本質是使用者主動選擇要不要用的加值體驗,不是網站運作的必要條件。

拒絕了這個類別,網站仍然能正常瀏覽,只是少了這些加值功能,客服視窗不會自動彈出、偏好設定不會被記住。分辨方法很簡單,拿掉這個工具之後,網站的核心功能是不是還完整,如果答案是完整、只是少了一點便利,這就該歸到功能類別,而不是必要類別。

分析類別和行銷類別之間最容易混淆的灰色地帶

這是讀者最容易搞混的地方。同一支分析工具,設定不同,可能落在分析類別,也可能已經踩進行銷類別。啟用了廣告個人化訊號的 Google Analytics 4 就是常見例子,或是熱點圖、使用者行為錄影工具,一旦被拿去建立跨站的使用者輪廓,就不再只是觀察自己網站的流量,而是符合行銷類別的定義。

Google 官方把這條界線設計成技術上的獨立參數,ad_user_data 跟 ad_personalization 跟 analytics_storage 是分開的開關,同一個 GA4 帳號,如果同時把資料用於廣告受眾建立,就需要另外處理這兩個參數的同意狀態,不能只靠一個 analytics_storage 打發。判準要記住的是這筆資料只拿來理解自己網站的使用狀況,還是被拿去做廣告受眾建立、跨站追蹤、投放個人化廣告,一旦是後者,就要歸到行銷,不能因為工具名字裡有分析兩個字就自動放進分析類別。

同意前先擋下腳本,同意後才真正放行

同意通知彈出來,跟底下的腳本真的還沒執行,是兩件不同的事。很多網站的同意通知只是疊在頁面最上層的一塊介面,分析、行銷腳本其實在使用者按下任何按鈕之前,就已經默默跑完了。要做到真正的載入端控制,核心原則是預設拒絕、同意後才放行,而不是預設全部載入、事後再讓使用者去關閉。

代碼管理工具內建的同意檢查功能

如果你用的是 Google Tag Manager,不需要改動標籤原本的程式碼,而是在標籤的進階設定裡指定它需要哪些同意類型,等這些類型都已經取得同意,才會觸發。這個設定介面把「這個標籤要哪些同意類型」變成點選,等於用設定取代寫程式碼去做載入端控制。

容器層級還有一個一次檢視所有標籤同意設定的功能,開啟之後可以看到容器裡每一個標籤是已設定同意,還是還沒設定,並且支援批次編輯多個標籤。另外有一個特殊的觸發時機,專門負責設定或更新同意狀態的標籤,永遠會比容器裡其他標籤更早執行,確保同意狀態在其他標籤動作前就已經就緒。

自動阻擋不是滴水不漏的保證

不管用哪一種同意管理工具,自動阻擋所有第三方腳本這件事本身不是百分之百可靠。現代瀏覽器對第三方資源常有非同步預載的行為,這類資源有機會繞過同步攔截型的自動阻擋機制;純粹由 JavaScript 動態觸發的圖片請求,像某些追蹤像素,也不容易被自動偵測攔下。

裝了一套號稱能自動阻擋的解決方案,不代表可以完全不檢查。實際檢查瀏覽器開發者工具的網路請求,確認同意之前真的沒有第三方請求送出,是抽測而不是懷疑,卻是唯一能確認阻擋真的有效的方法。

接上 Google Consent Mode 才能讓廣告和分析看懂同意結果

就算腳本本身被正確擋下,如果網站用的是 Google Analytics、Google Ads 這類工具,還需要另外把同意結果翻譯成這些平台看得懂的格式,否則平台端還是會用自己的預設方式處理資料。設定的基本骨架分兩步,先設預設值,再依使用者互動去更新,順序不能顛倒。

任何量測指令執行之前,都要先設定好預設同意狀態,用意是避免第一批資料在使用者做選擇之前就已經送出去。使用者做出選擇之後,再更新同意狀態,而且要在同一個頁面裡即時生效,同意的更新必須在發生的那個頁面上被記錄,且要在任何頁面轉換之前完成,順序一旦錯亂,同意設定就不會生效。

還有一個地區參數,可以依照使用者所在的地區給不同的預設同意狀態,例如對歐盟使用者預設全部拒絕,其他地區依照自家的政策自行決定,越明確、範圍越小的地區設定會優先於範圍較大的設定。透過代碼管理工具整合的網站,官方也提醒不要一邊用代碼管理工具管理同意狀態,一邊又在網站自己的程式碼裡直接呼叫更新指令,兩邊互相打架,同意狀態反而會亂掉。

分析報表在同意被拒後改採建模估算

很多人以為使用者拒絕同意,就等於這筆流量在報表上完全消失,什麼都看不到。實際上 Google 的做法是盡量用不依賴 Cookie 的方式先補回一部分資訊,超出這個範圍的缺口,才用統計模型去估算填補,不是整批資料直接歸零。

分析用途的儲存被拒絕時,仍然可以透過在網址上附加參數的方式,在不使用 Cookie 的情況下,跨頁傳遞以事件跟工作階段為基礎的量測資料。超出這個範圍、原本要靠 Cookie 才能串接起來的轉換與使用者行為,Google 會用統計模型去估算補上,但這套模型背後的演算法跟精確度,Google 並未公開細節。另外還有一個遮蔽機制,開啟之後廣告點擊識別碼會被遮蔽處理,不會以明碼形式繼續傳遞。

對經營者實際的意義是,看到同意被拒之後報表數字掉了一截,不必然代表工具壞掉或設定錯誤,那是機制設計上原本就會出現的落差,看得到的是被補回來的一部分,看不到的那塊才是被模型估算掉的。

留存同意紀錄是稽核與申訴的證據基礎

前面兩層做得再好,如果沒有留下使用者在什麼時間、依據哪一版通知內容、選了哪些類別的紀錄,網站在被質疑或被要求說明的時候,就拿不出證據。同意紀錄至少要能對應當下的時間、選擇的類別組合,以及當時生效的通知版本,才具備事後追溯的意義。

如果同意通知的內容或類別清單改版了,舊的同意紀錄就不能直接套用到新版本上,得重新徵求一次;把舊紀錄硬套在改版後的通知上,等於使用者根本沒對新內容表態過。網站上也要提供使用者隨時能重新開啟同意設定、修改先前選擇的入口,常見做法是在頁尾放一個固定連結,不能讓使用者只有第一次造訪這一次機會能表態。前面提到有效同意必須是清楚肯定的行動,這代表同意紀錄本身也要能證明這是使用者主動做的選擇,而不是系統的預設值。

網站看起來有做,其實只是視覺上的同意提示

網站確實跳出了一個做得很精緻的同意通知,接受全部、拒絕全部、自訂偏好三顆按鈕一應俱全,畫面上完全符合有做分類同意的印象。但實際檢查會發現,不管使用者選了什麼,行銷跟分析腳本在通知彈出的那一刻其實已經執行完畢,或者使用者按下拒絕之後,那些腳本仍然持續在背景執行。

落差在於外掛只處理了畫面這一層,沒有真的接上前面講的載入端阻擋,也沒有接上資料傳輸端的控制。通知畫面做得精緻,跟背後真的有分類阻擋,是兩件互相獨立的事,前者不保證後者。同意架構做得完不完整,要看的是背後這幾層技術動作有沒有真的接起來,不是看畫面上的按鈕漂不漂亮。

自建、委外兩條路徑,各自的維護代價不同

剩下的是實際的決策,自己在代碼管理工具裡一項一項接起來,還是找一套現成的同意管理服務。兩條路徑各有取捨,自建掌控度高,也沒有額外的服務費用,但每次新增一個第三方工具,都要自己判斷它的分類、自己設定它的同意檢查條件,維護責任長期落在自己團隊身上。

用現成的同意管理服務,通常能自動掃描網站上的腳本並建議分類,也比較容易跟上法規與產業標準版本的更替,像前面提到的 TCF 版本更新。代價是多一層外部依賴,而且跟自家代碼管理工具容器的整合還是需要另外設定。這兩條路徑其實不是互斥選項,Google 官方的 CMP 合作夥伴計畫已經整合超過三十個同意管理平台夥伴,透過標準化的介面直接整合進容器設定,就算選擇用現成的服務,最終還是要接回代碼管理工具的同意檢查機制才能生效,兩條路徑的技術骨架其實是同一套。判斷該走哪一條,依據是團隊的技術量能,跟網站上第三方工具的數量與更動頻率,不是單純比價格。

同意通知上那幾顆按鈕,從來不是分類同意的終點,只是使用者跟這套機制之間唯一看得見的介面。真正決定這件事做得好不好的,是按鈕背後那三層動作有沒有真的接起來,腳本會不會在該擋的時候被擋下,資料會不會在該說不的時候真的沒被傳出去,選擇會不會被留下證據。把這幾層一次接好,同意通知才不只是一塊裝飾用的畫面。

資料來源
  1. Transparency & Consent Framework — IAB Europe
  2. Recital 32 - Conditions for consent - GDPR.eu — GDPR.eu
  3. 個人資料保護法-全國法規資料庫 — 全國法規資料庫
  4. Set up consent mode on websites | Tag Platform | Google for Developers — Google
  5. Tag Manager consent mode support — Google
  6. CMP Partner Program — Google