跳至主要內容
技術

每個網站都要你同意 cookie,但根本沒有法律規定要有這個視窗

每個網站都要你同意 cookie,但根本沒有法律規定要有這個視窗

這篇的起點是 Kill The Cookie Banner——七個歐洲隱私團體(noyb、EDRi、EFF、BEUC 等)發起的連署行動。它在 Hacker News 衝到 1,148 分、591 則討論。我想趁這個機會,把這件每個人天天遇到、卻幾乎沒人搞懂的事,從頭講一次。不用懂法律,也不用會寫程式。

你一定點過那種「隱私權同意」的按鈕。

打開一個新聞網站,畫面一暗,跳出一塊擋板:「我們重視您的隱私。」下面兩顆按鈕,一顆藍色的「接受全部」很大很好按,一顆灰灰的「管理偏好設定」小小的躲在角落。你沒空理它,手指自動往藍色那顆按下去,然後才看得到你本來要看的東西。

如果你平常很少逛歐洲網站,可能還沒被這樣擋過。它長這樣——這是倫敦交通局的官網,你只是想查一下公車幾點來,得先把這題答完才進得去:

倫敦交通局 TfL 官網的 cookie 同意視窗:整個頁面被暗色遮罩蓋住,中央一塊白色對話框,標題「Your cookie settings」,內文說明他們和合作夥伴使用 cookie,並提到部分合作夥伴依據正當利益而非你的同意來使用你的個人資料。底部三顆按鈕由左到右是白底外框的「Manage cookies」、藍色的「Accept only essential cookies」、深藍色的「Accept all cookies」

在歐洲,這是一天三五次、一年上千次的日常。而這件事,已經持續了十年。

而我要說的是:沒有任何一條法律,規定網站必須放那個東西

一條都沒有。

先把最容易誤會的事講清楚:法律管的是「別偷翻客戶的包包」,而不是「要放同意書」

我用一個生活場景來講,這是整篇文章最重要的一段,看懂這段其他都好懂了。

想像你走進一家店。法律規定:店員不能未經同意翻你的包包

好,現在店家有兩條路可以走:

第一條路:那我就不翻了。客人進來,買東西,走人,皆大歡喜。

第二條路:我還是想翻,所以我在門口擺一張桌子,每個客人進門都得先簽一份「我同意你翻我包包」的同意書,簽完才放行。

法律從頭到尾只寫了一句「不能未經同意翻包包」。是店家自己選了第二條路。門口那張桌子、那份同意書、那個排隊,全部是店家為了「繼續翻」而發明出來的東西,不是法律要求的。

Cookie 同意視窗就是門口那張桌子。

法律說的是:沒有你的同意,不准在你的裝置上偷偷存東西、讀東西。網站業者聽完,絕大多數選了第二條路——我還是要追蹤,所以我發明一個視窗來收集你的同意。

Hacker News 上有個網站經營者的留言,把這件事講得很直接:

我是好幾家公司的 data controller,對 GDPR 很熟。我手上所有網站都沒有 cookie 同意視窗,因為它們根本不需要。我猜大部分公司只是懶得讀法條就先掛上去,不然就是他們真的在收集和販賣個資。

這就是重點。那個視窗的存在,其實是在告訴你一件事:這個網站選了第二條路

最好的證明是 Amazon。同一家公司、同一套系統,你打開 amazon.com 什麼都不會跳;打開 amazon.fr,整片同意書就蓋上來:

Amazon 法國站 amazon.fr 首頁被一大片白色同意書蓋住,標題「Cookies and Advertising Choices」,下方是五大段密密麻麻的說明文字,其中一段提到有 129 家第三方會在這個服務上使用 cookie。最底下三個選項由左到右是黃色實心按鈕「Accept」、白底外框按鈕「Decline」,以及一個沒有按鈕外框的純文字連結「Customise」

同一家公司、同一批 cookie,差別只在訪客站在地球上的哪一格。這正好說明了:那個視窗從來不是技術限制,而是一個商業決定。

那到底是哪條法律?答案不是 GDPR,是一條 2002 年的老規定

