蜘蛛发现一个 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 插件留下的规则长期没人清理。
怎么检查并收敛跳转链
- 在服务器日志里筛出状态码为 3xx 的请求,看哪些 URL 频繁被跳转请求命中。
- 对高频跳转地址做批量检查,记录每一跳的目标地址,找出超过两跳的链路。
- 把规则改成直接指向最终地址,避免中途经过中间页。
- http、https、www 与非 www 的规范化合并到一次跳转完成。
- 定期清理指向已删除页面的跳转,改成 410 或移除。
重定向和 canonical 的分工
两者不是替代关系。301 是强指令,蜘蛛走完就只会看终点;canonical 是提示,蜘蛛仍可能抓取被标注的那一页,只是不把它当作首选。地址确实变了,用跳转;只是页面相似、想合并权重,用 canonical 更合适。拿 canonical 顶替跳转,会让蜘蛛持续走在旧地址上。
跳转期间的服务器状态
跳转链上的任何一跳返回 5xx、超时或连接被拒,蜘蛛都可能在半路停下。它通常会在稍后重试,但重试的是整条链。所以链越长,被中断的概率越高。稳定地给出正确的 301 和较短的响应时间,比单纯压缩页面体积更直接。
把跳转当成一条路来设计:能一步到位的,不要走两步;已经废弃的路,尽早封掉。