whoops.

HTTP 狀態碼是什麼?5 大分類、常見代碼與 SEO 影響全解析

HTTP 狀態碼分成資訊、成功、轉址與快取、請求端錯誤、伺服器端錯誤五大類,以分類找到查修方向
狀態碼是每次 HTTP 回應的結果訊號,先定位家族,再核對標頭、內容與發生範圍。

HTTP 狀態碼是伺服器在每次回應開頭回報處理結果的三位數代碼。本文拆解 5 大分類語意與 103、304、307、410、429、502、504 等常見代碼,比較 401 與 403、404 與 410 的差異,說明狀態碼對 Google 檢索與收錄的實際影響,並提供 5 種檢查方法與一套查修順序。

本頁目錄

打開 Google Search Console,報表裡跳出一排 404;工程師在群組裡回報「現在整站 502」;客服信箱收到使用者詢問,為什麼你的網站顯示無法存取。這些情境背後都是同一件事:你的網站正在用 HTTP 狀態碼跟世界對話,只是你未必聽得懂它在說什麼。

每次有人(或某支程式)向網站請求一個網址,伺服器都會在回應的開頭回報一組三位數字,這組數字就是 HTTP 狀態碼(HTTP Status Code),負責交代這次請求的下場:內容順利送出了、網址搬到新家、訪客沒有權限,或者伺服器自己出了狀況。這套代碼的核心語意主要由 HTTP 通訊協定標準 RFC 9110 定義,部分代碼另有後續擴充規範,也存在服務商自訂的成員,MDN 的 HTTP 狀態碼總覽依五個號碼區段把全部代碼整理成可查詢的清單,是工程師與 SEO 工作者共同依賴的參考來源。

讀懂狀態碼之所以重要,在於所有造訪你網站的程式都依賴它做決定。瀏覽器看到 301 會自動換網址再請求一次;搜尋引擎檢索器看到 404 會把頁面從索引移除;快取系統看到 304 會沿用本地副本;API 串接的對象看到 429 會知道要放慢腳步。同一套數字,瀏覽器看得懂,Googlebot 看得懂,你委託的技術團隊也看得懂。換句話說,狀態碼是網站對外溝通的共通語言,設定錯了,等於對所有訪客同時傳達錯誤訊息。

接下來先走完一次請求的完整旅程,說明狀態碼在回應裡的位置,再逐一拆解五大分類的語意與每個家族裡真正會遇到的代碼,包括多數入門文章不會展開的 103、204、304、307、410、429、502、504,以及 Cloudflare 體系特有的 520 系列。後半段聚焦兩件實務的事:狀態碼如何影響 Google 的檢索與收錄,以及五種檢查方法與一套查修順序,讓你下次在報表裡看到異常數字時,知道從哪裡下手。

這套知識的適用對象比想像中廣。行銷人員需要在流量下滑時判斷問題屬於內容還是技術;接案顧問需要在驗收網站時快速體檢;寫程式的人需要理解自己設定的規則會對搜尋引擎產生什麼副作用;自己架站的創業者更需要省下往返溝通的時間,第一時間看懂主機與外掛丟出來的訊號。狀態碼剛好停在技術與行銷的交界上,花一次時間把它讀通,日後每一份報表、每一次事故都會用得上。

狀態碼從哪裡來:一次請求的完整旅程

在瀏覽器網址列輸入一個網址並按下 Enter,背後展開的是一連串標準化步驟。瀏覽器先透過 DNS 把網址翻譯成伺服器的 IP 位址,接著與伺服器建立連線,然後送出 HTTP 請求。請求會指定要使用的 HTTP 方法(取得頁面用 GET,送出表單用 POST)與要存取的路徑,並帶上一組請求標頭,例如使用者代理、可接受的內容格式與快取狀態;依方法與用途不同,還可能附帶內容本體,例如表單要送出的資料。

伺服器收到請求、處理完之後回傳 HTTP 回應。回應同樣有三個部分,而狀態碼就住在第一行,叫做狀態列。打開瀏覽器開發者工具的 Network 面板點開任何一個請求,會看到類似「HTTP/1.1 200 OK」或「HTTP/1.1 301」的狀態列(HTTP/2 之後改用 :status 欄位承載同一組數字,面板上一樣看得到),後面才接著內容類型、快取控制等回應標頭,以及頁面本體。狀態碼是伺服器對這次請求的總結答覆,標頭是補充說明,內容則是貨物本體。

有個容易被忽略的事實:載入一般網頁,通常會發出多個請求。HTML 主文件是一個請求,頁面上的每一張圖片、每一支 CSS 與 JavaScript 檔案、每一個背景資料呼叫,都是獨立的請求,各自拿到自己的狀態碼。頁面看起來半殘,圖片全破圖,常常代表主文件回 200 而部分資源回 404 或 500。遇到重新導向時,每一跳也是一個完整的請求與回應,瀏覽器拿到 301 之後自動改請求 Location 標頭裡的新網址,於是一條轉址鏈會產生一整串狀態碼,而不是一個。

HTML、圖片與程式檔各自送出獨立請求,因此主文件成功時圖片仍可能回傳404
示例中的 HTML 回 200、圖片回 404,說明畫面部分失效時,必須檢查各資源的回應,不能只看主文件。

