搜索抓取

搜索蜘蛛抓取:重定向链长度与跳转类型对入口发现和抓取预算的核对

重定向本身不致命,但链式跳转、跳转类型混用、跳向无关页面和循环跳转,会让蜘蛛在入口发现与预算分配上多做无用功。本文按核对顺序拆解常见跳转形态,给出日志观察点与收链方法,帮助把跳转压缩到一跳直达,减少抓取浪费。

搜索抓取

搜索蜘蛛抓取:重定向链长度与跳转类型对入口发现和抓取预算的核对

站点做改版、换域名、上 HTTPS、统一带 www 或不带 www 的写法时,重定向几乎不可避免。单跳 301 属于正常且被推荐的配置,问题出在“跳一次再跳一次”的链式结构、跳转类型混用,以及跳向无关页面。这些情况不会立刻让页面消失,但会让抓取在入口层多绕路,预算被消耗在不产生新信息的请求上。

重定向在抓取流程里发生了什么

蜘蛛拿到一个 URL 后,会先请求它,读取响应头。如果是 3xx,它需要记录目标地址,再发起一次请求,才能拿到正文和其中的链接。跳一次是成本,跳三次就等于把一次抓取变成四次请求。对单条 URL 来说不算什么,但如果全站导航、Sitemap、外链都落在需要多跳的地址上,累积起来的开销就很明显。

更麻烦的是入口发现:只有当蜘蛛真正取到最终页面的 HTML,页面里的链接才会进入待抓队列。跳转链越长,中间任何一环超时、返回错误或指向 404,链条后面的页面就都不会被发现。

常见需要核对的重定向形态

  • 链式跳转:A→B→C,常见于先跳 HTTPS 再跳 www,或旧域名先跳新域名再跳路径。
  • 跳转类型混用:永久迁移用 302 或 307,蜘蛛按临时跳转处理,可能仍保留旧 URL 的抓取与展示。
  • 跳到无关页面:404 页面被 302 送到首页,或已下架商品跳到分类页,容易形成大量软着陆。
  • 循环跳转:A→B→A,蜘蛛最终只能报错放弃,页面长期不被取到。
  • 客户端跳转:meta refresh 或 JS 跳转,首屏 HTML 里可能没有目标地址的可解析链接。
  • 协议与主机名多次切换:http→https→带 www→带尾斜杠,一次请求走完四跳。

建议的核对顺序

  1. 用爬虫工具或命令行批量取全站入口 URL 的响应头,记录状态码与 Location。
  2. 把 Location 再取一次,看是否还有 3xx,直到出现 200 或 4xx,统计跳转次数分布。
  3. 重点检查跳转两次以上的 URL,判断是配置遗漏还是历史遗留。
  4. 比对 Sitemap 与内链:如果里面写的是旧地址,把声明改成最终地址。
  5. 检查 robots.txt、canonical、Sitemap 中的地址是否与最终落地地址一致。
  6. 确认跳转类型:永久迁移用 301/308,临时活动才用 302/307。

日志里怎么看

抓取日志中,如果大量 301、302 集中在同一批路径,且这些路径的请求量明显高于实际页面数,说明站内或站外还在用旧地址。可以按状态码分组,看 3xx 请求占比,再拉出对应的来源页,找到是谁在持续输出旧链接。

判断标准很简单:一条 URL 从被请求到拿到正文,理想情况只需要一次跳转,而且这一跳应该指向最终地址。

收链时的几个操作

  • 把 http、https、www、非 www 的四种组合收敛到一种,其余全部一跳直达。
  • 旧路径退役时,尽量直接跳到新路径,不要先跳首页再让用户自己找。
  • Sitemap 只提交最终地址,不要提交会跳转的 URL。
  • 分页、筛选参数页如果有跳转,确认跳转后仍能被正常抓取。
  • 改完跳转后,观察一段时间内 3xx 请求占比是否下降,最终页面的抓取量是否回升。

重定向本身不是错误。把跳转控制在必要范围内、让每个入口一跳到位,才是减少抓取浪费的关键。