蜘蛛进到入口页的第一件事不是读内容,而是看服务器返回的状态码。这个三位数字决定了它接下来是继续解析 HTML、顺着 Location 头跳走,还是把这条 URL 记进「暂时不再来」的名单。很多蜘蛛池看起来铺了大量入口页,实际能被正常抓取的却没几个,问题往往就出在状态码上。
状态码在蜘蛛眼里的基本分类
可以把状态码理解成蜘蛛和服务器之间的第一句对话,不同区间代表完全不同的态度:
- 2xx:请求成功,蜘蛛会继续解析页面内容,并从中提取链接。
- 3xx:内容在别处,蜘蛛会按 Location 头继续请求新地址。
- 4xx:资源不存在或请求方有问题,蜘蛛会逐步降低该 URL 的访问频率。
- 5xx:服务器自身出错,属于临时状态,但持续出现会被当成站点不稳定。
- 429:明确的限速信号,蜘蛛通常会退让一段时间再来。
200 不等于这个页面有价值
最容易被误读的是 200。服务器只要没报错就返回 200,但蜘蛛拿到的是一个空壳页面、一个只有几行占位文字的模板页,还是一个真正能读的入口页,它的判断完全不同。
软 404:状态码 200,内容却是空页
入口页因为采集失败、模板渲染异常或数据库查询为空,最终输出了一篇没有正文的页面,状态码却仍是 200。蜘蛛会把它当作正常页面抓走,但抓完之后很难判断主题,回访意愿自然下降。检查方法很简单:随机抽几十个入口页,统计去掉标签后的正文字数,如果相当比例低于一两百字,先别急着加量。
301 和 302:跳转链越长,损耗越大
入口页把蜘蛛引向目标页,靠的就是跳转。这里有几个常见的坑:
- 跳转链过长:A 跳 B,B 跳 C,C 再跳 D。蜘蛛会跟,但每一步都在消耗抓取预算,链尾页面被完整抓到的概率明显下降。
- 把 302 当 301 用:临时跳转长期存在,蜘蛛会反复回来确认原始地址,浪费回访次数。
- 跳到不相关域名:入口页讲一个主题,跳过去却是完全无关的站点,这条链接的信任分会打折。
- 跳到 4xx 或 5xx:等于把蜘蛛带进死胡同,反复几次之后入口页本身也会被降频。
经验上,从入口页到目标页的跳转最好控制在两跳以内,并且全链路都以 200 收尾。
404 与 410:让蜘蛛放弃也要讲方式
入口页下线了,有人直接删文件返回 404,有人返回 410,两者都能让蜘蛛移除记录,410 的态度更明确一些。问题在于蜘蛛池里的入口页多是批量生成的,下线时如果只是停掉域名、让请求一直超时,蜘蛛拿到的是连接错误而不是 404,它既不会清理旧记录,也不会把这条 URL 归入已消失,只会不断重试。
建议下线时留一个明确的 404 或 410 响应,并保持一段时间,等抓取日志里该路径的请求明显减少,再彻底关闭。
403 和 5xx:最容易被忽略的减分项
403 通常来自防火墙、防盗链规则或权限配置,蜘蛛看到它会理解为这个地址不欢迎抓取,长期持续可能影响整站抓取。5xx 则是服务器过载、数据库连接失败、脚本超时等问题的表现。偶尔几次没关系,但如果抓取日志里 5xx 的比例长期偏高,蜘蛛会主动降低对这个站点的抓取频率,这时候入口页铺得多反而是负担。
429 与 503:限速时的正确表达
服务器扛不住时,直接超时或断开连接是最差的选择。更好的做法是返回 429 或 503,并在 Retry-After 头里给出建议等待秒数。蜘蛛多数会参考这个提示,退让一段时间再来,既保住了服务器,也保住了抓取关系。
日常排查怎么做
- 从访问日志里按状态码分组统计,先看 4xx 和 5xx 的占比。
- 抽一批返回 200 的入口页,检查正文长度和主题是否正常。
- 跟踪一条完整链路:入口页到跳转到目标页,确认每一跳的状态码。
- 把长期没有抓取、状态码又异常的入口页整理出来,决定修复还是下线。
- 每次批量上线新入口页后,隔几天再复查一次状态码分布。
状态码解决不了蜘蛛来不来的全部问题,但它是成本最低的一道检查。入口页铺量之前先把这道关守住,后面看抓取日志时才不会被一堆无意义的报错淹没。