蜘蛛来抓页面时,服务器返回什么状态码,直接决定了它下一次还会不会来、来得有多勤。很多人只盯着 404 和 301,其实 403、429、503 这几个码对抓取节奏和收录进度的影响同样明显,而且更容易被当作“服务器小毛病”忽略过去。
先按性质把状态码分一分
从抓取的角度看,常见返回可以分成三类:
- 内容类:200 正常返回,301、302 指向新地址,蜘蛛按正常流程处理。
- 拒绝类:403 禁止访问、401 需要认证。这是明确的“不给你看”,不是临时故障。
- 临时类:429 请求过多、500、502、503、504。服务器当下给不出结果,理论上稍后会恢复。
这三类在蜘蛛眼里的含义完全不同,处理方式也应该分开。
403:更像是长期关门
403 常出现在两种情况:一是防火墙或 WAF 把蜘蛛的 IP 拦了;二是目录权限配置出错,整站或静态资源都不给访问。蜘蛛拿到 403 后不会反复硬闯,通常会降低对该目录甚至整个站点的抓取频率。如果持续存在,已经进入索引的页面也可能因为长期无法验证而逐渐失去展示机会。所以看到日志里成片的 403,先查拦截规则,别当成小事。
429:显式限流,蜘蛛能看懂
429 是服务器主动说“你请求太多了”。主流蜘蛛识别到这个码后会主动降速,这本身不算坏事。问题在于,如果站点长期对蜘蛛返回 429,抓取速率会被一直压在一个很低的水位,新页面被发现和抓取的时间被拉长,这就是抓取预算被削掉的表现。比较合理的做法是给搜索引擎蜘蛛单独放宽限流,而不是和普通用户共用同一套频率阈值。
另外,返回 429 时如果能带上 Retry-After 头,告诉对方多久之后再试,效果会比干巴巴地丢一个状态码好得多。
503:临时维护可以,长期不可用不行
计划内的停机维护,返回 503 并带上 Retry-After 是标准做法,短期几天一般不会造成收录上的损失。风险在于“临时”变成常态:有些站点因为数据库压力大,随机对部分请求返回 503,这种不稳定状态会让蜘蛛对站点质量打折扣,从而减少抓取。如果 503 是偶发的,最好在日志里统计它的比例,而不是只看“有没有出现过”。
从日志里该怎么看这几个码
建议按下面的顺序看,避免被总数稀释掉问题:
- 先按状态码分组,看 403、429、5xx 各自占蜘蛛总请求的比例。
- 再看这些错误集中在哪些目录或哪些 URL 模板上,是全局还是局部。
- 看时间分布,是持续存在,还是集中在某个时间段,比如备份窗口、活动高峰。
- 对照同一时段的服务器负载与防护日志,确认是配置问题还是容量问题。
几条可以落地的做法
- 给搜索引擎蜘蛛单独放行,不要让它和爬虫防护规则硬碰。
- 维护窗口尽量短,用 503 加 Retry-After,不要用 200 返回一个“维护中”页面,那等于软 404。
- 429 的触发阈值按目录区分,静态资源可以宽松,动态接口收紧。
- 修复之后别指望立刻恢复,抓取频率的回升通常需要一段观察期。
状态码不是给用户看的装饰,它是蜘蛛判断“这个站值不值得再来”的直接依据。把 403、429、503 当成配置问题而不是内容问题来处理,往往比改十次标题更有效。