做站点运维时,重定向几乎是最省事的工具:换域名、合并栏目、下线旧页面,一条 301 就能把访问接过去。但从蜘蛛的角度看,每一次跳转都不是免费的——它意味着多一次请求、多一次等待、多一个需要记录的中间地址。
一次跳转,蜘蛛要多做哪些事
当蜘蛛请求 A 地址,收到的却是指向 B 的响应时,它需要:
- 记录 A 的状态码、响应头和目标地址;
- 再发起一次到 B 的请求,重新经历连接建立与首字节等待;
- 把 A 与 B 关联起来,判断最终内容应该归属哪个 URL。
对单次抓取来说,这多出来的开销不大;但当站点里成千上万个内链都指向跳转地址时,抓取额度就被大量消耗在“中转站”上,而不是真正的内容页。
跳转链多长算长
一跳:A → B,属于正常使用,基本可以接受。
两跳:A → B → C,通常说明中间层没清理干净,比如 CDN 或反向代理里残留的旧规则。
三跳及以上:链路越长,蜘蛛越难判断目标是否稳定;部分蜘蛛在连续跳转超过自身阈值后会直接放弃这条链路。
一个直观的判断方式:在浏览器地址栏输入地址,如果它变化两次以上才稳定下来,这条链路就偏长了。
哪些配置容易长出长跳转链
协议与主机名规范化叠加
http://example.com → https://example.com → https://www.example.com,本来可以合并成一步直达,却因为两层配置各自处理,变成两跳。
尾斜杠与大小写各管一层
服务器、CDN、应用框架分别加了“补斜杠”“转小写”的规则,规则叠加后就形成了两三跳。
旧域名、旧栏目、旧参数层层接力
第一次改版把 A 指向 B,第二次改版又把 B 指向 C,旧规则没删,链路就越接越长。
不同类型跳转,蜘蛛的处理不太一样
- 301 / 308:表示永久迁移,蜘蛛会逐步把索引与信号挪到目标地址,是最推荐的类型。
- 302 / 307:临时跳转,蜘蛛通常继续保留原地址,不会立刻做替换。
- meta refresh 与脚本跳转:需要解析 HTML 或执行渲染才能发现,等于多花一份处理成本。
能用响应头解决的跳转,尽量不要交给 HTML 或脚本;能一步到位的规范化,就不要拆成两条规则。
把跳转成本压下来的做法
- 内链、Sitemap、canonical 一律直接写最终地址,不要让蜘蛛先踩一次跳转。
- 合并同类规则:协议、主机名、尾斜杠的处理尽量在同一层一次完成。
- 定期清理规则库,删掉指向已下线地址的旧跳转。
- 在访问日志里筛出状态码为 3xx 的 URL,按出现次数排序,从高频那几条开始改。
- 改版上线前用脚本沿链路走一遍,确认没有超过两跳的路径,也没有闭环。
小结
重定向本身不是问题,问题是它被当成长期方案留在链路里。把跳转控制在必要的一跳,让内链直连最终 URL,站点省下的是抓取额度,蜘蛛省下的是重复往返。