一次跳转,就是一次额外的抓取请求
蜘蛛拿到一个 URL 后,如果服务器返回 3xx,它通常不会直接放弃,而是沿着 Location 头继续请求下一个地址。这意味着跳转链上的每一跳都要占用一次 HTTP 请求。三跳的跳转链,等于用三次请求换回一个最终页面,而站点并没有因此多出一页内容。
不同跳转方式,蜘蛛的耐心不一样
301 与 308:长期有效
301(永久)和 308(永久且保持请求方法)会被理解为地址已经换了,蜘蛛一般会记录这层关系,并把发现信号传递到目标 URL。规范做法是让旧地址一次跳到位,而不是逐层转。
302、303、307:临时跳转
临时跳转的语义是这次先到那边,蜘蛛会跟,但通常不会把旧 URL 从索引里彻底替换掉。如果长期用 302 做永久迁移,旧地址会持续被抓取、持续跳转,形成长期的额外开销。
meta refresh 与 JS 跳转
这两类跳转需要先拿到 HTML,再解析或渲染才知道下一步去哪。相比 HTTP 层的 3xx,它们被识别得更晚,也更容易在渲染环节多排一次队。
跳转链常见的几种来源
- http 到 https、带 www 与不带 www 没有一次性收敛,形成 http 非 www → https 非 www → https www 的串联。
- 栏目改版时,旧地址先跳到过渡页,过渡页再跳到新地址,中间多了一环。
- 末尾斜杠、大小写、默认端口等写法不统一,一层层跳过去。
- CDN 或反向代理层配置了额外的跳转规则,与源站规则叠加。
- 短链、推广链接、站内跳转页长期挂在页面上。
跳转链对 URL 发现的影响
跳转本身不会阻止 URL 被发现,但会影响发现的速度和深度。当内链大量指向需要跳转的旧地址时,蜘蛛实际走到目标页的路径变长了,同一份抓取配额能覆盖的页面数就下降。深度较大的页面本来发现就慢,再叠加两跳,很容易长时间停留在已发现、未抓取的状态。
另外,跳转链会让日志里出现大量 3xx 记录,看起来抓取很活跃,有效抓取却不多。做抓取分析时,如果把 3xx 计入有效请求,会高估蜘蛛对站点的覆盖程度。
自查与收敛的具体做法
- 从日志里筛出 3xx。按 URL 聚合,看哪些地址被反复请求、每次跳到哪。
- 区分一跳与多跳。一跳且目标明确,通常可以接受;三跳及以上,基本都值得处理。
- 检查跳转方向是否一致。避免 A 跳 B、B 又跳 A 的循环,这类循环会让蜘蛛在同一组地址上反复消耗。
- 把常见变体统一到唯一规范地址。协议、主机名、末尾斜杠一次性收敛,减少中间跳。
- 更新站内链接。把内链、导航、Sitemap 里的旧地址直接改成最终地址,让蜘蛛第一跳就落在目标页上。
- 确认跳转没有被 CDN 缓存放大。边缘节点如果缓存了旧的跳转响应,源站改了规则,蜘蛛仍可能拿到老版本。
判断标准很简单:如果一个 URL 需要两跳以上才能到最终页,而且在站内被大量引用,那它带来的成本往往大于收益,值得优先清理。
什么时候可以保留跳转
旧 URL 有外部链接、有用户收藏、有历史访问时,保留一次 301 是合理的,它保护的是访问体验和外链价值。需要避免的不是跳转本身,而是跳转链:把多跳压成一跳,把临时跳转改成永久跳转,把跳转目标固定下来,蜘蛛的路径就会短一截。