這是最多人搞錯的地方,連很多工程師都以為是 GDPR 規定的。

不是。

真正的源頭叫 ePrivacy Directive,2002 年就有了,2009 年修訂過一次。它管的事情很單純:要在使用者的裝置上存資料、或讀取已經存在那裡的資料,得先經過同意

注意這句話裡面沒有「cookie」這個字。這很關鍵,等一下會回來講。

時間軸大概是這樣:

  • 2002 年:ePrivacy Directive 上路,原本的規定比較鬆,網站只要告知、讓你可以拒絕就行。
  • 2009 年:修訂版把它改成「要事前同意」。歐盟各國陸續在 2011 年前後把它寫進國內法。
  • 2011 年起:歐洲網站開始冒出那種底部的小灰條,「本站使用 cookie,繼續瀏覽視為同意」。當時還沒那麼煩。
  • 2018 年:GDPR 上路。

GDPR 沒有發明 cookie 視窗。它做的事情是把「同意」這兩個字的定義訂嚴了:同意必須是主動給的(不能預設打勾)、必須具體到每個用途(不能一句「我們使用 cookie」打包)、而且收回同意要跟給出同意一樣容易。

於是原本那條「繼續瀏覽視為同意」的小灰條不合格了。它被迫長大、長出按鈕、長出分頁、長出一整排開關——變成今天擋在你面前的那塊板子。

所以正確的說法是:規定同意的是 2002 年的 ePrivacy,把同意標準拉高、讓視窗變大的才是 GDPR

有兩種情況本來就不用問

法律不是不通人情。有兩類情況免同意:

  1. 純粹為了把資料傳出去所必需的
  2. 使用者自己要求的服務所必需的

第二類白話講就是:你按了「登入」,網站當然要記得你是誰,所以登入 session 的 cookie 免同意。你把東西丟進購物車,網站要記得,購物車 cookie 免同意。你選了繁體中文,記住這個偏好,免同意。防機器人的驗證,免同意。

這些是「你要求的服務」的一部分。沒有它們,網站就壞了。

不用問的是這些。要問的是追蹤:你看了什麼、停留多久、從哪裡來、還去過哪些網站——這些跟「提供你要的服務」沒關係,是拿去做廣告和分析的。

還有一個很多人沒注意到的陷阱

前面我特別提過,法條裡沒有「cookie」這個字。它寫的是「在終端裝置上存取資訊」。

這代表兩件事,兩件都很多人搞錯:

  • 你就算不用 cookie,改用 localStorage、改用瀏覽器指紋、甚至只是讀取螢幕解析度——照樣可能算數
  • 反過來,「我沒有用 cookie」也不是免死金牌。

「有沒有 cookie」從來不是重點。重點是你有沒有伸手進別人的裝置

為什麼十年下來,變成一場「騙你按同意」大賽

如果那個視窗是誠實的,其實也還好。問題是它不誠實,而且是集體的、有系統的不誠實。

隱私組織 noyb 掃了上萬個歐洲網站,數字長這樣:

  • 45% 的同意視窗預設幫你勾好「全部同意」。
  • 拒絕所需要的點擊次數,普遍是接受的兩倍
  • 只有 2.18% 的使用者會點進第二層設定頁面。

然後是最刺眼的那組對照:業界自己的統計顯示,真心想被追蹤的人大約只有 3%,但實際上按下同意的超過 90%

3% 想要,90% 答應了。

這中間 87 個百分點的差距,不是因為大家忽然想通了,是設計出來的。這在設計圈有個專有名詞叫「dark pattern」(暗黑模式),意思是刻意把介面設計成引導你做出違背自己意願的選擇。

具體手法你一定都遇過:

  • 接受是彩色大按鈕,拒絕是灰字小連結,或者根本沒有拒絕鍵,只有「管理設定」。
  • 點進「管理設定」,一整排開關等著你一個一個關。
  • 關到一半發現還有第二個分頁叫「正當利益」(legitimate interest),裡面 137 家你沒聽過的公司,預設全部是開的,要再一個一個關。

