搜索抓取

重定向链与抓取路径:蜘蛛多跳一次,抓取预算就少一点

用户感觉不到的 301、302,对蜘蛛来说是一次次独立请求。跳转链从哪来、多一跳要付出什么代价、日志里怎么看出来、如何把链条收敛成一步到位,这篇文章按排查顺序讲清楚。

搜索抓取

重定向链与抓取路径:蜘蛛多跳一次,抓取预算就少一点

蜘蛛走重定向,和用户点链接不是一回事

用户在浏览器里遇到 301 跳转,几乎没感觉;蜘蛛不一样,每一次跳转对它来说都是一次新的请求。从 A 跳到 B,再跳到 C,才算拿到最终页面。中间的这几跳都要占用抓取预算,也会拉长服务器日志里的时间线。

搜索引擎对跳转链有跳数上限(常见说法是单条链最多跟若干跳),超过以后,后面的地址就不会继续跟。也就是说,链子拖得太长,末端页面就是“看得见、走不到”。

跳转链通常从哪来

  • 协议切换:http 到 https,老页面、老外链还指着 http 地址。
  • 域名层级:非 www 跳 www,或反过来,两个方向同时存在就可能成环。
  • URL 规范化:大小写、尾斜杠、index.html 之类的写法差异,各自配了一条跳转。
  • 改版或换域名:旧目录整体跳新目录,新目录又跳一次到更细的地址。
  • 设备与语言判断:中间层脚本或服务端先判断,再跳到对应版本。
  • CDN、WAF、负载均衡配置:不带 CDN 域名的请求被弹回主域名。

多一跳,代价在哪里

最直接的是抓取预算被摊薄。蜘蛛一次访问本来可以拿回一个页面的内容,现在变成了“跳一次、再跳一次、最后才拿到”。同样的时间窗口里,它能覆盖的 URL 数量就少了。

日志里的典型表现是:同一批 URL 反复出现 3xx 状态,却很少看到紧接着的 200;或者只有起点被记录,终点页面的抓取次数明显偏低。

抓取预算不是无限的。跳转本身不产出内容,它只是把预算花在“找路”上。

几个容易忽略的连带问题

  • 跳转过程中参数可能被丢掉,带参地址跳到最后变成无参地址。
  • 链条里只要有一环返回 404、403 或 5xx,后面的地址就断在这里。
  • 跳转目标本身又是一个跳转,缓存层各存一份,蜘蛛每次拿到的落点可能不同。
  • 站内链接仍指向旧的跳转地址,等于每次访问都强制多走一跳。

怎么查、怎么收

先把链条画出来,再决定动哪一段。可以用下面的顺序排查:

  1. 日志里筛出 3xx,统计哪些 URL 出现频率高、目标指向哪里。
  2. 用抓取工具或命令行请求批量跑一遍,看完整跳转链有几跳、终点状态码是多少。
  3. 检查 Sitemap、canonical、内链和外链,确认它们写的是起点还是终点。

收敛的思路通常不复杂:

  • 规则合并,一步到位:http 直接跳到最终的 https 主域名,不要拆成两段。
  • 入口统一:内链、Sitemap、canonical 一律写最终地址,让蜘蛛在入口处就不需要跳。
  • 旧路径保留但降权:跳转仍然存在,用来接住老外链,但不要让站内链接继续依赖它。
  • 落点必须可抓取:跳到 404、登录页或纯 JS 渲染的空壳页,等于白跳一趟。

服务器稳定性也在其中。5xx 一多,跳转链会在半路断掉,蜘蛛下次再来,未必还记得终点在哪。需要说明的是,跳转链并不是越少越好,而是每一步都要有明确目的:该接住的老地址接住,该省掉的中间环节省掉。