請求方法與狀態碼之間也有對應關係。送出 POST 建立新資料時,201 表示資源已建立,回應可附上建立的結果;204 表示成功但回應不附內容。用 GET 去打一個只接受 POST 的端點,伺服器會回 405,告訴你方法用錯了,資源本身存在。理解這層對應,看到狀態碼時就能多問一句:這個請求當初是用什麼方法送出去的。

還需要先破除一個觀念:狀態碼不等於錯誤訊息。2xx 表達成功,3xx 表達資源換位置或不必重傳,這些都是正常溝通的一部分,瀏覽器時時刻刻都在處理 200 與 304 而不會顯示任何異常。會讓訪客吃閉門羹的主要是 4 開頭與 5 開頭,不過連它們也未必代表網站壞掉,401 就只是提醒訪客先登入。把狀態碼當成體檢報告上的數值而非警報器,判斷才不會失準。

五大分類:先把家族語意記起來

狀態碼的第一個數字決定它屬於哪個家族,五個家族各自表達一種大方向。與其硬背幾十個代碼,先記住五句話:1xx 是還在講話,2xx 是事情成了,3xx 是換地方或不必重傳,4xx 是請求端有問題,5xx 是伺服器端有問題。日後看到任何陌生的碼,看開頭數字就能立刻定位問題出現在誰身上,再往下查細項。

左右捲動檢視完整表格

分類號碼區間家族語意常見代碼站長的第一反應
資訊回應100 至 199請求已收到,處理仍在進行100、103通常無需動作,交給瀏覽器與伺服器處理
成功回應200 至 299請求已成功處理200、201、204、206確認回傳內容本身正確即可
重新導向300 至 399資源換位置,或快取仍有效301、302、304、307、308檢查 Location 是否指向正確目的地
用戶端錯誤400 至 499請求本身有問題或無權存取400、401、403、404、410、429確認網址、權限與請求格式是否正確
伺服器錯誤500 至 599伺服器無法完成有效回應500、502、503、504查主機、應用程式與上游服務狀態

1xx 家族平常幾乎不會出現在一般網頁瀏覽的畫面上,但它的兩個成員值得認識。100 Continue 搭配請求裡的 Expect 標頭運作,讓用戶端先探詢伺服器是否準備好接收大量內容,避免白傳一大包資料過去卻被拒收。103 Early Hints 則更積極:伺服器在正式回應準備好之前,先送出提示,讓瀏覽器提早預先載入 CSS 或預先建立對第三方網域的連線,縮短最終頁面的可互動時間。它的實作通常搭配 Link 標頭,主流瀏覽器與部分內容傳遞網路已經支援,對講究效能的網站來說,103 是值得與工程團隊討論的加速選項,特別適合首頁與關鍵著陸頁這種資源多、等待時間敏感的頁面。

號碼區段之外還有一個補充觀念:並非所有出現過的狀態碼都寫在標準裡。實務上會遇到一些伺服器或服務自行定義的代碼,例如內部系統的 599,或後面會談到的 Cloudflare 520 系列。MDN 在總覽裡特別提醒,遇到清單上沒有的回應時,它可能是伺服器自行定義的非標準狀態碼,查閱該服務的文件往往比翻 RFC 更快找到答案。

2xx 家族:成功也有四種面貌

200 OK 是最常見的成功回應,代表伺服器順利處理並回傳內容;對一般的頁面請求來說,瀏覽器拿到的就是完整頁面,實際內容仍依請求方法與資源種類而異。對 SEO 而言 200 是理想狀態,但 Google 的文件說得很明白:200 回應的內容會進入後續處理,但不保證一定被收錄。收錄與否另有一套判斷,內容品質、標準網址的選擇都會介入,這點在後面的 SEO 段落會再展開。

201 Created 多出現在 API 與表單處理的場景,表示請求成功了,而且伺服器因此建立了新資源,例如新增一筆會員資料或一篇文章。204 No Content 同樣表達成功,但回應裡沒有內容本體,典型的使用時機是刪除完成或更新完成,用戶端只需要知道事情辦好了,不需要再收一份文件。這兩個碼在網頁前台很少直接遇到,卻是串接後台與第三方服務時判讀邏輯的重要依據。Google 的檢索說明對 204 另有一個提醒:網頁型網址若回 204,檢索器拿不到任何可處理的內容,等於空手而歸,頁面自然無法被收錄。

206 Partial Content 則與大檔案下載有關。瀏覽器或續傳工具以 Range 標頭請求資源的一部分,伺服器同意後回 206,只送出指定的區段。範圍請求能支應影片進度跳轉、PDF 邊載入邊顯示前幾頁這類功能;線上串流也常改用獨立的媒體分段來實作,206 並非唯一解,卻是 2xx 家族裡最常被忽略的一員。

3xx 家族:重新導向與快取驗證混在同一屋簷下

3xx 是最容易被誤解的一族,因為它同時容納兩種性質完全不同的回應。一種是重新導向,告訴用戶端資源換位置了,請改去新網址拿;另一種是快取驗證,告訴用戶端你手上的副本還能用,不必重傳。兩者共用 3 開頭這個家族,但行為與應對方式天差地遠,混為一談會導致錯誤的技術決策。

