搜索抓取

重定向链与蜘蛛抓取:跳数、类型和常见断链点

重定向本身没问题,问题出在链上。文章梳理一跳与多跳的差别、301 与 302 在蜘蛛眼中的不同含义,以及循环跳转、跳到 404、终点带 noindex 等几种常见断链情况,并给出一套可执行的检查动作,帮你在日志之外提前发现跳转链条的隐患。

搜索抓取

重定向链与蜘蛛抓取:跳数、类型和常见断链点

为什么重定向链值得单独看

重定向本身没有问题,问题出在“链”。蜘蛛顺着链接爬过来,遇到 301 会继续跟到终点,把终点当作这个 URL 的落点。但每多一跳,就多一次请求、多一次等待,也多一个可能出错的环节。一条三跳的链路,只要中间任何一环超时或返回异常,这个 URL 在这一轮抓取里基本就白跑了。

一跳重定向:正常且推荐

最常见的场景是 http 跳 https、裸域跳 www、旧 URL 换新地址。这类一跳的 301 是标准做法,蜘蛛处理起来没有负担:跟过去,把新地址入库,旧地址慢慢退出。真正需要留意的是,站内链接和 Sitemap 里应该直接写终点地址,而不是继续写那个要跳转的旧地址。否则蜘蛛每轮都要多走一步,抓取容量就这么一点点被消耗掉。

多跳链条是怎么长出来的

链条很少是一次设计出来的,多半是几次改版叠加的结果。比如最早是 http 版本,后来上了 HTTPS,再后来统一到 www,最后又调整了域名或目录结构。没人回头清理,于是一条 URL 要经过三四个 301 才能到终点。

还有一种情况是链条里混进了 302。302 表达的是“临时”,蜘蛛通常不会用它替换掉原来的 URL,也就是说旧地址会继续留在队列里,下一轮再来一遍。如果这个“临时”已经存在了两年,那它对蜘蛛和用户来说其实都已经是永久的了。

几种容易出问题的链路

  • 循环跳转:A 跳 B,B 跳 A,或者更长的环。蜘蛛跟几次之后会放弃,这个 URL 基本不会被收录。
  • 跳到 404:旧地址还在被外链引用,301 指过去却是个死页面,等于把蜘蛛送进了死胡同。
  • 跳转终点带 noindex:蜘蛛跟到了页面,却被告知不要索引,这一趟同样白走。
  • 跳到一个还会再跳的地址:常见于 CDN、负载均衡、多地区自动跳转。用户看到的是一瞬间,蜘蛛看到的是一串请求。
  • 用脚本或 meta refresh 做的跳转:首轮 HTML 抓取时不一定被识别,容易和渲染阶段产生不一致。

跳转与抓取容量的关系

抓取容量是有限的,蜘蛛每次来访能处理的 URL 数量大致固定。站内如果有大量地址要走两三跳才到终点,等于同样的内容多占了几倍的抓取次数。数量不多时感受不到,一旦是几十万级的旧 URL 堆积,影响就会体现在新页面的发现速度上。

检查重定向链的几个动作

  1. 挑一批重要 URL(首页、栏目页、Sitemap 里的地址),用命令行工具或抓取工具看完整过程,记录跳数和每跳的状态码。
  2. 把跳转超过两跳的整理成清单,能合并的就合并成一次直达。
  3. 确认每个 301 的终点返回 200,并且这个终点本身短期内不会再改。
  4. 回头查一遍 Sitemap 和内链,看有没有直接指向跳转 URL 的。
  5. 翻服务器日志,找那些反复出现、状态码是 301 或 302 的请求,它们往往就是链条的源头。

处理原则

站内链接与 Sitemap 只写终点地址;301 用一次就够,不要串成链;临时跳转不要拿来当长期方案;跳转的终点必须是可索引的 200 页面。

重定向链不复杂,只是容易被忽略。定期把站内重要 URL 的跳转路径过一遍,通常比事后从日志里捞异常要省事得多。