服務器返回 200,蜘蛛顺利拿到 HTML,頁面却没有實际内容——這種「狀態碼正常、内容為空」的情况,通常被称作软 404。它不像硬 404 那样直接告诉蜘蛛這個地址已经没了,而是让蜘蛛以為抓到了一個正常頁面。對站点来说,代價是顯性的:抓取配額被占、索引里堆着一批没有價值的 URL,而真正需要被發現的頁面反而排不上队。
蜘蛛判断一個頁面,靠的不只是狀態碼
软 404 的判定标准並不公開,但可以确定的是,蜘蛛會看頁面主要区域有没有實质文本、是否属于模板化輸出、是否和同栏目的其他頁面高度相似、有没有明确的内容主体。空搜尋结果頁、空篩選頁、已下架但仍返回 200 的詳情頁,都容易落進這一档。也就是说,抓取成功和頁面值得保留,是两件不同的事。
哪些 URL 最容易變成软 404
- 站内搜尋结果頁:關鍵詞没有命中时輸出空列表,頁面上只剩标题和搜尋框。
- 组合篩選頁:颜色、價格、尺碼任意组合,绝大多數组合其實没有商品。
- 地区落地頁:模板批量生成,但部分城市确實没有對應服務或库存。
- 已下架商品:URL 保留、模板還在、正文被清空,狀態碼依舊是 200。
- 翻過头的分頁:列表只有 5 頁,第 6 頁起返回空列表,同样返回 200。
软 404 的成本体現在哪里
抓取预算是有限的。蜘蛛每次来訪都要分配连接、消耗服務器资源,如果一批 URL 反复被抓却始终没有内容,這些訪問就是纯支出。更麻烦的是,這類 URL 往往還有内鏈指向,或者仍留在 Sitemap 里,蜘蛛會定期回来复查,形成長期消耗。
- 無内容頁面占用抓取額度,新頁面上线後要等更久才被訪問。
- 索引里保留着無效 URL,用戶点進去看到的是空白頁。
- 日誌里的抓取量看着很高,但真正带流量的頁面並没有增加。
處理思路:让狀態碼、内容和入口保持一致
该消失的就返回正确的狀態碼
商品永久下架、城市确實没有服務,這類頁面更适合返回 404 或 410,而不是繼續用 200 輸出空壳。410 表示已永久移除,蜘蛛通常會更早停止回訪。如果頁面只是暂时缺货、内容几天内會恢复,那么保留 200 並给出替代推荐反而更合理。
空狀態也可以做成内容
不是所有空頁面都要删。搜尋無结果时,可以提供相關關鍵詞、热门内容、分類入口,让頁面本身有信息量;篩選组合没有商品时,可以给出調整條件的提示,並連結到有结果的邻近组合。這样頁面自己就有價值,不必急着返回 404。
用 noindex,而不是用 robots.txt 挡
如果希望蜘蛛不要索引但仍允许抓取,用 meta noindex 更合适。robots.txt 的 Disallow 會直接阻断抓取,蜘蛛看不到頁面上的 noindex 信号,已经收錄的 URL 也可能長期留在索引里。两者的作用层級不同,不要互相替代。
清理發現路径
软 404 頁面如果還被内鏈指向、被 Sitemap 收錄,蜘蛛就會不断回来。整理内鏈、把無内容 URL 從 Sitemap 中移除,比等待蜘蛛自然放弃要快。對于篩選參數,可以在生成連結时就限制组合數量,從源头减少空頁面的产生。
怎么更快發現這些頁面
- 抽样訪問一批列表頁和詳情頁,看主要区域是否有實际文本。
- 從日誌里挑出被反复抓取、站内却没有入口指向的 URL,逐個检查。
- 核對 Sitemap 里的 URL 是否都返回有效内容,避免清單和實际狀態脱节。
- 對批量生成的模板頁做抽查,重点是地区頁、标簽頁和组合篩選頁。
狀態碼只說明這次請求處理成功,不代表這個 URL 值得留在索引里。蜘蛛最终按内容判断價值,站点要做的是让狀態碼、内容和發現路径三者對齐。
软 404 往往不是技術故障,而是运营問题:頁面生命周期結束了,入口却没有同步關掉。把该 404 的 404、该补内容的补内容、该断的鏈断掉,抓取预算才會回到真正需要被發現的新頁面上。