搜索抓取

重定向链路里的蜘蛛抓取:跳转层数、循环与落地地址的选择

重定向对抓取的影响常被忽略:一次跳转就是一次额外请求,层数过深、形成循环或终点错位都会消耗抓取预算。本文梳理 301/302、meta refresh 与脚本跳转的区别,并给出从日志筛出 3xx、逐跳验证、修正内链与 Sitemap 的排查顺序。

搜索抓取

重定向链路里的蜘蛛抓取:跳转层数、循环与落地地址的选择

站点改版、换域名、调整目录结构时,最容易留下痕迹的地方就是重定向。对蜘蛛来说,每一次跳转都是一次额外的请求:抓到入口 URL、拿到 3xx 状态码、再去访问新地址、最后才拿到内容。跳转本身不是问题,问题在于链路是否清晰、层数是否可控、终点是不是它真正想要的那个页面。

一次跳转到底多花了什么

蜘蛛访问 A,得到 301 到 B。它对 A 的这次抓取基本没有产生内容价值,还要把 B 重新排进队列再抓一次。如果 B 又跳到 C,成本继续叠加。链路越长,单位时间内真正被解析的页面就越少,抓取额度被消耗在空转上。所以判断标准可以很朴素:能让蜘蛛一步到位的,就不要让它走三步。

不同重定向方式,蜘蛛的反应不一样

301 / 308:永久迁移

这类跳转表达的是“原地址以后不再使用”。蜘蛛通常会把权重与索引信号转移到目标地址,并在后续抓取中直接使用新地址。用于域名更换、目录调整、URL 规范化是合适的。但要注意终点应当稳定,不要今天跳 A、明天跳 B,否则新地址迟迟收敛不下来。

302 / 307:临时跳转

临时跳转意味着原地址还会回来。如果长期用 302 做永久迁移,蜘蛛可能反复回来抓原地址,形成“抓取—跳转—再抓取”的循环,新旧地址都不容易稳定。常见情况是活动页、登录页挂着 302,活动结束之后忘了改回静态地址。

meta refresh 与脚本跳转

HTML 里的 meta refresh 和 JavaScript 跳转,需要蜘蛛先渲染页面才能识别,链路更不可控,中途出错的概率也更高。能用服务端 301/302 解决的,尽量不要交给前端处理。

跳转链路上最容易出问题的三种情况

  • 链路太长:A→B→C→D 层层转,任何一环超时都会让整条路径作废。
  • 跳转循环:A→B→A 这种互指,蜘蛛会在里面反复消耗,日志中表现为同一批 URL 高频出现却始终拿不到 200。
  • 终点错位:旧详情页 301 到分类首页,或者跳到 404、跳到需要登录的页面。蜘蛛拿到了 200,但拿到的不是原来那个内容。

动手排查的顺序

  1. 从访问日志里筛出状态码为 3xx 的 URL,按出现频次排序,先处理量大的那批。
  2. 对每个 URL 手动跟随跳转,记录跳转层数、每一跳的状态码和最终落地地址。
  3. 把层数超过两跳、终点与来源主题无关、或终点本身是 404/5xx 的单独列出来。
  4. 检查 Sitemap、内链和外部链接里是否还在使用旧地址,避免蜘蛛持续被引向跳转入口。
  5. 修正后保持观察一段时间,看日志中这批 URL 的抓取是否逐渐转向新地址。

和内链、Sitemap 的配合

重定向是补救手段,不是常规路径。站内链接、Sitemap、面包屑里应当直接写新地址,让蜘蛛第一次就走对。如果内链还指着旧地址,即便做了 301,蜘蛛每次仍要多走一步;量大了,这部分损耗会相当明显。另外,Sitemap 中尽量只放最终可访问的 URL,不要把跳转地址也写进去。

服务器层面的连带影响

跳转链路会放大服务器的不稳定。原本一次请求能完成的事变成两次三次,任何一次连接超时、TLS 握手失败或响应过慢,都会让整条路径失效。批量迁移时,建议把跳转规则写得尽量扁平,并确认跳转目标所在的服务能承受叠加后的请求量。

判断重定向是否健康,可以问自己一句:如果我是蜘蛛,从入口到内容要几次请求,中途有没有可能拿不到东西。

重定向本身不会带来收录,也不会因为写得规范就提升排名。它更像是把路修直——让蜘蛛用更少的成本走到该去的地方,剩下的仍然取决于内容质量与站点的长期稳定。