轉址軸:301、302、303、307、308

301 Moved Permanently 表達永久搬遷,302 Found 表達暫時換位置。對搜尋引擎來說,這兩個碼是理解網址關係的重要訊號,永久與暫時的差異會影響標準網址的判斷與權重移轉的方向。挑選原則、常見陷阱與上線後的驗證清單,可以搭配轉址選 301 或 302 的完整判斷流程一起看,這裡先把焦點放在家族內部的差異。

307 Temporary Redirect 與 308 Permanent Redirect 是相對年輕的成員,存在的目的只有一個:補上 301 與 302 在實作上長年累積的歷史包袱。301 與 302 在規格上容許用戶端基於歷史相容性,把 POST 換成 GET 重新請求,於是 POST 過去的資料在轉址後可能就此消失。307 與 308 從規格層面把這件事說死:MDN 對 307 的說明寫明重新導向時沿用原本的請求方法與內容本體,308 對永久版做同樣的保證。涉及表單送出或 API 呼叫的轉址情境,改用 307 或 308 能避免方法被偷換的隱患。

家族裡還有一個扮演相反角色的成員。303 See Other 表達「請去另一個網址用 GET 看結果」,適合表單送出後導向確認頁的情境,設計上就是要把方法換成 GET,避免重新整理時重複送出資料。整理成一句話:要保留方法用 307 或 308,要換成 GET 用 303,301 與 302 則留給單純的網址搬移與暫時跳轉。

快取軸:304 不是轉址

304 Not Modified 平時不會被使用者看見,常見於快取需要重新驗證的請求。流程是這樣:瀏覽器曾經載入過某個資源,本地留有快取副本;快取仍新鮮時可以直接取用,等到需要驗證時,才會帶著 If-None-Match 或 If-Modified-Since 標頭去問伺服器,我的副本還有效嗎。若資源沒變,伺服器回 304,不帶內容本體,瀏覽器直接沿用快取。MDN 對 304 的說明把它歸在重新導向類別之下,同時也說明它屬於快取驗證回應,功能是省流量與加速,跟「頁面搬家」沒有任何關係。

對站長的實際意義有兩個。第一,在開發者工具裡看到大量 304 不必緊張,那是快取正常運作的痕跡,開發時若強制停用快取重新載入,原本回 304 的請求就會改為完整的 200 回應。第二,304 依賴回應標頭裡的快取控制設定,例如 ETag 與 Last-Modified,設定得當能明顯降低重複流量,這與頁面載入速度的優化方向一致,值得與前述的 103 Early Hints 一併納入效能規劃。

301透過新網址取得資源;304表示快取副本仍有效,不需要重新傳送內容
301 與 304 同屬 3xx,前者請求新網址,後者沿用有效快取;304 並不是頁面搬家。

4xx 家族:問題多半出在請求這一端

4 開頭的碼向請求端喊話:你的請求有問題,或你沒有資格拿到這份資源。400 Bad Request 是最泛用的拒絕,請求格式錯誤、參數缺漏都可能觸發。408 Request Timeout 是用戶端送請求太慢,伺服器等不及。409 Conflict 表示請求與資源現況衝突,同時編輯同一筆資料就是典型例子,屬於正常的並行衝突通報。這三個碼背後的原因不同:400 多半指向格式或參數有誤,408 常與網路延遲或連線閒置有關,409 則要看資源狀態;在前台遇到時,先檢查產生請求的連結與參數。

401 與 403:驗證與授權是兩道不同的門

401 Unauthorized 與 403 Forbidden 是最常被混為一談的一組。401 Unauthorized 表達的是身分問題:伺服器要求你先通過驗證,可能因為你還沒出示憑證,或出示的憑證無效,而且依規格必須附上 WWW-Authenticate 標頭說明驗證方式。403 Forbidden 表達的則是拒絕執行:伺服器看得懂這個請求,卻基於權限不足、IP 限制或防護規則直接說不,而且未必經過身分驗證這一關,重新登入常常也改變不了結果。

用一棟辦公大樓來比喻,401 是櫃檯請你先出示識別證;403 是對方明白你要什麼之後直接搖頭,原因可能出在你的單位不在名單上、這個樓層不對外,或者警衛對你的來歷有疑慮。查修方向因此完全不同:滿頁 401 先檢查登入狀態與憑證傳遞,滿頁 403 則檢查權限設定、IP 限制與防護規則。有一種 403 特別值得 SEO 工作者警戒:網站應用層防火牆把合法爬蟲誤認為攻擊流量而整批擋下,症狀是搜尋流量無預警下滑,判斷與處理方式可以參考WAF 防火牆的運作原理與爬蟲誤擋排查。

404 與 410:一個是沒找到,一個是不再回來

404 Not Found 是全世界最出名的狀態碼,代表伺服器找不到請求的資源。它可能是網址打錯、頁面被刪除,也可能是內部連結指向了不存在的路徑。410 Gone 語意更重:這份資源已經永久移除,而且預期不會恢復。MDN 對 410 的說明建議,唯有確定資源永遠不回來時才使用 410,若不確定是暫時還是永久,就回 404。

