站点运营

软 404 自查:別让空頁面用 200 狀態碼骗過蜘蛛

软 404 指的是頁面返回 200 狀態碼,但内容却是空结果、已下架或错誤提示。它會让蜘蛛誤以為這是有效頁面,既浪費抓取预算,也可能影响用戶体驗。本文從狀態碼、頁面模板、參數頁和分頁几個角度,整理一套自查與處理思路,並给出對搜尋引擎更友好的返回方式。

站点运营

软 404 自查:別让空頁面用 200 狀態碼骗過蜘蛛

软 404 是一個容易被忽视的問题:用戶和蜘蛛打開頁面,看到的是“没有找到相關内容”或“该商品已下架”,但服務器返回的 HTTP 狀態碼却是 200。對搜尋引擎来说,200 意味着頁面有效、内容正常,于是可能繼續抓取、繼續保留,甚至反复回来確認。结果就是無效頁面占用抓取预算,頁面质量判断也被干扰。

软 404 和真實 404 差在哪里

真實 404 會明确告诉蜘蛛“這個地址没有對應内容”,蜘蛛通常會較快放弃,並逐步從索引中移除。软 404 則相反:内容已经不存在,狀態碼却還是 200,蜘蛛只能靠頁面文字去猜,效率低且容易誤判。嚴格来说,软 404 不是一種标准狀態碼,而是對“内容與狀態碼不一致”這類現象的统称。

常见的软 404 场景

  • 空搜尋结果頁:站内搜尋没有匹配结果,頁面仍然返回 200,甚至被站内連結大量引用。
  • 商品或文章下架:内容已刪除,模板還在,頁面顯示“已下架”或只剩推荐位。
  • 參數错誤或篩選無结果:URL 參數组合後没有對應商品,頁面照常輸出 200。
  • 分頁超出范围:列表只有 5 頁,訪問第 99 頁仍返回 200 和空列表。
  • SPA 路由兜底:前端路由把未知路径都渲染成空壳頁,服務器狀態碼统一是 200。
  • 自定义 404 頁配置不当:错誤頁本身做得不错,但服務器没有把狀態碼改成 404。

用几個動作做自查

  1. 随机抽取一批“看起来不该存在”的 URL,用 curl -I 或浏览器開發者工具查看 HTTP 狀態碼。
  2. 重点检查空搜尋结果頁、已下架内容頁、參數篩選頁、超出范围的分頁。
  3. 查看服務器日誌中返回 200 但内容為空或极短的頁面,是否被蜘蛛频繁訪問。
  4. 如果使用了前端框架,確認服務端渲染或预渲染时能否针對不存在的内容輸出 404。
  5. 检查 CDN 或反向代理是否把 404 頁面缓存成了 200,或者统一回源成 200。

修复时先分清“暂时”和“永久”

不是所有空頁面都必须返回 404。關键是判断内容狀態:

  • 永久刪除、下架且不再恢复:返回 404 或 410,让蜘蛛明确知道该地址已失效。
  • 暂时無货、临时维護:可以保留 200,但頁面上要给出清晰說明,並避免让蜘蛛把空模板当成正常内容。
  • 參數篩選無结果:考虑返回 404,或 301 跳轉到上一級有效分類頁,减少大量無结果组合被索引。
  • 分頁超出范围:直接返回 404,比輸出空列表更清晰。
  • SPA 未知路由:让服務端對不存在的路径返回 404,而不是统一吐出應用外壳。

几個容易踩的坑

  • 只在頁面上寫“404”三個字,狀態碼却不變,這仍然算软 404。
  • 用 JS 判断内容不存在後才顯示错誤提示,但蜘蛛拿到的初始响應仍是 200。
  • 把所有错誤都 301 到首頁,短期看似“不浪費權重”,長期可能被当成软 404 或跳轉異常。
  • CDN 缓存策略没有区分狀態碼,導致 404 頁面被缓存,或 200 空頁長期不更新。
狀態碼是蜘蛛理解頁面的第一手信号。内容已经不在,就不要用 200 勉强支撑。

软 404 自查不需要一次全站翻新,可以先從模板和几類高频入口開始。把狀態碼與頁面實际内容對齐,减少無效抓取,也让真正有價值的頁面更容易被蜘蛛認真對待。定期抽查,比出了問题再补救更省事。