搜索抓取

蜘蛛跟着重定向走多远:跳转链对 URL 发现的实际影响

重定向本身不是问题,问题是链太长、指向不明。本文讲清搜索蜘蛛遇到 301、302、多跳链和循环跳转时的处理差异,梳理重定向链最常见的几种来源,并给出一套从单页到全站的排查步骤,帮助你把跳转收敛到一跳以内,让内链和 Sitemap 里的 URL 更快被正确发现。

搜索抓取

蜘蛛跟着重定向走多远:跳转链对 URL 发现的实际影响

重定向在日常运维里太常见了,常见到容易被忽略。它本身不是错误,问题往往出在链太长、指向不清晰。对搜索蜘蛛来说,每一次跳转都意味着多一次请求、多一次等待,也多一个可能中途放弃的理由。把跳转收敛到一跳以内,通常比事后补救更省力。

一跳是常态,链式才是负担

单个 301 跳转是最干净的形态:旧地址明确告诉蜘蛛新地址在哪,权重和信号都能传递过去。蜘蛛基本会顺着走,并在之后优先抓取目标地址。

但当跳转变成两跳、三跳甚至更多,情况就不一样了。蜘蛛需要按顺序逐个请求,每一跳都消耗抓取资源,也增加超时或中断的概率。链越长,最终目标 URL 被及时发现的确定性越低。这并不是说蜘蛛一定不走,而是你主动给自己加了不确定性。

蜘蛛遇到跳转时的几种走法

单跳 301

最理想的情况。蜘蛛读到响应头里的 Location,转到目标页面,把新地址纳入后续抓取计划。目标页如果是 200,整条链路就闭合了。

多跳 301 / 302 混合

http 跳 https、非 www 跳 www、旧目录跳新目录,如果这些规则没有一次性收敛,就会叠成一条链。蜘蛛通常会尝试跟进,但优先级会被压低,尤其是当链路末端还带参数或指向临时地址时。

302 与临时跳转

302 表达的是临时。如果长期用 302 指向正式地址,蜘蛛可能继续保留原地址,导致新旧两个 URL 同时被反复抓取,分散精力。需要永久迁移时,用 301 更明确。

循环跳转

A 跳 B、B 跳 A,或者跳到自己。蜘蛛走到一定程度就会停下,这一类 URL 基本等于无法进入索引,还会浪费抓取请求。日志里通常能看到同一 URL 反复出现的 3xx 记录。

重定向链通常从哪来

  • http 与 https 混用,且没有一次性 301 到最终形态
  • 带 www 和不带 www 的域名各自配置了一套规则
  • 结尾斜杠规则不统一,反复跳转
  • 栏目或目录改版后只做了局部跳转,旧地址跳中间页,中间页再跳新页
  • CDN、负载均衡、应用层各配了一次跳转,叠加成多跳
  • 短链、推广链接直接落在站内,形成额外一跳
  • 语言或地区判断在服务端做跳转,且判断条件不稳定

把链查清楚的具体步骤

  1. 从内链和 Sitemap 里各抽一批代表性 URL,尤其是改版过的栏目页和详情页。
  2. 用命令行工具查看完整跳转序列,而不是只看最终状态码。只看最终页是否 200,会漏掉中间的每一跳。
  3. 批量抽查同一模板下的页面,确认跳转规则是按模板生效还是逐页手工配置。
  4. 翻访问日志,统计 3xx 的占比和出现频率,重点看同一 URL 是否长期停在 3xx。
  5. 改动后重新跑一遍同样的清单,对比跳转条数是否下降。

和内链、Sitemap 一起收口

跳转链的问题,很多时候根源在内链和 Sitemap 里写的就是旧地址。修跳转只是止血,把源头改掉才算解决。

  • 站内链接直接指向最终 URL,不要指向会跳转的地址
  • Sitemap 中只保留最终形态的地址,不要混入重定向 URL
  • canonical 指向的地址要和跳转目标一致,避免两套规则互相打架
  • 改版时优先做一次性规则映射,把多层跳转压成一跳
  • 对已经确认废弃的地址,用 410 或 404 比无限跳转更清晰
判断标准可以很简单:从任何一个站内入口出发,到目标页面只应经过一次跳转。超过一次,就值得查一查规则是在哪一层叠上去的。

重定向不是需要彻底消灭的东西,而是需要被管理的路径。把跳转收敛、把内链和 Sitemap 里的地址统一到最终形态,蜘蛛发现 URL 的过程会顺畅很多。建议每隔一段时间抽查一次跳转序列,尤其在改版、换域名或调整 CDN 之后,这类问题最容易悄悄堆起来。