很多站長直覺以為 410 會讓 Google 更快把頁面從索引刪掉,於是把大量 404 改成 410。實際情況需要回到官方文件檢視:Google 對檢索狀態碼的說明把 404 與 410 放在同一組處理邏輯裡,同樣是告知索引系統內容不存在、已收錄的頁面會被移除、這些網址的再檢索頻率逐漸下降,並沒有明文給出不同的處理時程。410 的真正價值在於 HTTP 語意層:對其他搜尋引擎、下載工具與自動化程式明確表達永久移除,讓它們不必反覆回來確認。若目標只是清理 Google 索引,404 已經足夠。

面對大量 404,與其急著全部轉址,更該先分類處理:有對應新頁面的,設定 301 指向語意最接近的新網址;確定永久消失的,讓它誠實回 404 或 410;至於造訪者真的會撞到的 404 頁面,把它設計成一條留客動線,引導搜尋或回到熱門分類,做法可以參考404 頁面設計的實作技巧。轉址不是 404 的唯一解,有時讓不存在的事情誠實地不存在,對網站反而更健康。

429:請求太多了

429 Too Many Requests 表達用戶端在一段時間內送出過多請求,觸發了速率限制,這是 API 服務與爬蟲攻擊防護的標準回應。回應裡可以附上 Retry-After 標頭,告知對方多久之後再試。對經營 API 或提供資料介面的網站來說,429 是保護伺服器的必要機制;對呼叫別人服務的開發者來說,收到 429 代表需要處理退避與重試邏輯。

SEO 工作者需要特別記住一個反直覺的事實:Google 把 429 視為伺服器錯誤來處理。官方檢索說明寫得直接,檢索器收到 429 會解讀為伺服器過載,並且像對待 5xx 一樣暫時放慢檢索。也就是說,如果你用速率限制規則把 Googlebot 擋成 429,在 Google 眼中網站等於故障中,檢索頻率會跟著下降。要長期控制檢索量,正確的工具是 robots.txt;Search Console 曾經提供的檢索頻率設定已在 2024 年 1 月移除,Googlebot 現在依伺服器回應自動調整速度。另一個容易混淆的點:Google 現行指引確實允許在伺服器過載時,以 429 或 503 短期回應(數小時到一兩天)為整個主機降載,這與防護規則無意間把 Googlebot 擋成 429 是兩回事,後者會讓 Google 以為網站出狀況而放慢檢索。

5xx 家族:伺服器端的故障與閘道瓶頸

5 開頭的碼向伺服器(以及站在伺服器前面的整個服務鏈)喊話:問題在我們這邊。500 Internal Server Error 是最泛用的一種,伺服器遇到預期外的狀況而無法完成請求,程式錯誤、資料庫連不上、設定檔寫錯都可能以 500 的面貌出現。它是一個症狀描述,真正的病因要往應用程式日誌裡找。

追蹤 500 有幾個實用的縮小範圍法。先確認是全站或特定路徑,只有某類頁面掛掉通常指向該功能的外掛或程式模組;再對照錯誤出現的時間與最近的變更紀錄,更新、部署與設定調整是三大常見觸發點;有辦法重現時,在測試環境打開除錯模式,讓錯誤訊息完整現形。使用 WordPress 的網站另有兩個高頻原因值得優先檢查:PHP 版本與外掛需求不相容、佈景主題檔案出現語法錯誤,兩者通常都能在錯誤日誌裡找到直接線索。

502 與 504:閘道家族的兩種故障

現代網站的架構裡,瀏覽器面對的通常不是網站主機本身,而是內容傳遞網路或負載平衡器這類代理層,代理層再回頭向源站伺服器要資料。502 Bad Gateway 與 504 Gateway Timeout 都是在這段代理與源站的對話中出問題:502 代表代理收到上游回應,但那份回應無法理解,或者上游根本拒絕了連線;504 代表上游在期限內沒有回應,代理等不到答案只好放棄。

兩者的查修方向不同。502 常見原因是源站程式崩潰、回傳格式錯誤,或源站主動拒絕代理的連線;504 則多半是源站太慢,資料庫查詢卡住、外部服務延遲、流量瞬間暴增都會讓回應時間超過閘道上限。看到 504 先問應用程式哪個環節變慢了,看到 502 先問源站還活著嗎。整站 502 或 504 期間,對外呈現的狀態就是服務不可用,對檢索與轉換都是實打實的傷害。

代理向源站請求時,502表示上游回應無效等問題,504表示未在期限內等到回應
這是代理與源站互動的概念示意。看到 502 應檢查連線與上游回應,504 則追查超時發生在哪一段。

503:維護期間的正確答案

503 Service Unavailable 表達伺服器暫時無法提供服務,常見原因正是計畫性維護或瞬間過載。MDN 對 503 的說明給出兩個重要建議:這個碼只用於暫時性的狀況,並且盡量在 Retry-After 標頭註明預計恢復時間,同時搭配一頁清楚說明狀況的友善頁面。對搜尋引擎而言,503 傳達的是「現在休息,晚點再來」,搭配 Google 對 5xx 家族放慢檢索的行為,短暫維護通常不會造成收錄損失。