講抽象的不好懂,我實際點一次給你看。這是德國最大的科技媒體 heise.de:

heise.de 首頁的 cookie 同意視窗,標題「Welcome to heise online」,第一句寫著他們和最多 193 家合作夥伴使用 cookie 與追蹤技術。底部三顆按鈕:藍色的「Agree」、藍色的「Subscribe to Pur」(付費訂閱去廣告),以及白底外框的「Settings」。整個視窗沒有任何一顆拒絕按鈕

先看第一句:我們和最多 193 家合作夥伴。再看按鈕:同意、付錢、設定。沒有拒絕鍵。你想免費看、又不想被追蹤?這個介面沒打算給你這個選項。

那就點「Settings」進第二層:

heise.de 同意視窗的第二層設定頁,標題「Settings」,說明文字裡的合作夥伴數量變成最多 205 家。中間列出多項資料處理用途,每一項右邊有「Agree」和「Reject」兩顆按鈕;但最上面那一項「Data processing by advertising providers including personalised advertising with profiling」只有「Agree」一顆,旁邊標註「Consent required for free use」

兩個細節:第一,合作夥伴的數字從 193 變成了 205——同一個網站、隔一層畫面,數字就不一樣。第二,最想拒絕的那一項「廣告商的個人化廣告與剖析」只有同意鍵、沒有拒絕鍵,旁邊寫著「免費使用需要此同意」。

你點了兩層進來,只是為了發現那一項不能拒絕。

而清單上最後那一招——「正當利益」——最陰險。它原本是法律裡的一個概念,意思是某些情況下不用取得同意也能處理資料。廣告業把它拿來當後門用:你以為你按了「全部拒絕」,其實只拒絕掉了「同意」那一欄,「正當利益」那一欄還開著。

回到文章開頭那個倫敦交通局。你點「Manage cookies」進第二層,看到四個分類的勾選框,關一關以為結束了。但那一頁底下藏著一行小字連結,點下去才進得到第三層:

倫敦交通局 cookie 設定的第三層畫面,標題「Manage partners」,內文寫著部分合作夥伴依據正當利益而非你的同意來使用你的個人資料、而你有權拒絕。下方分成 Purposes、Features、Partners 三個分頁,操作說明寫著若要拒絕正當利益,必須逐項取消勾選相對應的正當利益方框

看那句話:部分合作夥伴依據的是「正當利益」,而不是你的同意;你有權拒絕。

有權,但你得先點進第二層、找到那行小字進第三層、再切分頁、再一格一格取消勾選。而你本來只是想查公車幾點來。

Hacker News 上有人一句話總結:

「我們看到你不想被跟蹤了,但我們還是想,所以請針對每一家合作夥伴,再確認一次你不想。」

而且這不只是道德問題。整個廣告業共用的那套同意框架叫 IAB TCF,2022 年被比利時資料保護機關認定違規、開罰;2024 年 3 月歐盟法院(CJEU)判定它產生的同意字串可能構成個人資料;2025 年 5 月布魯塞爾上訴法院確認這套框架不完全符合 GDPR。

換句話說——這場十年大戲最大的反諷是:那些讓你煩到抓狂的 cookie 視窗,本身很多是違法的

它們不是為了保護你才存在的。它們是為了在「不能偷翻包包」的規定下,合法地繼續翻你的包包。

講到這裡,這次在 Hacker News 上炸開的那個行動,訴求就很好懂了。

它的邏輯是這樣:如果每個網站都要問你一次,那乾脆讓你回答一次就好

這件事其實一點都不新奇,你的瀏覽器早就在做類似的事了。你設定過「我要看繁體中文」嗎?大部分人沒有——但你打開網站,它就是中文的。因為瀏覽器每次連線時都會自動附上一句「這位使用者偏好中文」。沒有人需要在每個網站的門口,重新選一次語言。

那隱私為什麼不行?

這招嘗試過了,而且失敗過一次

失敗的那次叫 Do Not Track(DNT),2009 年就有了。原理一模一樣:瀏覽器打一個開關,每次連線附上一句「我不想被追蹤」。

