這篇在講什麼
很多人以為加了 noindex 就等於把網頁鎖起來了。這篇用房屋安全的六層比喻,把「搜尋不到」跟「進不去」這兩件常被混在一起的事分開,每一層都對照到真實技術,說清楚它擋得住什麼、擋不住什麼。最後分開處理工作人員、長期客戶、付費學員這三種人,因為它們的正確解法完全不同。
- 有人跟你說「加 noindex 就搜尋不到了,很安全」,你隱約覺得哪裡怪。
- 你要幫學員開一區「登入才看得到講義」,但不確定怎麼做才是真的擋住。
- 你有工作人員要進後台,也有幾位長期客戶要看專屬內容,兩種人的解法你分不清楚。
- 你發過「網址很長很難猜」的私密頁,現在想知道那樣到底夠不夠。
- 你要跟客戶承諾內容安全,但你不確定能承諾到哪裡。
- 六層存取分級的判斷順序,每一層都對照真實技術,不只是比喻。
- 一組判斷:哪些內容該放哪一層,問自己一句話就知道。
- 工作人員、長期客戶、付費學員三種人的對照表,各自該用哪一招。
- 兩個你自己就能做的驗收測試,測完才知道有沒有真的擋住。
- 一段誠實的邊界說明:這套方法保證什麼、不保證什麼。
一個具體問題
我打算幫講師、顧問和商用客戶架網站。他們的需求長得很像:公開訪客要看得到講師介紹、課程介紹和公開文章;付費學員登入之後才能看到完整講義和簡報;工作人員登入之後可以進後台。一堂課大概一百位學員。
這三種人湊在一起,就會撞出一個必須先回答的問題:這一百個人、那幾個工作人員、還有路過的陌生訪客,網站要怎麼分辨他們,而且分辨錯了會怎樣。
選平台這件事我另外寫了一篇,這篇只處理「誰能看到什麼」。
- 網站放 GitHub、Vercel 還是 Cloudflare?三家免費額度、商用限制與功能差異
那篇是三家平台的角色分工、免費額度與商用條款查證,以及只付網域費就能跑起來的架構。這篇講的分級,最後會落在那篇的架構上。
能不能被找到,跟找到之後能不能進去
這是整篇最重要的一組區分,也是最容易被說反的一組。
講的是曝光。你的網址有沒有出現在 Google 搜尋結果、有沒有被 AI 摘要引用、有沒有掛在你的導覽列上。
講的是存取控制。一個人拿到網址、貼進瀏覽器之後,伺服器會不會把內容送給他。
noindex、robots.txt、隨機網址、不放 sitemap,這四招全部都只影響第一件事。它們一個字都沒有動到第二件事。具體來說:
noindex的真正作用是告訴遵守規範的搜尋引擎「請不要把這一頁放進索引」。它是一個請求,對象是爬蟲(搜尋引擎派出來自動讀取網頁的程式)。任何人直接打開這個網址,伺服器照樣把完整內容送出去。X-Robots-Tag是同一件事的 HTTP 標頭版本。HTTP 標頭是伺服器送出檔案時附帶的一組說明,訪客看不到,但爬蟲讀得到,所以它適用於 HTML 以外的檔案(例如 PDF)。作用範圍一樣,只管索引。robots.txt的真正作用是告訴爬蟲哪些路徑不要抓。它是公開檔案,任何人都可以打開「你的網域/robots.txt」看裡面寫了什麼。所以把敏感路徑寫進robots.txt,效果是反過來的:你等於公布了一份「這裡有東西」的清單。- 隨機網址能降低什麼風險:它降低「被隨機猜到」和「被搜尋到」的機率。它擋不住的是「拿到網址的人轉傳給別人」。而網址一旦離開你手上,你沒有辦法收回,因為那個網址本身就是唯一的通行證。
robots.txt 不能作為敏感資料的保護機制。正確的心智模型是:這些技巧把你的房子從地圖上抹掉,但房子的門還是開著的。六層房屋安全
我用房子來說明六個層級。每一層後面我都會接上真實的技術,因為比喻只能幫你進門,不能取代做法。
第一層:公開展示間
任何人都能找到,任何人都能進來。這是設計上就要被看到的東西。
對應的真實做法:公開網站、產出 sitemap、開放搜尋引擎索引、GitHub Pages 公開內容、公開的 Cloudflare Pages 站台。
適合放:講師介紹、課程介紹、公開文章、招生頁、聯絡方式。這一層要主動做好曝光,不要不小心把它擋掉。
第二層:從地圖上抹除的房子
房子還在,門也還開著,只是地址很難被發現。
對應的真實做法:隨機且不容易猜的網址、HTML 的 noindex、X-Robots-Tag 標頭、依需要調整 robots.txt、不放進公開 sitemap(給搜尋引擎看的網站地圖,列出你希望被收錄的所有頁面)、不掛在導覽列與書籤頁。
第三層:拉起紅線
門口拉了一條紅線,上面寫「請勿進入」。但東西已經擺在門內,而且門根本沒鎖。
對應的真實做法:用 CSS 把區塊隱藏、用 JavaScript 決定要不要顯示、在前端判斷「這個人是不是會員」、把完整講義整份寫進 HTML,再用一顆按鈕決定顯示或不顯示。
display:none 改掉,這些都是幾秒鐘的事。前端的顯示與隱藏,是體驗設計,不是存取控制。它可以拿來做「先看摘要,點開看全文」這種介面互動,不能拿來擋付費內容。
第四層:有警衛的鐵門
有人站在門口。你要先證明你是誰,警衛確認名單上有你,才會放你進去。在你通過之前,請求根本不會抵達你的網站。
對應的真實做法:Cloudflare Access、Email OTP(收一次性驗證碼)、Google 或其他身分提供者(你已經有帳號的服務,借它來證明你是誰,就是常見的「用 Google 登入」)登入、Allow policy 白名單(事先列好誰可以進來,沒列到的一律擋)、預設拒絕、Session 管理(登入之後這個狀態能維持多久)與權限撤銷。
適合:工作人員、固定合作夥伴、少量長期客戶、內部後台、審稿站、固定客戶專區。
Cloudflare Access 的免費席次上限與每人單價,還有它跟另外兩家的存取保護能力差在哪,在另一篇:網站放 GitHub、Vercel 還是 Cloudflare?三家免費額度、商用限制與功能差異
這一層有三個實務提醒,都是會出事的地方:
- 所有的備用入口都要一起保護。你的正式網域、
pages.dev或vercel.app的預設網址、原始主機的 IP、還有你的 API 端點,全部都要一起關起來。只保護正式網域,等於前門裝了鐵門,後門還開著。 - 席次是登入席次。Access 算的是通過驗證的人,公開訪客不算。不要把「免費方案的席次上限」誤解成「網站只能服務這麼多位訪客」,這兩個是完全不同的量。
- 人數規模要事先算。席次一旦被佔用,要手動移除或設定自動到期才會釋放。一百位學員全部走 Access 這條路,成本結構會跟你想的差很多。
第五層:大樓門禁加房間權限
每個人有自己的門禁卡。刷卡進大樓之後,你的卡只能開你自己那間房。買了第一堂課的人,第二堂課的門刷不開。
這一層對應的是你自己網站的會員與授權機制,Cloudflare 或 Vercel 都不會直接給你這個。要拆成兩件事:
確認這個人是誰。email 加一次性驗證碼、第三方登入、密碼,都屬於這一層。
確認這個人能看什麼。要靠課程購買紀錄與角色欄位(staff/student/customer)來判斷。
判斷流程長這樣:
- 未登入的訪客:伺服器只回傳課程介紹。完整講義的內容從頭到尾沒有離開伺服器。
- 已登入但沒買這堂課:伺服器回傳 403(代表「認得你,但這個你不能看」的狀態碼),或是一個「你還沒購買這堂課」的提示頁。
- 已登入而且已購買:伺服器確認購買紀錄之後,才把完整講義送出去。
- staff:伺服器確認 staff 權限之後,才送出後台。
第六層:房屋裡的保險箱
人進了房間,也不代表能直接把櫃子裡的東西搬走。保險箱要另外開,而且每次開都要重新確認。
對應的真實做法:R2 私有儲存空間、檔案沒有公開網址、每次下載由伺服器產生一個短效簽名網址(一條臨時的專屬連結,帶著一組會過期的通行碼,例如十分鐘後就打不開)、網址過期就失效、每一次下載都重新檢查權限、留下下載紀錄、必要時在檔案上加浮水印、隨時可以撤銷權限。
適合放:完整講義、付費教材、可下載的檔案。
為什麼要多這一層?因為第五層保護的是「頁面」,而檔案常常是另一條路。如果你的 PDF 放在一個固定的公開網址上,那頁面擋得再好,只要有人把那個 PDF 網址複製出去,就結束了。短效簽名網址讓那個連結在幾分鐘後自動失效,轉傳出去的價值就大幅下降。
Vercel Authentication 跟會員登入的差別
Deployment Protection 底下的 Vercel Authentication,擋的是「有沒有 Vercel 帳號、而且是不是這個團隊的成員」。它是給開發團隊看預覽版用的門,不是給你的付費學員用的會員系統。
Password Protection 在 Pro 上是加購項目,而且它是整站一組密碼,沒有個別身分、沒有誰買了哪堂課的概念、也沒有辦法單獨撤銷某一個人。
如果你要的是「A 學員能看第一堂、B 學員能看第一和第二堂」,這兩個功能都做不到。那需要你自己的會員與授權機制,後面第五層會講。
我的半私密網頁做法,以及它的限制
我自己有一套做法,內部叫它「半私密網頁」。這是我給它取的名字,不是業界通用詞。它長這樣:
- 使用隨機、不容易猜到的網址
- HTML 加
noindex - 加
X-Robots-Tag - 依頁面需求設定
robots.txt - 不放到公開 sitemap、書籤頁或導覽列
- 不開登入,也不開伺服器存取保護
半私密網頁適合放什麼
- 給既有合作成員看的進度頁、對齊頁
- 一次性的審稿頁、校稿頁
- 內容外流不會造成金錢或信任損失的資料
- 需要「拿到連結就能直接開,不要卡登入」的臨時交付
它的好處是真實存在的:零成本、零設定、對方不用註冊帳號、手機點開就看得到。對於「五分鐘後就要在會議上一起看」這種場景,它是對的工具。
哪些內容不該用半私密網頁裝
- 付費學員的完整講義。這是我的課程收入本體,第二層擋不住轉傳。
- 含報價、分潤、談判紀錄的內部文件。這類外流的後果是關係損失,不只是內容損失。
- 含個人資料的名單。任何有真實姓名、聯絡方式、健康或財務資訊的東西,都不該只靠網址難猜。
- 需要事後撤銷的東西。半私密網址一旦發出去就收不回,你唯一能做的是換一個網址,然後重新通知所有人。
工作人員、長期客戶、付費學員:三種人,三種解法
這三種人常常被放在同一句話裡討論,但它們的正確解法完全不同。
| 對象 | 人數規模 | 建議層級 | 為什麼 |
|---|---|---|---|
| 工作人員 | 少數、固定、你認識 | 第四層 Cloudflare Access | 名單短、變動少、不需要自己寫程式,設定一次就好 |
| 固定合作夥伴 | 少數、固定 | 第四層 Cloudflare Access | 用 Allow policy 白名單直接列 email |
| 少量長期客戶 | 個位數到數十 | 第四層 Cloudflare Access | 在席次可控範圍內,這是最省工的做法 |
| 付費學員 | 一堂課約一百人,會一直換 | 第五層自建會員加第六層私有檔案 | 人數會成長、名單一直換、而且要判斷「誰買了哪一堂」 |
為什麼付費學員不走 Access?三個理由:
- 席次會被佔滿。上完課的學員仍然佔著席次,除非你手動移除,或事先設定了自動到期。
- Access 沒有「誰買了哪一堂課」的概念。它判斷的是「這個 email 在不在允許名單上」,沒有課程與購買的關聯。
- 成本結構不對。如果每人每月要付費,一百位學員的年度成本會遠高於自建。(實際單價官方定價頁目前沒有公開,請自行向官方確認後再算。)
反過來,工作人員為什麼不自建?因為五個人的名單,寫一套會員系統的成本遠高於在後台加五個 email。
那我可以叫 AI 幫我寫嗎
可以。第五層需要的東西(登入、購買紀錄、判斷這個人能看哪些內容)是相當標準的功能,現在請 AI 寫,成本已經很低了。你不需要先變成工程師才能做這件事。
只是有三件事 AI 幫不了你,而這三件剛好是決定「會不會外流」的關鍵。
你得先把內容分堆,知道哪些要擋、擋誰、被看到會怎樣。AI 不知道哪份講義外流會影響你的收入,也不知道你跟哪個客戶簽了保密條款。
你說「登入後才顯示講義」,AI 很可能給你一個在瀏覽器裡隱藏的版本,也就是第三層。畫面看起來一樣,實際上完全擋不住。你要明確講出「這個判斷要在伺服器端做,沒通過就不要把內容送出去」。
程式跑得動,不代表擋得住。AI 不會主動告訴你它做的是第三層還是第五層,你要自己測。
兩個你自己就能做的驗收測試
不用懂程式,開個瀏覽器就能測。這兩題答對了,你才算真的做到第五層。
先登入,複製講義頁的網址。然後完全登出(或另外開一個無痕視窗),把網址貼進去。
看得到內容就是沒擋住。正確的結果是看到登入頁,或是一個「請先登入」的提示,而且原始碼裡不該找得到講義內文。
用一個已經登入、但沒有買這堂課的帳號,把同一個網址貼進去。
看得到內容就是只做了登入沒做授權。正確的結果是看到「你還沒購買這堂課」,而且一樣,原始碼裡不該有講義內文。
這套方法保證什麼,不保證什麼
我要把邊界講清楚,因為這是誠信問題。
1. 沒有身分的人拿不到完整講義。伺服器端判斷會在資料離開伺服器之前就擋下來。
2. 你可以撤銷單一個人的權限。改一列資料庫紀錄,那個人下次就進不去了。
3. 你有紀錄可以查。誰在什麼時候下載了什麼,可以留下來。
4. 檔案連結會過期。短效簽名網址轉傳出去之後,過一段時間就打不開。
已經授權的人,仍然可能截圖、錄影或轉傳。
一個人如果合法登入、合法看到了你的講義,他的眼睛看得到,他的螢幕就截得到;他的手機拍得到,他的鍵盤複製得到。市面上所有的防截圖、防右鍵、浮水印,都只能提高麻煩程度或事後追溯,沒有任何一種能真正阻止。
我建議的做法是兩件事一起做:技術上做到第五層與第六層,同時在課程頁與講義上明確寫出使用規範,讓學員知道什麼可以、什麼不可以。清楚告知本身就是一種保護,對雙方都是。
收尾 Recap
- 能不能被找到,跟找到之後能不能進去,是兩件事。noindex、robots.txt、隨機網址,只管前者。
- robots.txt 是公開檔案,把敏感路徑寫進去等於公布一份「這裡有東西」的清單。它不是保護機制。
- 隨機網址擋得住「被猜到」,擋不住「被轉傳」。網址發出去就收不回。
- 前端的顯示與隱藏是體驗設計。資料一旦送到瀏覽器,就當它已經公開。
- 六層由淺到深:公開展示間、從地圖抹除、拉紅線、有警衛的鐵門、大樓門禁加房間權限、房屋裡的保險箱。第三層是誤用示範,不是可以選的等級。
- 固定的少數人用門禁(Cloudflare Access),變動的多數人用自建會員系統。這兩種人不要用同一招。
- 第五層的關鍵字是伺服器端。同一句「擋起來」做在瀏覽器就是第三層,做在伺服器才是第五層。
- 頁面擋好了,檔案還是另一條路。講義 PDF 要走第六層的短效簽名網址。
- 寫程式可以請 AI,但決定要擋什麼跟驗收有沒有擋住,是你的工作。
- 已授權的人仍然可能截圖轉傳。技術做到第六層,剩下的靠使用規範與信任。
知道自己要哪一層之後,下一步是選平台。三家的免費額度、商用條款與價格在另一篇:網站放 GitHub、Vercel 還是 Cloudflare?三家免費額度、商用限制與功能差異
常見的坑
| 坑 | 對策 |
|---|---|
| 以為加了 noindex 就等於鎖起來了 | noindex 只是請搜尋引擎不要收錄。任何人拿到網址照樣打得開 |
| 把敏感路徑寫進 robots.txt | 那是公開檔案,等於公布清單。改成真正的存取控制 |
| 用前端 JavaScript 判斷會員狀態 | 開發者工具幾秒就繞過。判斷要放在伺服器端 |
| 只保護正式網域,忘了 pages.dev 或 vercel.app 預設網址 | 所有備用入口、原始主機與 API 都要一起關 |
| 把一百位學員全丟進 Cloudflare Access | 席次會被佔滿而且不自動釋放,也沒有「誰買了哪一堂」的概念。改用自建會員系統 |
| 以為 Revoke 就釋放席次了 | Revoke 只終止連線階段,要 Remove 才釋放 |
| 頁面擋好了就以為安全 | 講義 PDF 若放在固定公開網址,網址一被複製出去就結束了。改用短效簽名網址 |
| 叫 AI 寫完就上線,沒驗收 | 做上面那兩個測試。登出後貼網址、用沒買課的帳號貼網址,兩題都對才算數 |
| 用半私密網頁裝付費講義 | 那只是第二層,門是開著的。付費內容至少要第五層 |
| 跟客戶說百分之百防破解 | 沒有這種東西。誠實說明邊界,寫清楚使用規範 |
給自己的定位提醒
這六層不是我發明的,它是把業界已經在用的做法排成一個順序,讓不寫程式的人也能判斷自己站在哪裡。真正做資安的人分得比這細很多,也嚴謹很多。我這份的用途是幫你做決定,不是拿來當資安規格書。
如果你的內容涉及個資、醫療、財務或合約,該找的是專業的人,不是這篇文章。
想繼續聊這個
我每個月固定辦兩場免費線上講座,分享 AI 應用與知識管理的實戰做法。如果你正在幫自己或客戶決定網站要放哪裡、怎麼分級,歡迎先從社群開始。
本篇所有價格與額度為 2026 年 8 月 19 日查證結果,皆為美元、未稅。平台方案隨時可能調整,重要決策前請重新核對官方頁面。
本篇引用來源
全部為官方來源,查證日 2026-08-19。
- Cloudflare One 席次管理(席次怎麼算、Revoke 與 Remove 的差別、自動到期)
- Cloudflare Zero Trust 服務方案頁(本輪未取得每人單價與免費席次上限)
- Cloudflare R2 定價(私有檔案儲存與流量費用)
- GitHub:私密發布 Pages 需要 Enterprise Cloud
- Vercel Hobby 方案(Deployment Protection 與 Vercel Authentication 的範圍)
三家平台的完整價格與免費額度查證,在另一篇:網站放 GitHub、Vercel 還是 Cloudflare?三家免費額度、商用限制與功能差異