網站做完,我想確認一件小事:有人打錯網址的時候,會不會看到一個像樣的「找不到這一頁」。
我去問了。它說有。
後來才知道那個「有」是假的——我問的方式,剛好會被我想找的那個問題騙過去。
站台 打一個假網址的回應 錯誤頁 ────────────────────────────────────────── 母網站 404,5,422 bytes 真的有 其他 8 支 200,整份首頁 沒有
我以為發生了什麼
要確認錯誤頁在不在,最直接的方法就是去打開它。它的網址是固定的:/404.html。
我打開了,正常回應,狀態碼 200。那就是有。這個推理看起來沒有任何問題。
實際發生了什麼
2026-09-17,我對放在同一個平台上的 9 支站各丟一個不存在的網址。
只有 1 支回「找不到」。另外 8 支全部回「一切正常」,而且把整份首頁原封不動送出來。其中一支送了 653,894 bytes,而母網站那個真正的錯誤頁只有 5,422 bytes。
內容差了快 120 倍,狀態碼一模一樣,都是成功。
這代表在那 8 支站上,每一個打錯的網址都會變成一份首頁的複本。搜尋引擎爬到的話,它看到的是無限多個內容相同的網址。
官方文件寫了嗎
有寫,但不在你會主動去翻的地方。這個平台的預設行為是:找不到檔案時,回傳網站根目錄的首頁。你放一個叫 404.html 的檔案進去,行為就會改掉。
文件寫了怎麼做。沒有寫的是——在你放那個檔案之前,你所有的檢查都會通過。
你一定會踩的那個細節
問題出在 /404.html 這個網址本身。
在那 8 支站上,它也是一個不存在的檔案。所以它照樣回 200,照樣回整份首頁。我實測比對過長度:那幾支站的 /404.html 和首頁是同一個位元組數。
用來檢查毛病的方法,被毛病本身騙過去了。
正確的檢查不能看狀態碼,要比內容:
一支站的錯誤頁到底在不在,兩個數字就問得出來: 1. 抓 /一個一定不存在的假路徑/ 的內容長度 2. 抓 / 的內容長度 兩個數字一樣 → 錯誤頁不存在,平台把首頁當萬用答案 兩個數字不一樣 → 錯誤頁真的在 不要去抓 /404.html。在壞掉的站上, 那個網址本身就是假網址,它會回 200 騙過你。
順帶一提,平台本身沒做錯任何事。把找不到的路徑導回首頁,對單頁式應用程式來說是必要的預設值。它只是不知道你的站不是那一種。
站內延伸
- 想知道部署後該驗什麼 → 找工具 · 稜線自己在用的
- 想找靜態網站的部署選項 → 找工具
來源: 實測九支線上站台,2026-09-17。方法:對每支站的 /zzz-fake-path-9x7k2/ 與 / 各抓一次,比對 HTTP 狀態碼與 Content-Length。
檢查一件事在不在的時候,先問自己一個問題:如果它真的不在,我這個檢查會長什麼樣子。答不出來的話,那個檢查就還沒開始檢查任何東西。