實務上要避免兩種常見的錯誤做法。一是維護期間把所有頁面 302 導向首頁,這會讓檢索器與使用者都拿到語意不合的內容,比誠實回 503 更傷;二是讓 503 無限期持續,Google 的說明指出,長期回傳伺服器錯誤的網址最終會從索引中移除。整個網站都無法提供服務時,計畫性維護的正確組合是:深夜低流量時段、全站 503、Retry-After 標頭、一頁清楚的維護說明,結束後恢復正常回應,檢索節奏會自然回來;若只是部分功能維護,把 503 限定在受影響的資源即可。

520 到 524:內容傳遞網路自訂的代碼

如果你的網站放在 Cloudflare 這類內容傳遞網路後面,報表裡可能出現標準裡不存在的 5 開頭代碼。520 代表源站回傳了未知錯誤;521 代表源站主機掛了或拒絕連線;522 是代理與源站之間的 TCP 連線逾時;523 是源站所在的網路不可達;524 則是連線建立了、源站卻在期限內沒有回完 HTTP 回應。Cloudflare 的 5XX 錯誤疑難排解文件對每個代碼都有專頁說明,出現時先對照文件定位環節,再往源端或網路端排查。

這組代碼存在的意義,是把「代理與源站之間發生了什麼」講得比標準 5xx 更細。對站長的價值在於快速分工:521 與 523 指向源站主機與所在網路,先找主機商;522 偏向連線層,檢查源站防火牆是否擋了代理的 IP 段、網路與主機負載;524 是連線建立後等不到回應,往應用程式與資料庫的回應速度查;520 需要進一步看源站回傳的原始內容。讀懂這組非標準碼,等於多了一份代理層視角的診斷線索。

常見狀態碼對照總表

把前述家族整理成一張可收藏的對照表。語意欄力求口語,處理欄給站長可直接行動的方向,遇到報表異常時先查表定位,再回頭讀對應家族的細節。

左右捲動檢視完整表格

狀態碼名稱白話語意站長該做的事
100Continue可以繼續送資料無需處理,屬協定層溝通
103Early Hints先給提示,正式回應稍後到可與工程師評估用於預先載入資源
200OK成功回傳內容確認內容正確即可
201Created成功而且建立了新資源API 場景確認資料落地
204No Content成功但沒有內容頁面型 URL 出現時檢查是否誤用
206Partial Content只回傳資源的一部分正常機制,支援續傳與影片拖曳
301Moved Permanently永久搬到新網址確認指向正確,避免鏈狀轉址
302Found暫時換位置確認暫時性質成立,別久放
303See Other請改用 GET 去看結果表單送出後導向確認頁的標準做法
304Not Modified快取副本仍有效屬快取驗證,非轉址,無需緊張
307Temporary Redirect暫時轉址且保留請求方法需保留請求方法的表單與 API 轉址適用
308Permanent Redirect永久轉址且保留請求方法API 與表單的永久搬遷首選
400Bad Request請求格式有誤檢查產生請求的連結或程式碼
401Unauthorized先通過身分驗證檢查登入狀態與憑證
403Forbidden理解請求但拒絕執行檢查權限、IP 與防護規則
404Not Found找不到這份資源分類處理:轉址、修連結或保留
405Method Not Allowed方法用錯了確認請求方法與端點定義
410Gone永久移除且不會回來確定永不恢復才使用
429Too Many Requests請求太頻繁被限流檢查限流規則是否誤傷合法爬蟲
500Internal Server Error伺服器內部出錯查應用程式日誌找真正病因
502Bad Gateway上游回應無效確認源站存活與回應格式
503Service Unavailable暫時無法提供服務維護期搭配 Retry-After 使用
504Gateway Timeout上游回應逾時找讓源站變慢的環節
521 到 524CDN 自訂碼代理與源站之間的細部故障對照 CDN 文件定位是主機、網路還是效能

狀態碼怎麼影響 SEO 與檢索

Soft 404:回 200 的假成功

比 404 更難纏的,是一種偽裝成成功的失敗。站內搜尋把打錯的關鍵字帶到一頁「沒有符合結果」,系統把停售商品導向內容毫不相干的促銷頁,這類網址回的是 200,訪客看到柔和的訊息,機器卻把它當成一般頁面來讀。先把界線畫清楚:把下架商品轉到仍有實質內容的相關分類頁,通常屬於合理轉址,未必構成問題;真正的判定標準在回應內容本身。Google 的對策正是看內容而不只看數字:官方對檢索狀態碼的說明提到,當回應內容是空頁面或錯誤訊息時,Search Console 會以軟性 404 標記這個網址。代價有兩層:它以成功回應的身分占用檢索資源;Search Console 雖然會以軟性 404 這個類別把它點名,它卻不會被計入一般的 404 統計,不熟悉報表的人很容易漏看。讓不存在的頁面誠實回 404,確定永不回來的再升級成 410,帳目才會乾淨。

HTTP 200成功回應包住找不到內容的頁面,搜尋引擎仍可能依內容判定為軟性404
軟性 404 要核對回應內容。不存在的頁面應回傳適合的狀態碼,不能用 200 或無關轉址掩蓋。

