站点里最容易被忽略的抓取消耗,往往不是服務器宕机,而是一批返回 200 却没有有效内容的頁面。搜尋蜘蛛很大程度上依靠狀態碼判断一個 URL 是否值得繼續訪問,当空頁、跳轉頁、错誤頁都被包装成 200 时,抓取频次會被持續消耗在無價值的地址上,真正需要更新的頁面反而排到後面。
软 404 的本质:内容没了,狀態碼還在说“正常”
软 404 指頁面已经不存在或没有實质内容,服務器仍返回 200。它不會立刻让 URL 從索引中登出,却會让同一批地址被反复抓取、反复判定為低價值,形成長期浪費。相比一個干脆的 404,软 404 的排查成本更高,因為它在外观上完全正常。
- 商品下架後返回 200 的“该商品已售完”占位頁;
- 搜尋结果為空时仍渲染 200 的列表模板;
- 分頁越界(如 page=999)返回 200 的空白列表;
- 參數错誤的詳情頁悄悄回退到某條通用内容;
- 内容被刪除後 302 跳首頁,而不是返回 404 或 410。
排查顺序:先看日誌,再改模板
建议從日誌抽样的原始資料開始,而不是先動模板逻辑,否則很难知道問题覆盖面有多大。
- 從服務器日誌或抓取日誌中筛出返回 200、响應体明顯偏小的 URL,按目錄归類,看是否集中在某類模板。
- 用 curl -I 核對狀態碼,再用 curl -s 看正文首屏,確認是不是占位内容或报错兜底頁。
- 對照這批 URL 在 Sitemap、列表頁、内鏈中的出現方式,区分是模板判断問题還是資料缺失問题。
- 检查跳轉規則:刪除類 URL 是否被统一 302 到首頁,302 是否應改為 301,或者直接给出 404、410。
- 核對異常頁返回的是 403、500 還是被兜底成 200,尤其是無權限與後端报错两類。
修正时的几個判断
- 确定不再提供的頁面用 404,明确永久移除可用 410;
- 临时维護不要長期占用原 URL 返回 200,可返回 503 並配合 Retry-After;
- 跳轉要区分永久與临时,302 長期使用容易让入口判断反复摇摆;
- 确實需要保留的空结果頁可以返回 200,但應加 noindex,避免進入索引循环;
- 改動後持續观察该目錄下的抓取频次與 404 比例變化,確認消耗是否下降。
狀態碼是给抓取方看的信号,不是给用戶看的文案。頁面可以展示得友好,狀態碼必须如實。
長期维護建议
把狀態碼分布做成一個可观察的指标:定期統計 2xx、3xx、4xx、5xx 在各目錄的占比。一旦某個目錄的 200 頁面平均正文体积持續下降,通常意味着软 404 正在扩散。對 Sitemap 與已下架資料做交叉核對,把失效地址從入口清單中移除,可以减少無意义的反复抓取。抓取频次與收錄表現受多重因素影响,稳定的狀態碼只是其中一項基础工作,需要與其他抓取條件一起長期观察。