很多站点把收錄問题都归结到内容上,但爬虫每天做的第一件事其實是發請求。請求這一步没走顺,後面的质量判断根本轮不到。服務器返回什么、响應多快、有没有被拦住,都會寫進蜘蛛對這個站点的印象里。
抓取失敗和收錄被拒,是两件事
抓取失敗,意味着蜘蛛這次没拿到頁面,過一阵可能還會再来;收錄被拒,則是頁面已经拿到、也看完了,最後决定不留。狀態碼层面的問题大多属于前者。它的麻烦不在于一次失敗,而在于會拉長從發現到收錄的鏈路,還會影响站点能分到多少抓取額度。
2xx:正常返回里也有坑
- 200:最常见,也是唯一能让頁面進入後續判断的响應。
- 204:表示成功但没有内容。用在接口上没問题,用在頁面上,蜘蛛拿到的就是一片空白。
- 206:分段返回,视频、大文件下载常见,只要分片逻辑正确,一般不影响识別。
比這些更麻烦的是软 404:服務器老實返回 200,頁面里却只有一句“内容不存在”或者干脆是空壳模板。這種頁面技術上抓得到、也可能被收錄,但進去之後没有任何可用的正文,属于典型的占着索引位置不出活。
3xx:跳轉鏈越長,损耗越大
301 和 302 蜘蛛都能跟,区別在于前者表示地址永久變更,後者是临时的。多跳跳轉才是最该清理的:A 跳 B、B 跳 C、C 跳 D,每多一跳就多一次請求,也更容易在中途被放弃或跟丢。常见的坏味道包括 HTTP 跳 HTTPS 之後又跳 www、舊栏目 301 到新栏目但新栏目自己又 302 到別處。能一跳到位就別拖成三跳,循环跳轉更要優先修掉。
4xx:404 和 410 表達的態度不同
404 是“暂时找不到”,410 是“已经明确刪除”。對于确定不再提供的頁面,410 传递的信号更干脆,蜘蛛放弃得更快。但要注意区分:内容确實下架了,就老老實實返回 404 或 410;内容還在,只是被隐藏或需要登入,返回 404 只會让頁面從索引里白白消失。還有一種情况是頁面被誤判為不存在,通常是路由或缓存配置寫错,需要對着日誌一條條核。
5xx 與超时:蜘蛛會先降低期待
偶尔一次 500、502、503,蜘蛛通常會稍後重试,不用太紧張。真正的問题在于持續性的 5xx:如果多個頁面反复返回错誤,蜘蛛會認為這個站点不稳定,主動降低訪問频率,等它想再来时,新内容可能已经排队很久了。
- 計划内维護,用 503 加 Retry-After 头,明确告诉蜘蛛多久後再来,比直接断開连接好。
- 响應時間尽量控制在几百毫秒級,個別重頁面也不要拖到十几秒,蜘蛛的等待是有上限的。
- 頁面体积、第三方脚本、未優化的資料库查询,都會体現在响應時間上,最终体現在抓取节奏上。
限流與 WAF:別把蜘蛛和攻击流量一起拦
為了扛住压力,很多站点會加限流、频率控制和 WAF。規則寫得太粗,蜘蛛會被一起挡在门外,表現為訪問量骤降、返回 429 或直接连接被拒。几個可以检查的点:
- 按 UA 一刀切封禁,容易誤伤正常蜘蛛,也容易被伪造 UA 绕過,意义有限。
- 限流阈值要给出足够的余量,让正常抓取不被触發,而不是等触發了再放白名單。
- CDN 和源站的規則要一起核對,有时源站放行、邊缘节点照样拦。
- 如果確認是压力太大,優先做降频而不是封 IP,让蜘蛛慢慢来,比彻底不来好。
一份可以照着走的自查清單
- 抽查一批已收錄頁面,確認返回碼分布是否正常,有没有大量 200 的空壳頁。
- 清理跳轉鏈,確認首頁、栏目頁、詳情頁各自一跳到位。
- 找出所有返回 5xx 频次較高的 URL,逐個定位是應用报错還是资源問题。
- 核對 robots.txt、限流規則、WAF 白名單是否互相打架。
- 對比抓取日誌里的訪問量和响應時間,看是否有同步下滑的時間段。
服務器层面的稳定,不會直接換来收錄,但它决定了蜘蛛愿不愿意常来、能不能顺利把頁面讀走。内容做得再好,门一直關着,也没有机會被看到。