搜索抓取

重定向链与跳转次数:蜘蛛跟到第几跳会放弃

重定向链会让蜘蛛多走几跳,消耗抓取预算,也可能在中途放弃。本文说明 301、302、307、308 的抓取差异,跳转链多长需要留意,以及如何用响应头和日志排查多跳、回环与参数叠加问题,把旧地址一步到位地指向最终 URL。

搜索抓取

重定向链与跳转次数:蜘蛛跟到第几跳会放弃

站点改版、域名迁移、URL 规则调整,都会产生重定向。重定向本身不是问题,问题是它被一层层叠加起来,形成一条很长的跳转链。蜘蛛每跟一跳,都要重新发起请求、等待响应,抓取预算和时间就这样被消耗掉。

蜘蛛遇到重定向会怎么走

主流搜索蜘蛛能识别 301、302、307、308 等状态码,并跟随 Location 指向的新地址。301 表示永久迁移,302 表示临时跳转,307 和 308 则强调请求方法保持不变。对蜘蛛来说,它们都会产生一次额外的抓取动作。

如果 A 跳到 B,B 又跳到 C,C 才是最终页面,那么蜘蛛实际要处理三次响应。跳数越多,放弃的概率越高。蜘蛛通常会在有限次跳转后停止跟随,把该 URL 标记为抓取异常或重定向链过长。

多长的跳转链算过长

没有统一的硬性数值,但经验上,一跳能到终点是理想状态,两跳已经需要留意,三跳以上就值得排查。链路过长时,蜘蛛可能只抓到中间页,最终页面反而迟迟不被发现;即使最终抓到了,传递的权重和更新信号也会被稀释。

  • 旧域名 → 新域名 → 加 www → 换 https → 改路径,五跳叠加很常见。
  • 列表页 302 到登录页,登录页再 302 回列表页,形成回环。
  • CDN、负载均衡、反向代理各自加一条跳转规则,运维和 SEO 互不知情。
跳转链的每一跳都是一次独立的请求。对蜘蛛而言,这不是用户无感的体验问题,而是实打实的抓取成本。

怎么排查跳转链

可以用命令行工具查看完整跳转过程,例如用 curl 的 -IL 参数跟随重定向并输出响应头;也可以从服务器访问日志中,统计同一 IP 段或同一 User-Agent 在短时间内连续访问的 URL 序列。重点看两件事:跳了几次,以及中间是否出现循环。

  1. 找出所有返回 3xx 的 URL,按 Location 指向画成链路图。
  2. 合并重复规则,把多跳改成直接 301 到最终 URL。
  3. 检查内链和 Sitemap,确认它们指向的是终点地址,而不是会跳转的旧地址。
  4. 对长期使用的 302,评估是否应该改为 301,避免信号模糊。

容易忽略的几个细节

重定向响应的正文通常不会被索引,但仍会占用传输时间。如果 3xx 页面返回了很大的 HTML 内容,蜘蛛还要下载和解析,建议尽量保持响应体为空或极简。

Location 使用相对路径虽然可行,但绝对 URL 更不容易出错。带参数的重定向也要注意:如果每次都追加一个追踪参数,最终地址会不断变化,蜘蛛可能把同一页面当成多个 URL。

另外要区分 HTTP 重定向与页面内的跳转。meta refresh 和 JavaScript 跳转不是 HTTP 层重定向,蜘蛛的处理方式不同,依赖它们做迁移并不可靠。能配置 301 的场景,优先用 301。

把跳转控制在可控范围

定期抽查重点 URL 的跳转次数,把链路长度当作一项基础指标来维护。改版或迁移时,提前规划好目标地址,让旧地址一步到位;上线后再用日志确认蜘蛛是否沿着预期路径走到了终点。链条越短,蜘蛛越省力,新页面被发现的路径也越清晰。