結果呢?網站集體裝作沒看到。

原因很簡單:它是純自願的,沒有任何法律逼人聽。而且更荒謬的是——因為只有少數人會去開這個開關,「有開 DNT」這件事本身反而變成一個辨識你的特徵,讓你更好被追蹤。

於是它死得很難看。Apple 在 2019 年的 Safari 12.1 把它拿掉,理由是「防止它被拿來當指紋辨識的參數」;Mozilla 在 2025 年 2 月的 Firefox 135 也移除了這個選項,理由是「很多網站不尊重它,某些情況下反而降低隱私」。

現在這次不一樣的地方:有法律當靠山

接替 DNT 的東西叫 GPC(Global Privacy Control),技術上跟 DNT 沒什麼差別,差別在後面站著誰。

美國那邊已經走在前面了:到 2026 年 1 月 1 日為止,已有 12 個州(加州、科羅拉多、康乃狄克、蒙大拿、內布拉斯加、新罕布夏、紐澤西、明尼蘇達、馬里蘭、德拉瓦、奧勒岡、德州)以法律要求企業必須認 GPC 訊號。不是「建議」,是「必須」。

同一件事在歐盟的版本,叫做 Digital Omnibus 裡的 Article 88b:使用者可以在瀏覽器或類似工具裡設定一次隱私偏好,網站有義務讀取並遵守,不能再一直跳視窗問。

歐盟執委會 2025 年秋天提出了這個條文。然後:

2026 年 6 月 18 日,歐盟理事會的立場文件把 Article 88b 整條刪掉了。 支持刪除的成員國包括德國、法國和波蘭,背後是廣告產業長期的遊說。

現在球在歐洲議會手上,還沒表決。這就是為什麼那七個隱私組織現在跳出來,要大家寫信給自己的歐洲議會議員。

一個必須誠實補上的但書

我不想把這件事講成「歐盟終於要幫大家收拾爛攤子」的爽文,因為它沒那麼單純。

Digital Omnibus 是一包很大的法案,發起這次行動的那些隱私組織自己在網站上明講:這次改革的其他大部分內容都有問題,會削弱人們的權利。他們支持的只有「把同意搬回瀏覽器」這一小塊。

同一份法案裡,另一個條文 Article 88a 想把幾類情況明文列為免同意,其中包括「網站營運者僅供自己使用的匯總統計」。注意那四個字——「僅供自己使用」。這代表 Google Analytics 這種把資料送到第三方的分析工具,大概還是不在免死名單裡。

而且就算 88b 過了,法律圈普遍不看好視窗會消失。理由很現實:告知義務還在(所以還是會有一條通知)、收回同意必須跟給予同意一樣容易(所以還是會有介面)、各家瀏覽器的實作又不見得一致(所以網站會做「有訊號就聽、沒訊號就跳視窗」的混合版)。

Hacker News 上有人點開歐盟自己的官網 european-union.europa.eu,然後留下一句:

喔……上面有 cookie 同意視窗。

真的是有諷刺,笑死我了 XD

歐盟官方網站 european-union.europa.eu 首頁,畫面最下方有一條淺灰色的 cookie 通知橫幅,寫著本站使用 cookie 並附上 cookies policy 連結;右側兩顆藍色按鈕大小完全相同,分別是「Accept all cookies」和「Accept only essential cookies」

這個評論拿到很多贊同,我覺得它很好地說明了這件事的難度。

不過平心而論,歐盟這個算是好學生:底部一條窄橫幅、不擋內容,兩顆按鈕一樣大、一樣顏色,沒有把拒絕藏起來。跟前面 heise 和倫敦交通局那兩個比,它已經是模範。差別在哪?在於這個網站本來就沒打算靠追蹤你去賣廣告。

台灣讀者最該看的一段:你的網站,可能根本不需要它

前面講的是歐洲。現在講你。

台灣的個資法,沒有 cookie 專章,也沒有任何條文規定網站必須放同意視窗。

如果你的訪客都在台灣,法律上不強制。就這麼簡單。

