有些 URL 抓取时狀態碼是 200,服務器也很配合,但打開一看,頁面上除了導航、面包屑和頁脚,什么都没有。這類頁面行内常叫「软 404」:它没有报错,也不算真正的空响應,只是内容层面是空的。對蜘蛛来说,它拿到的是一次成功抓取,却几乎得不到可用信息。
软 404 為什么容易被忽略
因為它不产生错誤日誌。服務器只看到狀態碼 200,监控上一切正常;站長工具里也只是多了一個被訪問的 URL。只有在抓取日誌里把「狀態碼」和「响應体大小」放在一起看,才會發現一批体积明顯偏小的頁面。
常见的空内容頁来源包括:篩選條件组合後没有结果、商品已下架但模板仍在、活動結束後的落地頁、空标簽或空分類、用戶主頁尚未發布内容、分頁頁碼超出總頁數、以及依赖前端渲染但渲染失敗後剩下的空壳。
蜘蛛抓到空内容頁之後會做什么
搜尋引擎的具体處理並不公開,也不承诺某種固定结果,但從抓取行為上能观察到一些倾向:
- 首次抓取已经消耗了一次抓取動作,這部分成本收不回来;
- 同一模板批量生成、内容高度相似的空頁面,重訪間隔往往會拉長;
- 部分空頁面可能被搜尋引擎自行判定為软 404,從而從结果中移除;
- 如果空頁面通過内鏈大量分發,還可能稀释真正有價值頁面的抓取机會。
空頁面最大的成本通常不是它自己有没有排名,而是它占用的那次抓取動作。
200、404、410、noindex 该怎么選
關键是想清楚:這個 URL 以後還會不會有内容。
- 内容永久没有了:直接返回 404;确定不會再回来且希望尽快清理的,可以用 410。
- 内容暂时消失:比如季节性缺货、临时下架,保留 200 是合理的,但頁面上要给出明确說明和相關的替代入口,而不是只留一個空模板。
- 頁面有存在價值,但不希望被索引:用 noindex。要注意 noindex 的意思是「別收錄」,不是「別抓取」,蜘蛛仍可能来抓。
- 不要用 200 伪装错誤頁:把「没有找到」的内容用 200 返回,就是在制造软 404,長期看只會让抓取记錄里多出一堆無信息量的 URL。
分頁越界和站内搜尋结果頁
頁碼超過列表實际頁數时,返回 404 比渲染一個空列表更清楚。站内搜尋结果頁通常建议 noindex,但它們依然是可被抓取的 URL,尤其是被外部連結或站内分享引用之後,仍會進入發現路径。
一套可落地的自查顺序
- 在抓取日誌中筛出狀態碼為 200、但响應体大小明顯低于同類型頁面平均值的 URL;
- 對這些 URL 抽样,人工確認是否為篩選無结果、已下架、空分類等類型;
- 检查頁面正文文本量,看是否只由導航、頁脚和推荐模块构成;
- 观察這批 URL 的重訪間隔是否在變長,作為價值判断的參考;
- 如果是前端渲染站点,確認關閉脚本後返回的 HTML 是否只是一個空壳。
從源头减少無效 URL
- 篩選、排序參數组合只在有结果时生成可抓取的連結,無结果时不在頁面上外推;
- 列表分頁連結不要指向越界頁碼,最後一頁之後不再輸出「下一頁」;
- 分類和标簽在内容為空时不要進入導航和站点地图;
- 用 robots.txt 屏蔽無價值參數时要有清醒認识:屏蔽抓取並不等于阻止 URL 被發現。
软 404 不是一個能一次修完的問题,它往往随着篩選、下架、活動上下线不断产生。比較務實的做法是把它当成日常清理項:定期從日誌里捞出体积異常的 200 頁面,判断它們该變成 404、该补充内容,還是该留在原地。整理一次之後,抓取记錄會干净不少,真正需要更新的頁面也更容易被安排上。