蜘蛛抓取一个地址时,如果服务器返回的是 301 或 302,它需要再发一次请求才能拿到真正的内容。一两次还能接受,但如果一个页面要连跳三五次才落地,抓取预算和响应时间都会被白白吃掉。重定向链自查,就是把这根接力棒捋直,让蜘蛛一步到位。
重定向链是怎么形成的
多数站点并不是一开始就设计成要跳好几跳的。常见的情况是:网站从 HTTP 升级到 HTTPS,又补上了 www 前缀,后来又换了域名或目录结构,每次变更都叠加一条规则,旧规则没有清理,于是 A 到 B、B 到 C、C 到 D 的链条就出现了。单看每一跳都合理,串起来就变成了浪费。
常见的链条来源
- HTTP 到 HTTPS、再到带 www 的域名,两条规则各跳一次。
- 改版后旧地址指向过渡地址,过渡地址又指向新地址。
- CMS 或插件自动生成带斜杠、不带斜杠的跳转,与服务器规则叠加。
- 移动端与 PC 端互相跳转,逻辑写错形成往返甚至循环。
- 跳转目标本身已经失效,链条最后一跳落在空页面上。
自查方法
单个地址快速验证
用命令行工具带上跟随跳转的参数请求一次,观察每一跳的状态码和 Location 头,能立刻看出链长和终点。浏览器的开发者工具里把保留日志打开,再看 Network 面板,同样能看到完整过程。
全站批量排查
把站点地图里的 URL、日志里被频繁抓取的 URL、以及内链中出现过的地址导出来,批量跑一遍,重点看三类:跳转次数超过一次、跳转终点是 4xx、跳转终点又跳回自身。这三类的处理优先级最高。
修复思路
- 确定每个资源的最终地址,把跳转规则改成一步直达,中间环节全部去掉。
- 站内链接、导航、站点地图、canonical 一律写最终地址,不再指向会跳转的旧地址。
- 合并重复规则,HTTP 到 HTTPS 与 www 归一可以放在同一条规则里处理。
- 跳转终点失效的,要么恢复到有效页面,要么直接返回 410 或 404,别让蜘蛛继续跟。
- 短期活动、临时迁移用 302,长期变更统一用 301 或 308,不要长期挂着 302。
判断标准很简单:从任何一个站内入口点进去,到最终页面的跳转次数应该是 0 或 1 次。超过这个数,基本都能找到可以精简的地方。
容易被忽略的细节
- meta refresh 和 JS 跳转对蜘蛛来说不如服务端 301 明确,能改就改。
- 跳转时把参数整段吞掉,可能让原本独立的页面合并成同一个地址。
- 大小写、末尾斜杠的规范化跳转如果不统一,会在日志里反复出现。
- CDN、反向代理层也可能自带跳转规则,要和源站规则放在一起看。
把检查变成习惯
改版、换域名、调服务器配置之后,重新跑一遍重定向检查,把结果和上一次对比。链条往往不是一次冒出来的,而是每次小改动慢慢叠上去的。定期清理之后,蜘蛛的每次请求才更可能落在真实内容上。