搜尋抓取

软 404 與狀態碼誤用:蜘蛛為什么把有用的 URL 当成空壳頁

蜘蛛抓取一個 URL 时先拿到的是狀態碼,狀態碼用错會让空壳頁面被当成正常頁面反复抓取,真正有價值的 URL 反而排不上队。本文梳理软 404 的常见形態、狀態碼誤用的典型场景,以及從服務器日誌自查、用 404、410、503 明确表態的處理思路。

搜尋抓取

软 404 與狀態碼誤用:蜘蛛為什么把有用的 URL 当成空壳頁

蜘蛛抓取一個 URL 时,最先拿到的不是頁面内容,而是服務器返回的狀態碼。狀態碼决定了這次抓取算不算成功、這個 URL 還要不要再来。問题在于,不少站点把 200 当成萬能返回——只要請求能被處理,一律给 200。结果是:明明没有有效内容的頁面,在蜘蛛眼里却是“正常頁面”,于是被反复抓取,占掉了抓取配額,真正有價值的 URL 反而排不上队。

蜘蛛怎么判断一個 URL 值不值得再来

大致會看三件事:返回的狀態碼是否正常、正文内容是否有效、内容與 URL 指向的主题是否一致。狀態碼正常但内容為空或高度重复,就落到了“软 404”的范围。與直接返回 404 不同,软 404 需要蜘蛛多抓几次才能確認,這個過程會額外消耗抓取资源。

常见的狀態碼誤用

  • 空搜尋结果返回 200:站内搜尋没有结果,頁面只是“未找到”,却渲染出完整模板並返回 200,容易被当成低质頁面。
  • 商品或内容下架後頁面仍在:正文清空但 URL 保留,狀態碼仍是 200,蜘蛛會持續回訪。
  • 错誤頁返回 200:出错时展示“系統繁忙”“稍後再试”,狀態碼却给 200,蜘蛛會把它当正常内容處理。
  • 临时维護统一返回 404:本该用 503 表示暂时不可用,结果给出 404,可能让正常 URL 被判定為已消失。

软 404 的几種典型形態

需要交互才出現的内容

頁面骨架先返回 200,正文要等点击、滚動或輸入之後才加载。蜘蛛拿到的是空壳,却仍按正常頁面记帳。

大量 URL 指向同一份空内容

參數组合、篩選條件能翻出很多地址,内容却几乎一致或干脆為空,這類 URL 容易一起被判定為無效。

自查:從日誌里把問题挑出来

  1. 按狀態碼分组統計蜘蛛訪問,看 200 的占比是否高得反常。
  2. 抽一批 200 的 URL,用不带 Cookie、不执行脚本的方式請求,確認正文是否有實质内容。
  3. 重点检查站内搜尋、篩選、分頁這三類模板,是否存在“無结果也返回 200”。
  4. 對照抓取频次:被反复抓取、却從来不带来訪問的 URL,往往是空壳。

處理思路

真正不存在的頁面,该给 404 就给 404;已经彻底下架、不會再恢复的,用 410 表達更明确。站内搜尋無结果、篩選结果為空這類情况,可以選擇返回 404,或至少在頁面上明确說明無结果,並减少内鏈指向。维護、限流造成的暂时不可用,用 503 並配合 Retry-After,比直接 404 更稳妥。已经被大量抓取的空壳 URL,可以先撤掉站内入口,让蜘蛛自然降低訪問频次。

noindex 與狀態碼別混用

noindex 解决的是“頁面有效但不想被收錄”,狀態碼解决的是“頁面是否還存在”。用 noindex 處理已经删掉的頁面,等于让蜘蛛繼續回訪一個没有價值的地址;反過来,给正常但不想收錄的頁面返回 404,只會制造更多無谓的抓取失敗。

狀態碼是蜘蛛判断頁面生死的首要信号,含糊的返回會让它一直猜。让有效頁面拿到 200,让無效頁面得到明确的否定,抓取次數才會花在该花的地方。

最後提醒一句:調整狀態碼属于影响面較大的改動,動手前先用小范围 URL 驗證,观察一到两周日誌變化,再决定是否扩大范围。