重定向本身不是错误,站点迁移、协议升级、域名归一都依赖它。但当一次入口访问要经过三跳、四跳才拿到最终页面,或者跳转链条中间出现环路时,蜘蛛抓取的效率和确定性都会下降。这篇文章梳理重定向链与跳转环的常见成因、排查顺序和处理原则。
重定向链为什么会消耗抓取
蜘蛛访问一个 URL 时,会把响应状态、跳转目标和最终内容都记录下来。链条越长,单次抓取需要发起的请求越多,抓取预算被中间跳转吃掉,真正到达内容页的机会随之变少。更麻烦的是跳转环:A 跳到 B,B 又跳回 A,蜘蛛拿到的是循环,最终页面始终不可达。
从日志上通常能看到两类特征:同一入口在短时间内反复出现 301/302 记录,且始终没有对应的 200;或者某个 URL 的抓取频次很高,但落地页的抓取量并没有同步增加。
常见的链条成因
- 协议与域名叠加跳转:http 先跳到 https,再跳到带 www 的 https,两条规则各写一次,就形成两跳。
- 多层中间件重复加规则:CDN、WAF、反向代理、应用框架各配一条跳转,叠加后链路被拉长。
- 迁移遗留:旧域名跳到新域名,新域名又跳到新版路径,历史规则没有清理。
- 结尾斜杠与大小写:不带斜杠的目录先被补斜杠,再被改写大小写,凭空多出一次跳转。
- 地区或语言跳转:按 IP 或 Accept-Language 二次分流,蜘蛛拿到的目标可能不稳定。
- 跳转环:两套规则互相指向,例如一条把 /old 指向 /new,另一条又把 /new 指回 /old。
排查顺序
- 先用 curl 加 -I 或 -L 逐条打印跳转链,确认每一跳的状态码和 Location。
- 把 Location 展开成绝对地址逐一比对,重点看协议、主机名、路径是否在同一跳里被同时改写。
- 对出现频次最高的入口做抽样,统计从入口到最终 200 的跳转次数,超过两跳的优先收敛。
- 检查配置来源,把 CDN、代理、应用层的跳转规则列成一张表,找出重复和互相覆盖的条目。
- 核对跳转环,遇到 A 到 B、B 又回 A 的情况先停用其中一条规则,再验证链路是否恢复单向。
- 收敛完成后重新取一份日志,对比入口 URL 与落地 URL 的抓取量变化。
处理原则
一跳到位的规则最省事:协议、主机名、路径的规范化尽量合并成一条,避免拆成多级串联。长期不用的旧规则要及时下线,尤其是历史迁移留下的映射表。
如果确实需要多级跳转,至少保证中间环节不返回 200 空页,也不要让跳转目标依赖访问者特征。对蜘蛛而言,稳定的目标比聪明的分流更重要。
判断标准可以简化成一句话:从任意入口到最终内容页,跳转次数是否稳定且不超过两跳。
与站点其他环节的配合
处理完跳转链后,顺手核对 Sitemap 和站内链接是否已经指向最终地址,而不是仍然指向被跳转的旧入口。内链如果大量指向中间跳转地址,等于每次点击都要多走一跳,链条收敛的效果会被抵消。
另外,跳转规则的调整属于服务器层改动,改完记得在抓取日志里至少观察一个完整周期,确认没有新的循环或 5xx 出现,再判断这次收敛是否达到预期。