很多站点把收录问题都归结到内容上,但爬虫每天做的第一件事其实是发请求。请求这一步没走顺,后面的质量判断根本轮不到。服务器返回什么、响应多快、有没有被拦住,都会写进蜘蛛对这个站点的印象里。
抓取失败和收录被拒,是两件事
抓取失败,意味着蜘蛛这次没拿到页面,过一阵可能还会再来;收录被拒,则是页面已经拿到、也看完了,最后决定不留。状态码层面的问题大多属于前者。它的麻烦不在于一次失败,而在于会拉长从发现到收录的链路,还会影响站点能分到多少抓取额度。
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 白名单是否互相打架。
- 对比抓取日志里的访问量和响应时间,看是否有同步下滑的时间段。
服务器层面的稳定,不会直接换来收录,但它决定了蜘蛛愿不愿意常来、能不能顺利把页面读走。内容做得再好,门一直关着,也没有机会被看到。