搜索抓取

重定向链与蜘蛛抓取:跳转层级太深时,URL 还找得到吗

站内跳转链过长会拉高蜘蛛的发现成本:每一次 301、JS 跳转都要额外请求,中间一旦出现 404、超时或需要渲染,URL 就可能没被走到。本文梳理常见的跳转链类型、对 URL 发现的影响,以及用日志自查和收敛跳转规则的实操思路。

搜索抓取

重定向链与蜘蛛抓取:跳转层级太深时,URL 还找得到吗

站内跳转是运营里最不显眼、却最容易堆出问题的一环。改版、换域名、调整栏目结构、合并页面,每一步都可能留下一条 301;模板里再埋几个 JS 跳转,几年下来一个 URL 要经过四五跳才落到最终页面。对用户来说只是慢一点,对蜘蛛来说,这是一条要反复走、而且容易走丢的路径。

跳转不是不能有,但每一跳都有代价

蜘蛛识别 3xx 状态是常规能力,正常的 301、302 一般不会直接导致页面抓不到。问题出在链路长度和稳定性上:每一步跳转都是一次额外请求,会占用服务器响应时间,也消耗蜘蛛在这条路径上的耐心。当链路超过两三跳,或者中间某一跳返回 404、超时、需要 JS 执行,蜘蛛很可能中途停下,终点 URL 也就没有被发现和抓取。

更麻烦的是,跳转链上的中间 URL 往往相互指向同一个终点。蜘蛛会分别去请求它们,等于用同一份抓取配额做了几遍无用功。

几种常见的跳转链,问题点各不相同

1. 层叠 301:A→B→C→D

多见于多次改版。第一次改版 A 跳到 B,第二次 B 跳到 C,第三次 C 跳到 D,旧规则全留着,链路就越拉越长。更稳妥的做法是把规则收敛成 A→D、B→D、C→D,每一跳都直达终点。

2. JS 跳转与 meta refresh

这类跳转依赖脚本执行或浏览器行为,处理优先级和确定性都低于服务端 301。能换成服务端跳转的尽量换;必须在 JS 里做的,至少保证跳转目标是一个静态可访问的 URL。

3. 跳转到首页或列表页

有些站点把下线页面统一跳到首页,看似省事,实际效果是蜘蛛每次追到一个失效地址都会被送到首页,既浪费路径,也模糊了 URL 之间的关系。下线内容更适合返回 410 或 404,而不是统一兜住。

4. 跳转时丢参数或加参数

跳转规则如果顺手拼上跟踪参数、会话 ID,很容易生成一批新的重复 URL,把本来一条路径的抓取拆成好几条。

跳转链对 URL 发现的影响,大致在这几层

  • 发现成本:每一跳都是一次请求,配额有限时,链条越长越不划算。
  • 发现可靠性:中间出现错误状态、超时、需要渲染,发现过程就断了。
  • 信号传递:信号沿跳转传递会有损耗,链越长损耗越明显。
  • 重复 URL:中间地址可能被当成独立 URL 处理,簇变大,收敛变难。

自查与收敛的常规做法

  1. 抓一份服务端访问日志,筛出返回 3xx 的请求,按来源 URL 与目标 URL 统计出现频次。
  2. 把跳转规则画成图,找出长度超过两跳的链路,以及绕回自身的循环。
  3. 精简规则:能直达的直达,能删的旧规则删掉,别让历史规则无限叠加。
  4. 确认终点 URL 可正常访问、状态码为 200,内容与跳转前的语义基本一致。
  5. 把终点地址更新到站内链接、Sitemap 和 canonical 上,减少蜘蛛再走旧路径的机会。
  6. 改完之后隔一段时间复查日志,看旧跳转的请求量有没有逐步下降。
一个简单的判断标准:如果一条跳转链你自己在浏览器里要走三跳以上,蜘蛛那边大概率也不会舒服。

几个容易被忽略的细节

  • HTTPS 与 HTTP、www 与非 www 的跳转尽量一次性到位,不要先跳协议再跳域名。
  • 移动端模板里的跳转规则容易和 PC 端叠加,产生额外链路,改版时两边都要看。
  • CDN 层的跳转规则和源站的跳转规则可能同时生效,排查时要一起确认。
  • 短链、活动链接、二维码专用链接尽量不长期留在站内,它们会持续制造中间 URL。

跳转本身不是问题,问题是链路没人清理、没人收敛。把跳转链当作站内结构的一部分定期维护,URL 发现这件事会省下不少不必要的消耗。