轉址鏈的上限與內容歸屬

重新導向鏈不是無限延伸的。同一份 Google 說明寫明,檢索器預設最多跟隨十次重新導向跳躍,超過之後就放棄,而 Search Console 對失敗的轉址會回報重新導向錯誤。更值得留意的是內容歸屬規則:轉址過程中來自原始網址的任何內容都會被忽略,Google 處理的是最終目標網址的內容。這代表兩件事:鏈狀轉址要收斂成一跳,中間頁面寫了什麼補救文字都救不回來;改版時的網址對應表要一次規劃到位,疊床架屋的接力轉址會把檢索預算耗在旅途上。搬遷規劃的完整風險清單,可以參考網站搬家與改版的 SEO 風險控制。

檢索頻率怎麼被調節

Google 文件對各家族的檢索行為有清楚交代。5xx 與 429 會促使檢索器暫時放慢腳步,放慢的幅度與回傳錯誤的網址數量成正比;已收錄的網址在錯誤持續很久之後終究會從索引移除,等伺服器恢復正常回應,檢索頻率會逐步回升。4xx 家族除了 429 之外,不會像 5xx 那樣壓低整個網站的檢索速率,官方也明說 401 與 403 不該拿來限制檢索;要長期控制檢索量走 robots.txt,伺服器真的過載時,現行指引允許以 429 或 503 短期為整個主機降載。理解這組規則,就能看懂為什麼主機不穩的網站會出現收錄量緩慢下滑的曲線。

換個角度想,檢索頻率本身就是一種資源帳本。搜尋引擎分配給每個網站的檢索量有限,花在追轉址鏈、反覆檢索軟性 404、等待逾時上的次數,全部都記在同一本帳上;至於誠實回 404 或 410 的已移除網址,Google 在檢索迷思的說明裡講得直接,一般 4xx 不會浪費檢索預算。把狀態碼照顧好,等於把帳本上真正的浪費刪掉,讓檢索資源集中在需要被收錄與更新的頁面上。這也是為什麼大型網站特別在意轉址鏈收斂與軟性 404 治理,規模越大,帳本上的每一筆浪費都被放大。

200 只拿到入場券

回到最容易被誤讀的一件事:全站回 200 不等於 SEO 健康檢查過關。狀態碼負責的是「能不能被順利讀取」,收錄與排名屬於下一關,由內容品質、重複內容的處理與標準網址訊號共同決定。狀態碼層面的正確,是必要條件而非充分條件。搜尋引擎分配給一個網站的檢索資源有限,想把這份資源花在刀口上,可以延伸閱讀爬取預算的概念與優化策略,把檢索、索引與網站結構放到同一張地圖上檢視。

五種檢查方法:從單頁到全站

命令列:一支指令問到底

伺服器怎麼回應不帶瀏覽器渲染的原始請求,用命令列最誠實。在終端機輸入這兩行指令,把網址換成要查的頁面:

curl -I https://example.com/your-slug
curl -sS -D - -o /dev/null https://example.com/your-slug

第一行指令帶 -I,送出的是 HEAD 請求,只取標頭不取內容,輕量快速,但少數伺服器對 HEAD 與 GET 的行為不同;遇到這種情況改用第二行,照常送 GET、傾印回應標頭、捨棄內容本體。回應的第一行就是狀態列,接著是完整標頭;查轉址時看 Location 指向哪裡,對新網址重跑一次,重複到落點為止,手動走完一條轉址鏈。這個方法預設不帶瀏覽器的 Cookie 與本地快取,看到的是接近陌生訪客的第一手答覆,工程師與 SEO 溝通規格時,指令輸出比截圖更沒有爭議。

開發者工具:看見單頁真相

查單一頁面的狀態碼,最快的工具就在瀏覽器裡。開啟 Chrome 開發者工具的 Network 面板,重新載入頁面,清單裡每個請求都帶著狀態碼欄位,點開主文件可以看到狀態列、回應標頭與轉址過程。面板設定裡勾選保留記錄,跨頁面的請求紀錄才會留住,觀察登入流程或結帳流程時特別好用。欄位太多時可以先學一個習慣:優先看 4xx、5xx,以及顯示 failed 或 blocked 的失敗請求,再依需要核對轉址鏈與 200 回應的內容。開發者工具還能做哪些 SEO 層面的檢查,F12 的 SEO 實戰用法有完整展開。

線上檢查工具:批次處理大量網址

改版之後要驗證幾百條網址的落點,逐條手查不切實際,這時用得上批次檢查工具。把從 sitemap 或轉址對應表整理出來的網址清單貼進批次狀態碼檢查工具 httpstatus.io,逐列觀察每個網址跟隨轉址後停在哪裡、帶什麼狀態碼、回了哪些標頭,等於把轉址對應表的驗收整批做完。使用節奏建議是:先抽一小段樣本確認規則無誤,再跑全量清單,清單龐大時分批進行,輸出留檔作為上線紀錄,日後有爭議時直接調出當時的落點。

Search Console:搜尋引擎親口告訴你

