搜索抓取

搜索蜘蛛抓取:重定向链过长与跳转损耗的排查顺序

重定向本身是正常的 URL 迁移手段,但链路过长会让蜘蛛在跳转中消耗抓取预算,甚至把中间地址当成独立入口。本文按日志与响应头、最终地址一致性、内链与 Sitemap 写法、边缘层跳转配置的顺序,梳理重定向链的排查与收敛方法。

搜索抓取

搜索蜘蛛抓取:重定向链过长与跳转损耗的排查顺序

为什么重定向会影响 URL 发现

重定向是常见的 URL 迁移手段,本身并不是错误。但每次跳转都是一次独立的请求:蜘蛛需要请求初始地址,读取响应头里的 Location,再发起下一次请求,直到落到最终返回 200 的页面。如果链路有三四跳,或者中途出现循环、跨域、协议切换,抓取节奏会被拖慢,部分中间地址还可能被当成独立入口记录,导致同一内容出现多个被抓取地址。

先确认跳转链的真实长度

排查的第一步不是改配置,而是先看清现有链路。可以用命令行工具或浏览器开发者工具观察完整跳转过程。

  • 使用 curl -I -L 观察每一跳的状态码和 Location 头。
  • 记录从初始 URL 到最终 URL 的层数,站内入口一般建议控制在一跳以内。
  • 检查是否存在 http 到 https、带 www 到不带 www、带斜杠到不带斜杠的连环跳转。
  • 区分 301、302、307、308,临时跳转可能让蜘蛛反复回访中间地址,不利于入口收敛。

检查最终地址是否唯一且稳定

重定向的终点应该是一个固定、可直接访问的 URL,而不是因设备、地区或登录态变化的动态地址。终点不稳定时,蜘蛛每次拿到的目标可能不同,URL 发现就会分散。

  • 用不同 UA 和不同线路请求同一入口,对比最终地址是否一致。
  • 确认最终地址返回 200,而不是再次跳转或返回软 404 页面。
  • 检查 canonical 指向是否与重定向终点一致,避免两套信号互相拉扯。
  • 若终点依赖 Cookie 或会话,考虑为蜘蛛提供稳定的默认版本。

排查内链与 Sitemap 的写法

很多跳转损耗来自站内引用。内链、导航、分页、RSS 和 Sitemap 里如果写的是旧地址或中间地址,蜘蛛每次都要多走一跳。

  1. 全站抽取内链,筛选出会返回 301 或 302 的链接。
  2. 优先把导航、面包屑、栏目页模板中的旧链接替换为最终地址。
  3. Sitemap 中只保留最终 URL,不要提交跳转地址。
  4. 检查是否存在链式重定向,例如 A 到 B 再到 C,应尽量改为 A 直接到 C。

服务器与边缘层的跳转配置

跳转可能发生在源站、CDN、负载均衡或 WAF 层。多层各自配置跳转时,容易出现叠加,最终表现就是链路变长。

  • 分别测试直连源站和经过 CDN 的响应,比较跳转层数是否一致。
  • 检查 CDN 规则、HTTPS 强制跳转、尾斜杠规则是否重复配置。
  • 确认 WAF 没有把蜘蛛请求重定向到验证页或拦截页。
  • 在日志中观察 3xx 状态码占比及其对应 UA,定位跳转集中的目录。

观察与收敛

调整后不要期待立刻出现变化。可以在服务器日志里按周对比 3xx 请求数量、中间地址的抓取次数以及最终地址的抓取占比,观察入口是否逐步收敛到最终 URL。

重定向链的治理目标不是消灭跳转,而是让每个入口都能用最少的请求到达最终内容。链路越短,URL 发现和抓取节奏越可控。

如果站点规模较大,可以按目录分批处理,先收敛高频被抓取的旧地址,再处理长尾入口。每次调整后保留一份 URL 映射表,方便后续核对,也便于在改版或换域名时复用。