服務器返回 200,頁面却什么都找不到——這類頁面常被称為软 404。它和真正的 404 不同:狀態碼是正常的,蜘蛛在抓取环节拿到的第一個信号是“成功”,只有在解析頁面内容之後,才會發現這里没有實质信息。
蜘蛛看到的 200 和實际内容之間的落差
抓取一個 URL 时,蜘蛛先记錄的是 HTTP 狀態碼、响應头、跳轉情况,然後才解析正文。软 404 頁面的狀態碼没有任何異常,所以它會被当作正常抓取结果進入後續流程。真正让它被识別出来的,通常是内容层面的特征:
- 正文几乎没有可用文本,只剩導航、頁脚和模板框架;
- 多個不同 URL 返回高度相似的“暂無内容”提示;
- 頁面标题或正文里出現“未找到”“無结果”“已下架”等字样;
- 原本有内容的 URL,更新後只剩空壳。
主流搜尋引擎會把這些頁面归到软 404 一類,並在站長後台给出相應报告。要注意的是,這個判断發生在内容解析阶段,而不是抓取請求阶段。
對抓取路径的影响:入口還在,價值没了
软 404 最容易被忽略的地方,是它不會切断抓取路径。頁面上如果還挂着列表、推荐位、分頁連結,蜘蛛依然會顺着往下走。结果是:
- 同样的地址被反复訪問,抓取预算花在没有产出的 URL 上;
- 新 URL 從這些頁面被發現的概率降低,連結传递的價值信号變弱;
- 日誌里表現為狀態碼 200 的請求數量不少,但站点内容並没有對應增長。
換句话说,它不像 404 那样直接给出“這里没有東西”的明确信号,反而更像一個長期開着门的空房間。
哪些地方最容易生成软 404
- 站内搜尋的無结果頁:參數组合几乎是無限的,每一種都可能生成一個 200 頁面;
- 篩選與排序聚合頁:條件组合後没有匹配结果时,頁面照样渲染;
- 下架商品、過期活動頁:為了保住外鏈而保留 URL,但正文被清空;
- 分頁超出范围:頁碼超過實际頁數,頁面仍然返回 200。
這些入口如果同时存在于内鏈或 Sitemap 中,蜘蛛就會持續回訪。
處理思路:给一個明确的信号
核心原則是让頁面狀態的语义和内容實际狀態保持一致。
- 彻底没有内容:返回 404 或 410,並把它從内鏈和 Sitemap 中移除。
- 内容暂时缺失:如果确實會恢复,可以保留頁面並给出說明,但不要让空頁面長期挂在可抓取的連結里。
- 有替代頁面:用 301 指向最相關的分類頁或上級頁面,让抓取信号繼續流動。
- 參數组合頁:與其用 robots.txt 屏蔽目錄(被屏蔽的 URL 仍可能從外部連結被發現),不如让無结果时直接返回 404,或用 noindex 明确表態。
- 站内搜尋頁:無结果时不要輸出可抓取的連結列表,也不要把這類地址寫進 Sitemap。
怎么排查
從訪問日誌入手比較直接:篩選狀態碼為 200、但响應体明顯偏小,或者地址里带着搜尋、篩選參數的請求,按出現次數排序,看哪些 URL 被反复抓取。再看看這些地址是否出現在内鏈或 Sitemap 中。站長後台的软 404 报告可以作為交叉驗證。
處理完一批之後,观察一段時間日誌:如果同類地址的抓取次數下降,有效頁面的抓取占比上升,說明方向是對的。反之,如果只是把 404 改成 200,問题只是從“明顯报错”變成“隐形的空轉”。
小结
软 404 的問题不在于狀態碼本身,而在于它让蜘蛛無法從狀態碼判断頁面價值,只能靠解析内容来猜。把狀態碼和内容對齐,把無效入口從連結结构里清掉,通常比反复提交 Sitemap 更有用。抓取资源有限,留给有内容的地址更划算。