搜索抓取

重定向链与抓取路径:多跳跳转怎样消耗 URL 发现机会

蜘蛛在抓取 URL 时如果遇到 301/302 跳转链,每一跳都要重新排队请求,最终页面被发现的时间被推迟。跳转层级越多,抓取预算消耗越大。本文整理常见跳转来源、对 URL 发现的影响,以及把跳转链缩短到一跳的检查方法。

搜索抓取

重定向链与抓取路径:多跳跳转怎样消耗 URL 发现机会

蜘蛛发现一个 URL 后,并不是每次都直接打开页面内容。如果这个地址返回 301 或 302,蜘蛛会先读取响应头里的 Location,把新地址放进待抓队列,之后再来一次请求。这个过程每多一跳,就多消耗一次抓取机会,最终页面的首次访问时间也会往后推。

蜘蛛遇到重定向时,抓取过程发生了什么

以 A 到 B 到 C 的跳转链为例,蜘蛛请求 A,拿到 301 指向 B;它需要重新安排对 B 的请求;B 又返回 301 指向 C,于是还要再安排一次对 C 的请求。对蜘蛛来说,A 和 B 都没有可索引的内容,真正的内容在 C。这两次中间请求占用了抓取预算,却没有带来新的页面内容。

如果跳转是由 JavaScript 或 meta refresh 触发的,蜘蛛的处理会更保守。它可能不会像处理 HTTP 跳转那样立即跟随,尤其当脚本依赖用户点击或前端路由时,抓取路径可能直接停在中转页。

多跳跳转通常从哪里来

  • 协议跳转:http 跳 https,如果服务器配置层层叠加,可能先跳到另一个 http 地址,再跳到 https。
  • 域名跳转:带 www 与不带 www 之间来回跳,或者旧域名先跳新域名,新域名又跳另一个规范域名。
  • 路径格式跳转:末尾斜杠、大小写、重复斜杠、URL 参数清理,各自产生一次跳转。
  • 内链和 Sitemap 仍指向旧地址:页面已经迁移,但导航、面包屑、文章正文里的链接没有更新。
  • CDN 或反向代理额外加了一层跳转,和源站配置叠加成多跳。

这些来源单独看似乎只是一个小问题,叠加起来就会让一个 URL 的抓取路径变长。

跳转链怎样影响 URL 发现

蜘蛛在页面里发现链接后,会评估是否值得跟进。如果某个入口的链接需要经过多次跳转才能到达有效内容,它分给这条路径的抓取资源会变少。对站点来说,表现就是新页面被发现的间隔变长,日志里同一目标地址出现多条 301 记录,而最终页面迟迟没有抓取记录。

更常见的情况是抓取预算被中间地址占据。蜘蛛每次来访都先访问旧地址,被跳转后可能中断,或者只抓取了跳转链的前半段。最终页面的内容更新、内链传递和后续 URL 发现都会受到影响。

重定向不是错误,但跳转链越长,蜘蛛在这条路径上的有效抓取比例越低。

把跳转路径缩短到一跳

  1. 在服务器或 CDN 层做一次性跳转,让旧地址直接指向最终地址,不要 A 到 B、B 到 C 层层转发。
  2. 更新站内所有链接,包括导航、面包屑、正文链接、分页、Sitemap 和 RSS,让它们直接使用最终 URL。
  3. 对已经迁移的旧地址,保留一个 301 到最终地址即可。不要再让旧地址跳到另一个旧地址。
  4. 检查反向代理、负载均衡和 CMS 插件是否自动添加了跳转规则,避免和源站规则重复。
  5. 用命令行或抓取工具检查响应头,确认从入口到最终内容只有一跳。重点检查首页、栏目页和近期改版的频道。

临时跳转和永久跳转的分工

301 表示永久迁移,适合域名更换、协议切换和路径重构。302 表示临时跳转,蜘蛛可能继续保留原地址并反复请求。如果是短期活动页或临时维护,用 302 可以理解;但如果跳转状态持续几个月,最好改成 301,并同步更新内链。

307 和 308 会保留请求方法,内容页一般不需要用到。多数场景下,把 301 用对、把跳转链控制在一跳以内,比研究状态码细节更有实际意义。

日常巡检可以看什么

在抓取日志里筛选 301 和 302 状态,观察同一个目标地址是否被多次跳转到达。再看服务器访问日志,如果旧地址的请求量长期高于最终地址,说明内链还没有彻底更新。定期检查跳转链,尤其是在换域名、换协议、改 URL 结构之后,能避免 URL 发现被不必要的中间请求拖慢。