服務器返回 200,頁面看起来也能正常打開,但正文里只有一句“该商品已下架”或“没有找到相關内容”——這類頁面在蜘蛛眼里属于典型的软 404。它和真正的 404 的区別不在于用戶看到什么,而在于 HTTP 狀態碼告诉了抓取程序什么。
狀態碼是蜘蛛判断一個 URL 生死的第一手信号。200 意味着“這個地址有一個可用资源”,于是它會把正文抓回去、送進後續處理流程;至于内容有没有意义,要等到更後面才判断。当站点里存在成批這样的空壳頁时,被占用的抓取額度是實打實的。
常见的软 404 来源
- 商品、房源、职位等條目下架後,模板還在,200 照常返回
- 站内搜尋结果頁、篩選组合頁在没有匹配结果时渲染出的空列表
- 分類目錄下没有任何内容时的空分類頁
- 分頁參數越界,例如實际只有 5 頁却請求第 50 頁,頁面顯示“暂無資料”
- 错誤處理寫成统一的“友好提示頁”,把所有異常都用 200 兜住
- CMS 預設生成的标簽頁、作者頁、日期归档頁,長期没有對應内容
蜘蛛拿到 200 之後會怎么走
它不會立刻把頁面判定為無效。通常的路径是:抓取 HTML、解析正文、抽取連結,再交给索引环节评估。评估时,空壳頁會面临几種结果:正文過短、與其他頁面高度雷同、没有獨特信息,于是不被保留;如果這類頁面數量很大,站点在内容有效性上的整体表現也會被拖累。更麻烦的是連結抽取——很多空壳頁的侧邊栏和推荐位仍然輸出大量連結,蜘蛛會顺着這些連結繼續爬,把预算花在與内容無關的路径上。
分開處理比统一處理更有效
确實已经不存在的资源
返回 404;如果确定是永久移除,410 表達得更明确。不要用 200 加一句提示语来“安抚”訪問者,這對用戶和蜘蛛都没有好處。用戶侧可以在頁面上给出替代入口,但狀態碼要如實。
暂时缺内容但頁面想保留
例如断货商品。保留 URL 是可以的,但頁面不能只有一句话。补充同類替代、規格參數、相關說明,让它仍然是一個有信息的頁面。如果预計長期無内容,考虑把權重合並到上級分類並做 301。
搜尋结果頁與篩選组合頁
這類頁面數量可以近乎無限,且大多没有獨立價值。常见做法是在頁面上加 noindex,让它們不進入索引,同时仍然允许抓取——noindex 需要蜘蛛先抓到頁面才會生效。如果连抓取都不希望發生,再用 robots.txt 的 Disallow 拦,但要注意拦掉之後 noindex 也會一並失效。
分頁越界
參數超出實际頁數时,直接返回 404 或 301 回到最後一頁,比渲染一個空列表更清楚,也不會让蜘蛛反复试探不存在的頁碼。
怎么排查
- 看抓取日誌中 200 响應的分布,找出哪些路径下集中出現短頁面模板
- 抽样統計頁面正文字數,與同類正常頁面的均值做對比
- 检查错誤處理中間件,確認異常没有被统一包装成 200
- 检查翻頁、篩選參數是否設定了上界,避免任意參數都能生成頁面
- 站長工具里如有软 404 相關报告,可以拿来交叉驗證
修复软 404 往往不是改一個狀態碼,而是先决定這個 URL 到底還應不應该繼續存在。