那為什麼一堆台灣網站都有?我看過的原因大概三種:

  1. 佈景主題或建站平台附送的,裝好就在那,沒人去關。
  2. 外包廠商順手加的,「這是標配啦,加了比較保險」。
  3. 看別人有就跟著裝,總覺得裝了比較安心、比較專業。

第三種最常見,也最沒必要。你為了「看起來合規」,主動幫自己網站加了一塊擋板、拖慢了載入速度、趕跑了一部分訪客——而法律根本沒要求你這麼做。

那什麼時候是真的需要?用這張圖判斷:

flowchart TD
    A["你的網站有歐盟訪客嗎?"] -->|"沒有,訪客都在台灣"| B["法律上不強制<br/>個資法沒有 cookie 專章"]
    A -->|"有,或你不確定"| C{"你在訪客的裝置上<br/>存或讀了什麼?"}
    C -->|"只有登入 session、購物車、語言偏好"| D["免同意<br/>這是服務必需的"]
    C -->|"只有伺服器 log 或無 cookie 分析"| E["絕大多數情況免同意<br/>但這塊確實有爭議"]
    C -->|"GA4、Meta Pixel、廣告 SDK<br/>標準 YouTube 嵌入"| F["需要事前同意"]
    F --> G{"這些換得掉嗎?"}
    G -->|"換得掉"| H["換成無 cookie 方案<br/>然後把視窗整個拿掉"]
    G -->|"換不掉,廣告是主要收入"| I["做一個像人的同意視窗<br/>拒絕要跟接受一樣好按"]

真的需要的情況:你有歐盟訪客,而且你的網站上掛了 GA4、Meta Pixel、廣告 SDK、第三方 A/B 測試工具,或是用標準網址嵌入的 YouTube 影片。

不需要的情況:你只有登入 session 和購物車這類功能性 cookie;或者你的分析只看伺服器 log;或者你用的是不寫 cookie 的分析工具。

但我必須誠實說一件事:最後那一項——「無 cookie 分析就免同意」——並不是鐵板一塊。

Plausible、Fathom、Umami、Cloudflare Web Analytics 這些工具都宣稱「不需要 cookie 同意視窗」,而在實務上,絕大多數情況確實沒問題。但反對的一派會說:ePrivacy 管的是「存取裝置上的資訊」,不是「有沒有寫 cookie」,法條裡也沒有一條寫著「匿名化就免同意」。這個爭論到今天還沒有定論,前面提到的 Article 88a 就是想把它寫死——但它現在還只是提案。

所以誠實的說法是:換成無 cookie 分析,不等於百分之百免疫,但它把風險從「幾乎確定要同意」降到「絕大多數情況不用」。對絕大多數個人網站和中小企業來說,這個交換非常划算。

順帶一提,台灣 2025 年 10 月通過的個資法修正案要設立獨立的「個人資料保護委員會」,施行日期還沒公布。方向很明確,是往國際標準靠。今天不強制,不代表三年後不強制。

三十分鐘,實際盤點你自己的網站

講完概念,來點能動手的。這段不用工程背景也做得到。

第一步:看清楚誰在寫東西

開一個無痕視窗,打開你的網站,按 F12 開開發者工具,切到 Application 分頁,左邊點 CookiesLocal Storage,重新整理頁面。

會跑出一份清單。裡面每一項你都要能回答一個問題:這是誰寫的、為了什麼

認得出來的(登入、購物車、語言)留著。認不出來的,就是你要處理的對象。

第二步:看清楚你連去了哪裡

切到 Network 分頁,重新整理,看看你的網站到底跟哪些外部網域講了話。

這一步常常會嚇到人。很多網站的經營者根本不知道自己的頁面連去了七八個第三方——字型、地圖、留言系統、客服 widget、社群分享按鈕、追蹤像素,每一個都在把訪客的 IP 送到別人的伺服器。

如果懶得自己看,也有現成的掃描工具(webbkoll、Blacklight 之類)幫你列清單。

第三步:一項一項換掉

