蜘蛛池知识

蜘蛛池入口頁的 HTTP 狀態碼:404、410、503 與软 404 的處理

蜘蛛抓到入口頁时,最先拿到的不是頁面内容而是狀態碼。本文讲清 404、410、503、429 分別在什么场景下使用,重点拆解返回 200 却没有内容的软 404 是怎么产生的、怎么排查,並给出一套從判断 URL 是否還需要存在到選擇狀態碼的處理顺序。

蜘蛛池知识

蜘蛛池入口頁的 HTTP 狀態碼:404、410、503 與软 404 的處理

蜘蛛訪問一個入口頁时,第一件事不是讀正文,而是看响應头里的狀態碼。狀態碼决定了它接下来是解析頁面、稍後再来,還是把這個地址從待抓队列里划掉。很多入口頁的問题,其實不是内容寫得不好,而是狀態碼给错了信号。

200 之外,几個常用的狀態碼该怎么用

404 與 410

  • 404:地址暂时找不到。适合頁面结构變了、内容临时缺位的情况,蜘蛛會保留一段時間再来看。
  • 410:地址确定不再存在。入口頁確認下线、不再复用這個 URL 时,用 410 比 404 更干脆,蜘蛛清理索引的速度通常更快。

两者的差別不在嚴重程度,而在你表達的態度:是不确定,還是确定不要了。如果一條入口頁已经撤掉且不打算再挂任何内容,長期挂着 404 只會让它反复出現在抓取队列里。

503 與 429

  • 503:服務临时不可用。站点维護、後端重啟、資料库短时不可用时使用,配合 Retry-After 告诉蜘蛛多久之後再来。
  • 429:請求過多。适合用在限速逻辑里,同样是临时的,不是永久拒绝。

要注意的是,503 只能短時間用。如果一挂就是几周,蜘蛛會把它理解成這個站点整体不可用,反而降低整体抓取频次。

5xx 用多了的代價

入口頁批量生成时,模板报错、資料库连接失敗经常會一次性吐出大量 500。蜘蛛不會去区分是代碼問题還是策略問题,它只记錄一件事:這個站点不稳定。抓取频次下降往往就是從這類批量错誤開始的。

软 404:返回 200 却已经没有内容的頁面

這是入口頁最常见也最容易被忽略的問题。地址能打開,狀態碼是 200,但正文只剩模板骨架,或者顯示一句“暂無資料”。蜘蛛會把它当成正常頁面抓走,留在索引里,占着抓取配額。

  • 列表頁的篩選參數组合出大量空结果頁,每一條都是 200。
  • 詳情頁的資料已经刪除,模板還在照常渲染,标题和導航都在,正文為空。
  • 跳轉連結最终停在了一個没有實际内容的落地頁上。

排查软 404 不用太复杂的工具,先看三件事:頁面正文的實际字符數是否明顯偏少、标题是否和其他頁面大量重复、頁面是否只有導航和頁脚。三者同时出現,基本可以判定是软 404。

一個可以照做的判断顺序

  1. 先問自己:這個 URL 以後還需要存在吗?
  2. 需要,而且内容完整 → 返回 200,同时保證正文有實际信息。
  3. 不再需要,也不會复用 → 返回 410。
  4. 暂时下线,之後會恢复 → 返回 503,並設定 Retry-After。
  5. 一时判断不了 → 先用 404,然後看日誌里這個地址是否還在被反复抓取。

几個容易踩的细节

  • 用 JS 跳轉的入口頁,蜘蛛看到的第一份响應仍然是 200,真正的目标頁狀態碼它未必能拿到。
  • CDN 或反向代理有时會把源站的 404 替換成一張设計精美的“友好错誤頁”,狀態碼被改成 200,等于亲手制造软 404。
  • 狀態碼是對机器的信号,不是對内容的替代。頁面该更新的内容不更新,改成 503 也只是把問题往後推。
判断入口頁是否健康,看日誌里的狀態碼分布,往往比逐個打開頁面看内容更直接。四種狀態碼的比例,基本能反映這批入口頁的真實狀態。

把狀態碼当成入口頁生命周期的一部分来管理:上线用 200,临时故障用 503,确定下线用 410,參數错誤用 404。規則简單,但坚持执行下来,蜘蛛對這個站点的判断會稳定很多。