搜尋抓取

软 404 與空结果頁:蜘蛛抓到空壳之後會怎么處理

站点里總有一些頁面能被正常打開,却给不出任何有效内容:搜尋無结果的空列表、篩選後為空的分類頁、已下架商品的詳情頁。它們返回 200,對蜘蛛来说却是一張空壳。本文讨论如何识別這類頁面、怎样区分處理,以及為什么它們會白白消耗抓取配額。

搜尋抓取

软 404 與空结果頁:蜘蛛抓到空壳之後會怎么處理

蜘蛛抓走一個 URL,解析完之後發現頁面上只有導航、侧栏和頁脚,正文区一片空白——這種情况比返回 500 更隐蔽,因為從狀態碼上看,一切正常。這類頁面通常被称為软 404 或空结果頁,它們占用抓取時間,却換不回任何可索引的内容。

先分清三種“空壳”

  • 真 404:URL 不存在,服務器返回 404 或 410,蜘蛛知道這里没有東西,通常抓一次就不再纠缠。
  • 空结果頁:搜尋無结果、篩選條件组合後没有商品、分頁翻過了最後一頁,但頁面依然返回 200。
  • 软 404:内容已经下架或刪除,頁面却仍然返回 200,只是正文被替換成了“暂無内容”之類的提示。

三者對蜘蛛的意义完全不同。真 404 是明确信号,後两者是模糊信号,蜘蛛需要自己判断這個頁面到底有没有價值,而這個判断過程本身就要花時間。

蜘蛛拿到空壳之後會做什么

它不會立刻放弃。第一次抓到空壳,蜘蛛會認為可能是暂时的,過一段時間再来一次。如果每次都是同样的空壳,回訪間隔會逐渐拉長,但在那之前,這些 URL 已经占掉了若干次抓取。對于篩選參數、站内搜尋、日歷翻頁這類會批量生成 URL 的模块,一個空頁背後往往跟着成百上千個结构相同的地址,消耗是成倍放大的。

更麻烦的是,這些頁面之間高度相似,正文缺失,模板重复。蜘蛛在同一批 URL 上反复花時間,留给真正正文頁的抓取机會自然就少了。

判定要看三個信号

  1. HTTP 狀態碼:頁面無内容却返回 200,是最基本的判断依據。注意区分“暂时為空”和“長期為空”,前者更适合返回 503 或让它先 404。
  2. 正文與模板的比例:把頁面 HTML 去掉導航、頁脚、脚本後,剩下的可讀文本如果只有一两句话,基本可以归入空壳。
  3. 頁面之間的相似度:同一模板下几十個 URL 的正文几乎一致,只是參數不同,這類頁面通常在抓取时收益很低。

處理思路:能明确就明确

空结果頁直接给出 404 或 410

搜尋無结果、篩選無结果时,返回一個明确的不存在狀態,比返回 200 加一句“没有找到”更省事。用戶看到的是同样的提示頁,蜘蛛得到的是清晰的信号。

已下架内容用 410 更干净

商品下架、文章刪除後,如果确實没有替代頁面,410 比 301 跳首頁更合适。全部跳到首頁會让首頁承担大量無關的跳轉,也让蜘蛛誤以為這些舊地址仍然有效。

參數生成的空頁,從入口處收敛

篩選、排序、站内搜尋這類頁面,如果组合後经常為空,可以考虑限制可被抓取的參數范围,或者让這些地址不進入内鏈和 Sitemap。規則之外的空頁,再單獨處理返回碼。

不要用“暂無内容”長期占位

有些站点习惯保留舊 URL,把正文換成一句提示,靠 200 维持訪問。短期可以,長期會让一批空壳永久留在抓取队列里。

判断标准其實很简單:這個 URL 如果被蜘蛛抓到,用戶顺着搜尋结果点進来,能不能看到有用的東西。如果答案是否定的,就不该用 200 把它挂在網上。

別忘了 Sitemap 和内鏈

處理完返回碼,還要回头检查這些空頁是不是仍被列在 Sitemap、分類列表、相關推荐里。一邊让蜘蛛別抓,一邊又主動把地址递過去,效果會互相抵消。内鏈尤其要注意,很多空頁的入口就藏在“猜你喜欢”這類自動模块中。

一份简單的检查清單

  • 抓取日誌里狀態碼為 200 但响應体极小的 URL 有哪些;
  • 站内搜尋、篩選、分頁的參數组合,是否會生成大量空结果頁;
  • 已下架内容的舊地址,現在是 200、301 還是 410;
  • Sitemap 和自動推荐模块中,是否還包含着這些地址;
  • 處理之後,隔一段時間再看日誌,確認回訪次數是否下降。

空壳頁不會让站点立刻出問题,它們的影响是缓慢的:一点点吃掉抓取時間,一点点稀释站点整体的内容质量。定期清理,比等到抓取明顯變慢再回头排查要轻松得多。