站点上有一類頁面,服務器返回的是 200,狀態碼看上去一切正常,但頁面里没有實质内容:篩選後無结果的列表頁、已经下架的商品頁、内容被清空只剩框架的詳情頁。對訪問者来说它是一片空白,對蜘蛛来说,它同样是一次没有收获的抓取。搜尋引擎把這種情况称為软 404。
软 404 和真正的 404 有什么不同
真正的 404 是一個明确信号:這個地址對應的资源不存在。蜘蛛收到 404 之後,會把 URL 從待抓列表里逐步移除,不再為它消耗時間。软 404 恰恰相反,HTTP 狀態碼是 200,蜘蛛必须把 HTML 抓回来、解析完,才發現頁面上没有可用内容。這個判断發生在抓取之後,成本已经付出去了。
換句话说,软 404 消耗的是抓取资源,却換不回索引價值。
常见的软 404 触發场景
- 站内搜尋頁、篩選參數生成的空结果頁,返回 200 但正文只有一句“没有找到相關结果”。
- 商品、文章下架後保留原 URL,頁面只剩标题和推荐位。
- 模板渲染失敗或資料接口超时,頁面照常返回 200,正文区域是空的。
- 分頁超出實际范围,例如只有 5 頁的列表却能從 ?page=20 打開空白頁。
- 用戶中心、訂單頁等需要登入才能看到内容的頁面,被外部連結暴露出来。
它對抓取意味着什么
搜尋结果里不會立刻出現明顯报错,但影响是渐進的:
- 抓取预算被稀释:蜘蛛把時間花在空頁面上,真正需要更新的 URL 排队更久。
- 索引狀態不稳定:搜尋引擎可能把這些 URL 判定為软 404 並從索引中移除,也可能反复抓取、反复判断,形成拉锯。
- 内鏈路径被浪費:從列表頁点進空詳情頁,蜘蛛沿這條路走一趟,带不回新内容。
怎么確認一個软 404 是否被判定
可以分三步看:
- 抓取日誌:統計返回 200 但响應体很小、正文關鍵詞缺失的 URL,這類地址往往是嫌疑對象。
- 站長工具:看索引狀態里的“软 404”“已排除”等分類,能把范围缩小到具体目錄。
- 人工抽查:随机打開几條可疑 URL,關掉 JS 看原始 HTML 里還剩多少文字。如果剥掉導航和頁脚就什么都不剩,基本可以確認。
處理思路
處理的原則是:让“没有内容”這件事在 HTTP 层面就表達清楚,而不是让蜘蛛抓完再猜。
- 确實不存在的頁面,返回 404 或 410,不要為了保住流量長期返回 200。
- 暂时無货、暂时無结果但之後可能恢复的頁面,考虑用 503 加 Retry-After,或者保留一個有實质内容的說明頁。
- 篩選參數产生的空结果頁,可以在 robots.txt 层面收敛,或通過參數規范避免被大量生成。
- 需要登入的頁面,用 robots.txt 或 X-Robots-Tag 明确禁止抓取,別让它們進入抓取队列。
- 已经確認無效的 URL,用 301 指向最相關的有效頁面,而不是一律指向首頁。
把软 404 当作“狀態碼寫错了”来修,通常比事後清理索引更省事。抓取资源是有限的,蜘蛛少走一次空路,就能多抓一次有價值的頁面。
小结
软 404 的關键在于狀態碼與頁面内容不一致。它不致命,但會持續消耗抓取预算,拖慢新内容的發現速度。定期從日誌和索引狀態里筛出這類 URL,按“真消失、暂时消失、不该被抓”三類分別處理,抓取路径會干净很多。