搜索抓取

一次跳转与多次跳转:重定向链怎么影响蜘蛛的抓取路径

蜘蛛每遇到一次跳转,都要重新发起一次请求。跳转链越长,到达同一个落地页消耗的抓取次数越多,URL 被发现和确认的速度也越慢。本文梳理多跳重定向的常见来源、对抓取路径的影响,以及把链路收口到一跳的排查与处理思路。

搜索抓取

一次跳转与多次跳转:重定向链怎么影响蜘蛛的抓取路径

跳转不是一次请求,而是一串请求

很多站点把 301 当成顺手处理的事情:http 跳 https、带 www 跳不带 www、旧目录跳到新目录、末尾斜杠再补一刀。对用户来说,浏览器地址栏一闪就过去了;对蜘蛛来说,每一次跳转都是一个独立的 HTTP 请求。蜘蛛需要先拿到 3xx 响应和 Location 头,再对新的地址发起一次请求,逐跳推进,直到拿到 200 才真正开始解析页面内容。

换句话说,一个要跳三次才能到达的地址,实际消耗的抓取次数是四次:三次 3xx 加一次 200,而不是一次。站点规模上来之后,这种放大效应会变得很可观。

多跳链路通常从哪里来

  • 协议与主机名叠加:http://example.com 先跳到 https://example.com,再跳到 https://www.example.com,最后才落到具体页面。
  • 结尾斜杠与大小写:服务器配置把 /a 跳到 /a/,把 /A 跳到 /a,链路上又多出两环。
  • 迁移残留:老域名、老目录、老参数地址没有一次性指向最终地址,而是先指到一个中间页。
  • 边缘层规则叠加:CDN 或反向代理先跳一次,请求回到源站后又跳一次。
  • 按 UA 或语言分支跳转:根据 User-Agent、Accept-Language 决定跳向哪个版本,蜘蛛和用户可能走到不同终点。
  • 短链与营销链接:为了统计点击,中间再套一层跳转页。

跳转链对抓取路径的三点影响

第一,请求数被放大。每多一跳,就多占一次抓取额度,而这些请求本身并不产出任何可索引的内容。

第二,发现变慢。蜘蛛沿着内链或 Sitemap 找到一个地址后,如果它是一条长链,那么真正落地页被确认的时间会被推后,新内容的更新信号也可能因此延迟被感知。

第三,分支不一致容易制造重复地址。同一个页面因为跳转条件不同,可能产生 HTTP 版、HTTPS 版、带 www 版等多个中间态,蜘蛛需要额外去判断哪一个是规范地址。

怎么把链路看清楚

单条地址的检查

用命令行工具跟踪完整链路,逐条记录状态码和 Location 指向,重点关注跳转次数超过一次、以及中途出现循环或多终点的情况。关键页面、频道入口页、Sitemap 中出现的地址,都可以抽样跑一遍。

批量观察

在服务器日志里筛选 3xx 状态码,按 Location 的目标地址聚合,看哪些目标被反复跳转、哪些链路的层级最深。比起盯单个 URL,日志聚合更容易发现成片的配置问题,比如某条边缘规则影响了整个栏目。

收口的几个做法

  1. 让每条链只跳一次,直接指向最终地址,不要中途经过过渡页。
  2. 全站统一协议与主机名,站内链接、Sitemap、RSS 里直接写最终形式。
  3. 检查 CDN、WAF、反向代理层的跳转规则,避免与源站规则叠加成两跳。
  4. 迁移时把旧地址一次性映射到最终地址,而不是先跳到中间页再跳一次。
  5. 尽量不给蜘蛛单独设置跳转分支,让它和用户落到同一个最终地址。
  6. 定期复查内链与 Sitemap 中的地址,确认返回的是最终态的 200,而不是 3xx。

收口的目标很朴素:把每个 URL 的到达成本压到最低。链路短了,同样的抓取额度就能覆盖更多页面,蜘蛛在站点里的推进也会更顺。

跳转本身不是问题,问题是同一批地址每次都要多走几步才到终点。