前三種方法看到的是你主動查詢的結果,Search Console 看到的是 Google 檢索視角的統計。網頁索引報表把未收錄原因分門別類,包括找不到(404)、軟性 404、伺服器錯誤(5xx)與重新導向錯誤,等於 Google 把檢索時撞到的狀態碼問題整理成報表送到你面前。單一網址的即時測試則能確認頁面當下是否可存取、具備可索引條件;實際收錄與否,要看網址檢查裡的 Google 索引資料。報表欄位怎麼讀、異常怎麼分級處理,網頁索引報表的完整解讀有逐項說明。

伺服器存取記錄:全站的最終真相

前述方法各有取樣範圍,想把請求看得完整,需要整合伺服器存取記錄與 CDN、代理層的記錄;源站日誌只記得到達源站的那一段,快取命中與邊緣轉址要往代理層的記錄找。把 log 檔拉出來統計各狀態碼的數量與分布,能看到哪些 URL 最常被請求、哪些路徑集中回 404、5xx 從什麼時間點開始暴增,也能看出特定用戶端的行為差異。這是技術 SEO 診斷裡視野最完整的一層,從檢索預算的消耗到錯誤的時間序都能對上,做法與分析角度整理在技術 SEO 指南的日誌分析章節。

遇到錯誤碼的查修順序

工具齊備之後,剩下的是紀律。看到異常狀態碼時照著一套固定順序走,能避免在錯誤的樓層找鑰匙。

  • 先分類:看開頭數字確定問題屬於請求端、伺服器端或重新導向家族,先把查修範圍縮小。
  • 讀標頭:Location 指向哪裡、Retry-After 說了什麼、WWW-Authenticate 要求什麼,標頭往往比狀態碼本身更接近病因。
  • 定範圍:單頁還是全站、特定目錄還是隨機分布,用存取記錄或批次工具確認,範圍決定了要找的東西。
  • 看時間:錯誤從什麼時間點開始,對照部署紀錄、主機商公告與規則變更,因果關係通常就浮出來了。
  • 分層查:從瀏覽器快取、內容傳遞網路、負載平衡、源站主機到應用程式與資料庫,逐層確認回應是在哪一環變壞的。
  • 修後驗:修復完成後用單頁檢查、批次抽查與 Search Console 檢查報表三種方式複核,確認搜尋引擎視角也恢復正常。
  • 留紀錄:把範圍、原因、修復方式與驗證結果寫進事件紀錄,下一次同樣的數字再出現時,答案已經在手上。

這套順序的精神只有一句話:讓證據走在猜測前面。跳過定範圍與看時間這兩步,查修很容易變成憑印象改設定,結果原始狀態被覆蓋,線索一起消失。照順序走一遍有助於縮小範圍、避免誤改,也讓你與主機商、開發團隊溝通時手上隨時有具體事實。

三個排查情境

以下三個情境是業界常見劇本的整理,用來示範從症狀回推原因的思路,並非特定網站的實測紀錄;每個情境結尾列出的事項,就是修復後值得回頭驗收的指標。

案例一:改版後的接力轉址

一家內容網站歷經兩次改版,網址結構各換過一次。檢查時發現最舊的一批網址是這樣走的:舊網址 301 到第一次改版的中繼網址,中繼網址再 301 到第二次改版的位置,部分路徑甚至疊了四跳。表面上每個網址都有去處,實際上每一跳都是完整的請求與回應,多跳的接力不只拉長訪客的等待,也讓每一次檢索都得繞過好幾站才拿得到內容,檢索預算就這樣消耗在旅途中。處理方式是把所有歷代網址直接對應到最終位置,一跳到底,並用批次工具驗收全部清單的落點。收斂之後值得回頭驗收兩件事:批次抽查歷代網址是否都一跳到底,以及 Search Console 裡的重新導向錯誤是否不再增加。這個情境的教訓很簡單:轉址對應表要維護「最終位置」,而非「下一站」。團隊事後把對應表併入版本控管,之後每次改版的網址變更都先過一輪檢查,接力轉址再也沒有重新出現。

案例二:整週流量下滑的元兇是 403

某電商的搜尋流量連續一週下滑,網站本身開起來一切正常,主機商也表示沒有異常。轉而查存取記錄才發現,大量來自搜尋引擎爬蟲的請求收到 403,時間點與資安規則更新吻合:新的防護規則把某段 IP 範圍與高頻請求特徵列入拒絕名單,合法檢索器剛好被掃到。對一般訪客而言網站毫髮無傷,只有機器視角的網站呈現半關閉狀態,而流量下滑是唯一的對外症狀。處理方式是驗證爬蟲身分後,把已驗證的檢索器加入規則例外,並在防護後台設定警示,爬蟲命中拒絕規則時主動通知。這類問題的難處在於症狀出現在行銷報表,病因卻住在資安設定裡,兩邊的語言不通,狀態碼正是中間的翻譯官。

案例三:把維護期做對的 503

