不少站点在商品下架、库存清零、搜尋结果為空、參數頁無匹配内容时,頁面依然返回 200。用戶看到的是「暂無相關内容」,蜘蛛看到的是一個正常的 HTML 文档。這類頁面就是通常说的软 404。它不會像 404 那样被明确标记為無效,反而會持續占用抓取预算,反复進入抓取队列。
软 404 為什么會被反复抓取
蜘蛛判断一個 URL 是否還有價值,主要看狀態碼、頁面主体内容、内鏈指向以及歷史上的抓取反馈。当頁面返回 200,同时又存在于 Sitemap 或站内連結中,抓取調度就會把它当作正常頁面安排回訪。回訪後如果仍然只是空壳,预算就被消耗在一次没有产出的請求上。
更麻烦的是,這類 URL 往往不是一两個,而是成批出現:篩選參數组合、已下架商品、已過期的活動頁,動辄成千上萬條。抓取预算被摊薄之後,新頁面和真正需要更新的頁面,回訪間隔會被明顯拉長。
常见的软 404 形態
- 商品或文章已刪除,頁头頁脚完整,正文位置顯示「内容不存在」。
- 搜尋、篩選、排序结果為空,模板照常渲染。
- 活動已結束,頁面僅保留标题和倒計时残留。
- 參數拼错或參數被忽略,返回一個預設列表頁。
- 前端拿不到資料,只在首屏留下骨架屏结构。
核對顺序
- 先從抓取日誌里筛出回訪频繁、但响應体积明顯偏小的 URL 段。
- 用同一 User-Agent 請求這些 URL,確認返回狀態碼是否為 200。
- 對比正常頁面的正文文本長度,判断是否落在空壳区間。
- 检查這些 URL 是否仍出現在 Sitemap、内鏈模块、分頁或标簽聚合頁中。
- 確認頁面對應資料是永久刪除、临时下架,還是參數错誤導致。
狀態碼只是结果,真正要回答的問题是:這個 URL 以後還有没有内容可看。没有内容就该给出明确信号,而不是让它繼續被当成正常頁面。
按情况给出不同處理
- 内容永久刪除、無替代頁面:返回 410 或 404,同时從 Sitemap 和内鏈中移除。
- 内容临时下架、预計恢复:返回 503 並带上 Retry-After,不要用 200 硬撑。
- 參數错誤:規范到有效 URL 或返回 404,不要静默兜底成首頁或列表頁。
- 搜尋结果為空的组合參數頁:考虑用 robots meta 的 noindex,並避免在内鏈中大量暴露。
- 确實需要保留的聚合頁:补上編輯内容或推荐内容,让它不只是空壳。
和内鏈、Sitemap 一起收口
狀態碼改對之後,還要把入口一起清理。软 404 大多有多個入口,Sitemap 一份、标簽頁一份、相關推荐一份。只改狀態碼而不管内鏈,蜘蛛仍會顺着舊連結不断找回来。建议按入口類型逐項核對:主導航、面包屑、列表頁、标簽聚合、站内搜尋、Sitemap 分片。
同时留意服務器稳定性带来的干扰。如果节点在資料讀取超时後返回了空模板,而不是错誤碼,就會出現「有时空、有时正常」的現象。核對时要在不同時間点重复請求,避免把偶發問题当成稳定结论。
驗證與長期监控
- 改版後用同一批 URL 复测狀態碼和正文体积。
- 观察抓取日誌中该 URL 段的回訪频次是否下降。
- 检查抓取量是否向新頁面和有更新需求的頁面倾斜。
- 把「狀態碼 200 但正文過短」做成日常告警項,而不是一次性排查。
软 404 的處理本身不复杂,难的是持續维持。只要頁面上线流程里没有「無内容也返回 200」的預設逻辑,這類問题就不會反复出現。