站点跑久了,總有一些頁面會悄悄失效:下架的商品、改名的栏目、活動結束後没清理的专题、被拼错的舊連結。用戶看到的是“内容不存在”,但服務器返回的可能是 200,蜘蛛拿到的也是一份内容稀薄的“正常頁面”。這類問题不會报错,也不會触發告警,却會一点点消耗抓取预算,让日誌里的判断失真。
先分清三種狀態
真 404 與 410
頁面确實不存在,服務器直接返回 404 或 410。這是最诚實的回答,蜘蛛訪問一次之後就會降低再来试探的频率,日誌里也能一眼看出。
软 404
URL 可以訪問,狀態碼是 200,但正文只有一句“抱歉,内容已刪除”或者干脆一片空白,頁头、頁脚、導航却照常渲染。對抓取程序来说,這和正常頁面没有区別。
5xx 服務端错誤
服務器临时故障、後端超时、資料库连接不上。短時間内蜘蛛會稍後重试,但如果長時間大面积 5xx,抓取频率會被压低,恢复之後也需要一段時間才能回到原来的节奏。
软 404 的常见来源
- 商品或文章下架後只删了正文,模板仍然輸出完整頁面框架;
- 栏目被清空,列表頁返回 200 但没有任何條目;
- 站内搜尋無结果頁被当成普通頁面,甚至被内鏈指向;
- CMS 的草稿预览、未到發布時間的定时稿頁面可被直接訪問;
- 分頁參數越界(如 page=99)返回空白列表而不是 404;
- 改版後舊模板残留,落在一個通用的兜底頁上。
自查步骤
- 抽样比對:從訪問日誌里挑出一批狀態碼為 200 的 URL,随机取几十個實际打開,看正文字數、是否有實质内容,重点看那些平时没人点、只被蜘蛛訪問的地址。
- 批量驗證狀態碼:用命令行工具或脚本對核心栏目、舊版路径批量請求,統計 200、301、404、410、5xx 的分布,異常集中在哪個目錄一眼就能看出来。
- 看 404 高频路径:日誌里反复出現的 404,往往是站内還有死鏈没清理,或者外部舊連結没做跳轉,需要区分對待。
- 核對错誤頁模板:手動訪問一個确定不存在的地址,確認返回的是 404 而不是 200,同时頁面里要有返回入口,別让用戶卡在死胡同。
- 检查空结果场景:列表頁、搜尋结果頁、标簽頁在無内容时,應返回 404 或至少不輸出可索引的空白模板。
- 排查 5xx 分布:如果 5xx 集中在某個時間段或某台後端,先解决服務器問题,再谈抓取层面的優化。
處理时的取舍
内容永久刪除的,给 404 或 410;只是暂时下线、很快會恢复的,用 503 加上 Retry-After 头,而不是返回一個 200 的空白頁;頁面整体迁移的,用 301 指向最接近的新地址,並且只跳一层。需要特別注意的是,把大批失效 URL 全部 301 到首頁,本质上只是換了一種形式的软 404,對用戶和抓取都没有帮助。
清理完成之後,還要做两件收尾的事:一是把站内鏈和導航里指向失效地址的連結改掉或去掉,避免蜘蛛顺着連結反复撞墙;二是同步更新站点地图,別再让地图把已经下线的地址繼續列出去。
狀態碼是给机器看的结论,頁面内容是给人看的說明。两者说的是同一件事,日誌才值得信任。
這類检查不需要天天做,但建议在每次大改版、批量下架或栏目調整之後跑一遍,把它当成站点运营的例行体检項目之一。