一個交易平台需要在促銷檔期前升級資料庫,預估停機九十分鐘。工程團隊沒有把網站關掉,也沒有把流量導向首頁,而是在負載平衡器上設定全站回 503,附上 Retry-After 標頭註明預計恢復時間,並準備一頁簡短的維護說明。維護結束後值得回頭驗收:網站是否不再持續回傳伺服器錯誤,檢索統計是否逐步恢復原本的節奏。同樣的停機,若換成錯誤頁導首頁或無限期的 502,劇本就會往收錄流失的方向走。差別不在停機本身,而在狀態碼傳達的語意:告訴機器晚點再來,機器就會晚點再來。

把狀態碼當成網站的體檢數值

狀態碼的價值,在於它是整條技術鏈上唯一共通的語言。瀏覽器、搜尋引擎、內容傳遞網路、主機與應用程式,每一環都用同一套三位數字回報狀況,讀懂它等於同時拿到所有環節的第一手陳述。你不需要背下整張代碼表,真正要用到的知識可以收斂成三件事:五個家族的語意、Location 與 Retry-After 這兩個標頭的線索、以及一套固定的查修順序。

把狀態碼檢查納入日常節奏,比出事再查更省力。改版與搬遷前先備妥網址對應表,上線後用批次工具驗收落點;每季打開網頁索引報表,看 Google 撞到了哪些 4xx 與 5xx;主機異常當下,先查存取記錄確定範圍再分層檢查。數字本身不嚇人,看不懂數字才會讓小問題長成大事故。從今天起,把報表裡每一個狀態碼都當成網站對你說的一句話,學會聽,它就會告訴你下一步該往哪裡走。

常見問題

HTTP 狀態碼和錯誤碼是同一件事嗎?
狀態碼涵蓋的範圍比錯誤碼大。HTTP 狀態碼是伺服器對每次請求的總結答覆,2xx 表達成功、3xx 表達轉址或快取有效,這些都屬於正常溝通,並非錯誤;只有 4 開頭與 5 開頭的代碼才代表請求端或伺服器端出了狀況。把狀態碼全部當成錯誤訊息看,會在報表裡看到大量 200 與 304 時誤判網站有問題。
頁面回 200 就代表會被 Google 收錄嗎?
不一定。Google 的說明寫明 200 回應的內容會進入後續處理,收錄與否另由內容品質與標準網址訊號決定。還要留意反向陷阱:頁面明明不存在卻回 200 的空頁面或錯誤訊息頁,會被 Search Console 標記為軟性 404,等於用成功的外皮包住失敗的內容,浪費檢索資源。
網站有很多 404,會拖累整站排名嗎?
404 本身不會直接扣分,Google 的說明也指出,一般 4xx 除了 429 之外不會浪費檢索預算,也不會像 5xx 那樣壓低整個網站的檢索速率。真正該處理的是成因:內部連結指向不存在頁面要修連結,有對應新頁面的舊網址該設 301 轉址,確定永久消失的就誠實回 404。大規模把 404 硬導向首頁,反而會製造語意不合的轉址,傷害大於放著不管。
頁面刪掉之後,該回 404 還是 410?
確定資源永久移除且不會恢復就用 410,不確定就用 404,這是 MDN 對兩者語意的建議區分。實務上 Google 把 404 與 410 放在同一組處理邏輯裡,都會把已收錄頁面移除並讓檢索頻率遞減,並沒有明文的不同時程。想讓 Google 快一點刪掉頁面而把 404 批次改成 410,效果有限,410 的價值主要在對其他搜尋引擎與自動化程式表達明確語意。
網站維護期間應該回傳什麼狀態碼?
整個網站都需要停機時,正確組合是全站回 503,搭配 Retry-After 標頭註明預計恢復時間,並提供一頁清楚的維護說明;若只維護部分功能,把 503 限定在受影響的路徑即可。503 傳達的是暫時休息、晚點再來,短暫的維護通常不會造成收錄損失。要避免的兩種做法是維護期間把所有頁面導向首頁,以及讓 503 無限期持續,前者語意錯誤,後者長期下來網址會從索引移除。
304 Not Modified 代表頁面被轉址了嗎?
沒有。304 屬於快取驗證回應,流程是瀏覽器帶著 If-None-Match 或 If-Modified-Since 標頭詢問快取副本是否仍有效,資源沒變時伺服器回 304 且不帶內容,瀏覽器沿用本地副本。它雖然名列 3xx 家族,功能是省流量與加速,與 301、302 那種換網址的重新導向完全不同。
想一次檢查整站網址的狀態碼,用什麼工具?
少量網址用瀏覽器開發者工具的 Network 面板或 curl 指令就能看單頁真相;先從 sitemap 或轉址對應表匯出網址清單,再貼進 httpstatus.io 批次驗證,它會回報每個網址的狀態碼、回應標頭與跟隨轉址後的最終位置。改版後驗收轉址對應表時,先用小樣本抽驗規則正確,再跑全量清單並留檔作為上線紀錄。

Whoops 巫普斯科技有限公司

專注技術 SEO、GEO/AEO 與 AI 搜尋實務。本站文章以可驗證資料、公開來源與實作觀察整理而成。

關於 Whoops編輯守則服務內容

想把這篇的方法用在自己的站上?

SEO 健檢、GEO/AEO 引用優化、網頁設計諮詢——把文章裡的方法落地到你的網站。