站点运营

站点运营:HTTP 狀態碼與软 404 自查,別让失效頁面被当成正常内容

站点里總會有頁面悄悄失效,但服務器可能仍返回 200,让用戶和蜘蛛都拿到一份内容稀薄的“正常頁面”。本文区分真 404、软 404 與 5xx 的差別,给出從日誌抽样到批量驗證狀態碼的自查步骤,並說明下架、迁移、临时维護等场景下更合适的狀態碼選擇。

站点运营

站点运营:HTTP 狀態碼與软 404 自查,別让失效頁面被当成正常内容

站点跑久了,總有一些頁面會悄悄失效:下架的商品、改名的栏目、活動結束後没清理的专题、被拼错的舊連結。用戶看到的是“内容不存在”,但服務器返回的可能是 200,蜘蛛拿到的也是一份内容稀薄的“正常頁面”。這類問题不會报错,也不會触發告警,却會一点点消耗抓取预算,让日誌里的判断失真。

先分清三種狀態

真 404 與 410

頁面确實不存在,服務器直接返回 404 或 410。這是最诚實的回答,蜘蛛訪問一次之後就會降低再来试探的频率,日誌里也能一眼看出。

软 404

URL 可以訪問,狀態碼是 200,但正文只有一句“抱歉,内容已刪除”或者干脆一片空白,頁头、頁脚、導航却照常渲染。對抓取程序来说,這和正常頁面没有区別。

5xx 服務端错誤

服務器临时故障、後端超时、資料库连接不上。短時間内蜘蛛會稍後重试,但如果長時間大面积 5xx,抓取频率會被压低,恢复之後也需要一段時間才能回到原来的节奏。

软 404 的常见来源

  • 商品或文章下架後只删了正文,模板仍然輸出完整頁面框架;
  • 栏目被清空,列表頁返回 200 但没有任何條目;
  • 站内搜尋無结果頁被当成普通頁面,甚至被内鏈指向;
  • CMS 的草稿预览、未到發布時間的定时稿頁面可被直接訪問;
  • 分頁參數越界(如 page=99)返回空白列表而不是 404;
  • 改版後舊模板残留,落在一個通用的兜底頁上。

自查步骤

  1. 抽样比對:從訪問日誌里挑出一批狀態碼為 200 的 URL,随机取几十個實际打開,看正文字數、是否有實质内容,重点看那些平时没人点、只被蜘蛛訪問的地址。
  2. 批量驗證狀態碼:用命令行工具或脚本對核心栏目、舊版路径批量請求,統計 200、301、404、410、5xx 的分布,異常集中在哪個目錄一眼就能看出来。
  3. 看 404 高频路径:日誌里反复出現的 404,往往是站内還有死鏈没清理,或者外部舊連結没做跳轉,需要区分對待。
  4. 核對错誤頁模板:手動訪問一個确定不存在的地址,確認返回的是 404 而不是 200,同时頁面里要有返回入口,別让用戶卡在死胡同。
  5. 检查空结果场景:列表頁、搜尋结果頁、标簽頁在無内容时,應返回 404 或至少不輸出可索引的空白模板。
  6. 排查 5xx 分布:如果 5xx 集中在某個時間段或某台後端,先解决服務器問题,再谈抓取层面的優化。

處理时的取舍

内容永久刪除的,给 404 或 410;只是暂时下线、很快會恢复的,用 503 加上 Retry-After 头,而不是返回一個 200 的空白頁;頁面整体迁移的,用 301 指向最接近的新地址,並且只跳一层。需要特別注意的是,把大批失效 URL 全部 301 到首頁,本质上只是換了一種形式的软 404,對用戶和抓取都没有帮助。

清理完成之後,還要做两件收尾的事:一是把站内鏈和導航里指向失效地址的連結改掉或去掉,避免蜘蛛顺着連結反复撞墙;二是同步更新站点地图,別再让地图把已经下线的地址繼續列出去。

狀態碼是给机器看的结论,頁面内容是给人看的說明。两者说的是同一件事,日誌才值得信任。

這類检查不需要天天做,但建议在每次大改版、批量下架或栏目調整之後跑一遍,把它当成站点运营的例行体检項目之一。