状态码是蜘蛛最先读到的信号
蜘蛛抓一个入口页,还没解析正文,就先拿到了响应头里的状态码。它决定了蜘蛛接下来怎么处理这个 URL:当作正常页面、当作已失效,还是当作临时故障稍后再来。很多站群把注意力放在正文和外链上,状态码却常年只有一种——200,这会让蜘蛛的判断依据失真。
200:正常,但别用来掩盖问题
200 表示页面可正常访问,是入口页最常见的目标状态。问题在于,有些站点把不该给 200 的情况也返回 200:
- 入口页已停用,但仍返回 200 加一段“页面不存在”的提示文字,也就是软 404。
- 服务器出错,程序捕获异常后返回了一个空白页,状态码仍是 200。
- 需要登录或验证的页面,返回 200 但正文只有几句提示。
这几种情况蜘蛛会认为页面有效,于是继续回访、继续消耗抓取预算,而实际内容并没有变化。状态码要跟页面真实状态一致,这是最基本的一条。
404 与 410:入口页退役时的两种表达
入口页下线,通常有两个选择:
- 404:页面不存在。蜘蛛会逐步降低回访频率,但不会立刻放弃。
- 410:明确表示永久移除。蜘蛛通常比 404 更快停止回访。
如果只是临时下线、之后可能恢复,不要用 410。如果确定这个入口页不再使用,410 能让蜘蛛更快把注意力挪走。两者都不要返回 200。
有些站点为了“保持页面数量”,把所有失效入口页都跳转到首页。这种做法短期看状态码是 301 或 200,长期看会让蜘蛛把大量 URL 都指向同一个页面,浪费抓取额度。
403:拒绝抓取要谨慎使用
403 表示服务器理解请求但拒绝执行。它常见于 IP 封禁、地区限制、UA 拦截。对蜘蛛来说,偶发 403 影响不大,但如果入口页长期返回 403,抓取频次会下降,甚至被当作不可访问资源处理。
用防火墙误伤蜘蛛的情况并不少见。如果发现抓取量突然掉了一截,先查一下是不是把蜘蛛的 IP 段拦了。
429 与 503:告诉蜘蛛“慢一点”,而不是“别来了”
抓取压力大时,很多站点的第一反应是直接返回 403 或断开连接。更合适的做法是:
- 返回 429 Too Many Requests 或 503 Service Unavailable。
- 在响应头里带上 Retry-After,给出一个建议等待时间。
- 等服务恢复后,再让同一批 URL 正常返回 200。
这样蜘蛛知道是临时状态,会按建议延后重试,而不是把这个入口页标记为长期不可用。注意 503 不要长期挂——连续多天返回 503,站点整体抓取节奏都会受影响。
500:偶发可以,持续会被记账
500 属于服务端错误。单次出现蜘蛛一般会重试,但如果一个入口页反复 500,或者整站大面积 500,蜘蛛会降低抓取频率,恢复需要时间。排查顺序通常是:数据库连接、程序超时、缓存击穿、磁盘写满。
常见误区
- 把 404 页面做成“推荐内容页”,还返回 200,结果蜘蛛抓到的是一堆无意义页面。
- 限速时直接返回 403,让蜘蛛以为整站拒绝抓取。
- 所有异常统一返回 200 加一段提示,日志里看不到任何错误。
- 入口页改版后旧地址返回 200 但内容为空,蜘蛛持续回访空页面。
- 用 302 临时跳转到错误页,长期不修正。
一些落地建议
- 定期按状态码统计蜘蛛抓取日志,看 200、404、5xx 各占多少。5xx 比例持续偏高,说明服务端有问题。
- 入口页下线时,先决定是 404 还是 410,再统一处理,不要一半一半。
- 限速优先用 429 或 503 加 Retry-After,而不是封 IP。
- 状态码和页面内容保持一致,不要让蜘蛛读到 200 却看到一个错误提示页。
状态码只是蜘蛛判断页面的一个信号,把它写对,不会直接带来收录,但能减少无效抓取和误判,让后续的内容和链接工作更容易被正常处理。