站点改版、域名迁移、URL 规则调整,都会产生重定向。重定向本身不是问题,问题是它被一层层叠加起来,形成一条很长的跳转链。蜘蛛每跟一跳,都要重新发起请求、等待响应,抓取预算和时间就这样被消耗掉。
蜘蛛遇到重定向会怎么走
主流搜索蜘蛛能识别 301、302、307、308 等状态码,并跟随 Location 指向的新地址。301 表示永久迁移,302 表示临时跳转,307 和 308 则强调请求方法保持不变。对蜘蛛来说,它们都会产生一次额外的抓取动作。
如果 A 跳到 B,B 又跳到 C,C 才是最终页面,那么蜘蛛实际要处理三次响应。跳数越多,放弃的概率越高。蜘蛛通常会在有限次跳转后停止跟随,把该 URL 标记为抓取异常或重定向链过长。
多长的跳转链算过长
没有统一的硬性数值,但经验上,一跳能到终点是理想状态,两跳已经需要留意,三跳以上就值得排查。链路过长时,蜘蛛可能只抓到中间页,最终页面反而迟迟不被发现;即使最终抓到了,传递的权重和更新信号也会被稀释。
- 旧域名 → 新域名 → 加 www → 换 https → 改路径,五跳叠加很常见。
- 列表页 302 到登录页,登录页再 302 回列表页,形成回环。
- CDN、负载均衡、反向代理各自加一条跳转规则,运维和 SEO 互不知情。
跳转链的每一跳都是一次独立的请求。对蜘蛛而言,这不是用户无感的体验问题,而是实打实的抓取成本。
怎么排查跳转链
可以用命令行工具查看完整跳转过程,例如用 curl 的 -IL 参数跟随重定向并输出响应头;也可以从服务器访问日志中,统计同一 IP 段或同一 User-Agent 在短时间内连续访问的 URL 序列。重点看两件事:跳了几次,以及中间是否出现循环。
- 找出所有返回 3xx 的 URL,按 Location 指向画成链路图。
- 合并重复规则,把多跳改成直接 301 到最终 URL。
- 检查内链和 Sitemap,确认它们指向的是终点地址,而不是会跳转的旧地址。
- 对长期使用的 302,评估是否应该改为 301,避免信号模糊。
容易忽略的几个细节
重定向响应的正文通常不会被索引,但仍会占用传输时间。如果 3xx 页面返回了很大的 HTML 内容,蜘蛛还要下载和解析,建议尽量保持响应体为空或极简。
Location 使用相对路径虽然可行,但绝对 URL 更不容易出错。带参数的重定向也要注意:如果每次都追加一个追踪参数,最终地址会不断变化,蜘蛛可能把同一页面当成多个 URL。
另外要区分 HTTP 重定向与页面内的跳转。meta refresh 和 JavaScript 跳转不是 HTTP 层重定向,蜘蛛的处理方式不同,依赖它们做迁移并不可靠。能配置 301 的场景,优先用 301。
把跳转控制在可控范围
定期抽查重点 URL 的跳转次数,把链路长度当作一项基础指标来维护。改版或迁移时,提前规划好目标地址,让旧地址一步到位;上线后再用日志确认蜘蛛是否沿着预期路径走到了终点。链条越短,蜘蛛越省力,新页面被发现的路径也越清晰。