你現在用的換成
Google Analytics 4Cloudflare Web Analytics(免費)、Plausible、Umami(可自架)
Google Fonts 直連 CDN把字型檔下載下來自己放
標準 YouTube 嵌入youtube-nocookie.com,或做成「點了才載入」的縮圖
留言、地圖、客服 widget同樣改成點擊才載入

字型那條特別值得講一下。2022 年德國慕尼黑地方法院判過一個案子:網站直接連 Google 的 CDN 載入字型,等於把訪客的 IP 傳到美國,法院判賠了 100 歐元。金額不大,但它建立了一個很清楚的原則——你以為只是載入一個字型檔,法律看到的是你把訪客的 IP 送給了第三方

自己放字型不但沒有這個問題,通常還比較快。

第四步:全部換完之後,把視窗整個拿掉

這才是終點。不是「做一個更好的同意視窗」,是不再需要同意視窗

如果你真的非掛不可,至少把它做得像個人

有些人是真的躲不掉——廣告是主要收入、或者集團有統一規範。那退一步,至少做到這幾件事:

拒絕要跟接受一樣簡單。 同一層、同樣大小、同樣顯眼。這不是我的個人偏好,法律本來就這樣要求(收回同意必須跟給予同意一樣容易)。你把拒絕藏起來,那個視窗本身就違法了。

不要預設打勾。 前面說過,45% 的網站在這一條上直接違規。

不要用「正當利益」偷渡。 使用者按了拒絕就是拒絕,不要在第二個分頁藏 137 家合作夥伴等他一個一個關。

拒絕之後,別再一直問。 Digital Omnibus 的提案版本寫了具體數字:同一個目的被拒絕後,六個月內不得再問。就算法還沒過,這個標準也值得先做。

還有一件很多人沒算過的帳:效能。

現成的同意管理平台(CMP)不是免費午餐,實測數字滿驚人的:

  • OneTrust 會塞進 200KB 以上的 JavaScript,而且某些設定下是同步載入的——意思是網站會停在那裡等它跑完。
  • CookieYes 曾被測出注入 48,000 個 DOM 節點
  • Osano 的點擊回應時間達到 275 毫秒

這些數字會直接反映在 Core Web Vitals 上:LCP 變慢(那塊擋板常常變成頁面上最大的元素)、INP 變差(大量的 DOM 操作和事件監聽器)、版面在載入時跳來跳去。

把這些串起來看,很多網站的處境其實有點荒謬:為了一個法律沒要求的東西,付出了實實在在的效能代價,而那個東西本身可能還是違法的

最後:最好的同意視窗,是不需要同意視窗

我知道這篇講了很多法條編號和年份,但整件事其實可以縮成三句話:

  1. 法律說的是「未經同意不准伸手進別人的裝置」,從來沒說「你要放一個視窗」。
  2. 那個視窗是業者為了繼續伸手而發明出來的通行證。
  3. 所以如果你的手本來就沒伸出去,你根本不需要那張通行證。

回到門口那張桌子的比喻。這十年來,整個產業都在爭論「同意書要怎麼寫才合法」、「桌子要擺多大」、「客人簽名要簽幾次」。

但一直有一個更簡單的選項擺在那裡,只是很少人選:把桌子收掉,不要翻客人的包包

對絕大多數的個人網站、部落格、公司官網來說,這個選項不但可行,而且更快、更乾淨、更省事。你不需要 CMP,不需要每年續約,不需要擔心它拖慢你的 LCP,也不需要擔心哪天被檢舉說你的拒絕鍵藏太深。

你只需要少收一點你本來就用不到的資料。

至於歐洲那邊的仗——現在球在歐洲議會手上,六個月後我們大概就會知道,那個「設定一次、全網通用」的開關到底會不會存在。老實說我不太樂觀,因為 DNT 已經死過一次了。

但這次至少有一個明顯的不同:GPC 背後站著法律,而 DNT 當年背後什麼都沒有。這個差別可能決定一切。

而在那之前,你自己的網站要不要放那塊擋板,主導權從頭到尾都在你手上。


延伸閱讀:

留言討論

esc
輸入關鍵字搜尋文章...
查看收藏 →