搜索抓取

重定向链与蜘蛛抓取:跳转几次算多,什么时候该改直连

重定向本身不是问题,链式重定向才是。本文梳理蜘蛛遇到 301、302、307、308 时的处理差异,多少跳算多,常见链式来源,以及如何用内链、Sitemap 和 canonical 把抓取路径拉直,减少无效跳转。

搜索抓取

重定向链与蜘蛛抓取:跳转几次算多,什么时候该改直连

站点做过改版、换过域名、上过 HTTPS 之后,重定向几乎不可避免。单次 301 跳转对蜘蛛来说只是多一次请求,但一旦跳转串成链,事情就变得不划算:蜘蛛要连续请求多个地址,才能拿到真正的内容。抓取配额和时间都被消耗在路上,而不是落在页面上。

蜘蛛遇到一个重定向时,会做什么

当蜘蛛请求地址 A,服务器返回 3xx 状态码和 Location 头,蜘蛛会记录目标地址,然后发起第二次请求。这个过程对单次跳转来说很快,但每一次跳转都是一次独立的 HTTP 请求,会占用抓取预算。如果目标地址又返回 3xx,蜘蛛只能继续跟,直到拿到 200 或遇到错误。

链式重定向为什么更麻烦

A 跳到 B,B 跳到 C,C 才是最终页面,这就是链式重定向。链条越长,蜘蛛中途遇到超时、连接中断或错误页的概率越高。一旦某一跳失败,后面的内容可能不会被发现。另外,每多一跳,链接传递的信号会被稀释一次,内链的价值也跟着打折扣。

常见的链式重定向来源

  • 旧域名跳到新域名,新域名又跳到 HTTPS,HTTPS 再跳到带 www 的版本,三层串在一起。
  • CMS 里文章改了 slug,旧地址跳到新地址,新地址又被插件或规则跳了一次。
  • 反向代理和 CDN 各配置了一层跳转规则,用户看不出来,蜘蛛却要多走一步。
  • 语言或地区切换器设置了默认跳转,入口页反复横跳。
  • 尾斜杠、大小写规则没有统一,同一个路径被拆成多个跳转节点。

301、302、307、308 对抓取的影响

301 表示永久移动,蜘蛛拿到后会逐步把索引更新到新地址。302 和 307 表示临时移动,蜘蛛一般会保留旧地址,继续抓旧地址,重定向状态可能长期存在。308 是永久重定向,同时保留请求方法,行为上和 301 接近。重点不在于哪个状态码更高级,而在于永久性变更用永久重定向,临时活动用 302,并且活动结束后尽快撤掉。

跳几次算多

没有统一阈值,但经验上 1 到 2 跳可以接受,超过 3 到 4 跳就值得检查。如果链上超过 5 跳,或者链中夹杂 404、超时、循环跳转,蜘蛛放弃的概率会明显上升。更实际的做法是看日志:如果某个最终页面长期只能通过多跳到达,而它又是重要页面,就应该考虑改直连。

怎么排查和收尾

  1. 从服务器访问日志里筛选 3xx 状态,找出被频繁请求且带重定向的地址。
  2. 对重点 URL 用 curl 或浏览器网络面板,看完整的跳转链和最终状态码。
  3. 把跳转链画出来,找共同前缀和多余的中间节点。
  4. 能合并的规则尽量合并,例如把 HTTP 到 HTTPS、非 www 到 www 在一处完成,不要串成两跳。
  5. 检查内链和 Sitemap,尽量直接写最终 URL,而不是旧地址或中间地址。

内链、Sitemap 与 canonical 的分工

内链是蜘蛛最常走的路。内链直接指向最终 URL,可以避免大量跳转。Sitemap 里放最终 URL,不要放旧地址或跳转中的地址,否则等于主动给蜘蛛多安排几步。canonical 用来告诉蜘蛛哪个是规范版本,但它不能替代重定向;如果旧 URL 还能访问,最好既做重定向,也在内链里逐步清理。

重定向是搬家时的临时通道,不是长期入口。通道越多,蜘蛛越容易迷路。

定期检查跳转链,尤其是改版、换域名、上 CDN 之后的前几个月。把路径拉直,蜘蛛才更愿意多抓几页。