搜索抓取

重定向链让蜘蛛多走几步:301、302 与跳转层数对抓取的影响

蜘蛛遇到跳转链接时,需要为每一跳单独发起请求,跳转链越长,抓取机会被消耗得越多,路径判断也越模糊。本文梳理单跳、多跳、跳转成环三种形态,说明换域名、http 与 www 规范化等常见长链来源,并给出日志排查、规则收敛以及与 canonical 分工的做法。

搜索抓取

重定向链让蜘蛛多走几步:301、302 与跳转层数对抓取的影响

蜘蛛发现一个 URL,并不等于直接拿到内容。如果这个 URL 是跳转的起点,蜘蛛要先跟着 301 或 302 走到终点,才能读到真正的页面。这一段路看起来只是多请求一次,但站点规模一大,跳转链会实打实地吃掉抓取机会,也会让蜘蛛对路径的判断变得模糊。

每一次跳转,都是一次独立请求

从蜘蛛的角度看,请求 A 得到 301 指向 B,并不是顺手就知道 B 的内容,而是需要再发起一次请求去拿 B。对服务器来说,这是两次流量;对抓取预算来说,这是两次机会。单跳通常没问题,但如果 A 到 B 到 C 再到 D 连成一条链,蜘蛛就要走四步才拿到页面,而其中三步什么都没拿到。

更麻烦的是判断成本。蜘蛛在链的每一环都要重新确认这是什么类型的跳转、是否值得继续。链接权重在链路上会被稀释,终点页面看起来是从很远的地方来,在抓取优先级上并不占优势。

常见的三种跳转形态

单跳 301:目标最清晰

旧地址一次性指向最终地址,蜘蛛一次就到位。这是最理想的形态,改版、换目录、合并重复页时都应该收敛到这个状态。

多跳链:一层套一层

多见于反复改版、规则叠加的场景。第一次改版把 A 跳到 B,第二次又把 B 跳到 C,旧规则没有清理,A 就变成了一条三跳链。蜘蛛仍然能走到,但代价明显变高。

跳到 404 或成环

目标页面已经删除,跳转规则却还在,蜘蛛走完一圈拿到 404;或者 A 跳 B、B 又跳回 A,形成环。这两种情况都会浪费抓取,还可能让蜘蛛降低对该目录的抓取频率。发现后应尽快改成 410 或直接移除跳转。

哪些做法最容易产生长链

  • 换域名时只在首页做跳转,内页仍靠旧链接层层转发。
  • http 到 https、裸域名到 www 的规范化没合并,形成两级跳转。
  • 移动端独立域名与自适应版本互相切换,来回重定向。
  • 短链、活动页、跟踪参数页用跳转实现,落地页又跳一次。
  • 旧 CMS 插件留下的规则长期没人清理。

怎么检查并收敛跳转链

  1. 在服务器日志里筛出状态码为 3xx 的请求,看哪些 URL 频繁被跳转请求命中。
  2. 对高频跳转地址做批量检查,记录每一跳的目标地址,找出超过两跳的链路。
  3. 把规则改成直接指向最终地址,避免中途经过中间页。
  4. http、https、www 与非 www 的规范化合并到一次跳转完成。
  5. 定期清理指向已删除页面的跳转,改成 410 或移除。

重定向和 canonical 的分工

两者不是替代关系。301 是强指令,蜘蛛走完就只会看终点;canonical 是提示,蜘蛛仍可能抓取被标注的那一页,只是不把它当作首选。地址确实变了,用跳转;只是页面相似、想合并权重,用 canonical 更合适。拿 canonical 顶替跳转,会让蜘蛛持续走在旧地址上。

跳转期间的服务器状态

跳转链上的任何一跳返回 5xx、超时或连接被拒,蜘蛛都可能在半路停下。它通常会在稍后重试,但重试的是整条链。所以链越长,被中断的概率越高。稳定地给出正确的 301 和较短的响应时间,比单纯压缩页面体积更直接。

把跳转当成一条路来设计:能一步到位的,不要走两步;已经废弃的路,尽早封掉。