站点换域名、切 HTTPS、统一 www 时,301 是最常见的处理方式。但很多人只关注“有没有跳转”,忽略了“跳了几次”。对用户来说,多跳只是地址栏闪一下;对蜘蛛来说,每一跳都是一次完整的请求,时间和机会都在路上被花掉。
一次抓取,可能跟着一串 Location
蜘蛛请求一条 URL,服务器返回 301 并带上 Location 头,蜘蛛需要重新发起请求;如果新地址又返回 301,就继续跟。若中间换了域名,还要重新做 DNS 解析和连接建立。最终拿到页面内容之前,蜘蛛已经付出了若干次往返。
这条链路在浏览器里往往一闪而过,但在抓取日志里会留下清晰的痕迹:同一路径下出现连续的 301、302 记录,最后才是一条 200。
每多一跳,成本加在哪里
- 抓取时间:蜘蛛按主机分配抓取资源,多跳意味着同样的时间只能覆盖更少的页面。
- 半路放弃:链路过长,或中间某一跳响应慢、超时,蜘蛛可能在到达终点前结束这次抓取。
- 循环风险:A 跳 B、B 又跳回 A,蜘蛛绕几圈后会放弃,这条 URL 等于没有被抓到。
- 日志噪音:大量 301 记录占据抓取日志,分析页面覆盖情况时容易被掩盖。
- 规则冲突:服务器配置与 CMS 插件同时生效时,跳转结果可能随访问方式变化,难以复现。
多跳通常是怎么攒出来的
- 把 http 到 https、非 www 到 www 拆成两条规则,一条 URL 先跳一次,再跳一次。
- 域名迁移时走了过渡域名,旧域名指到过渡域名,过渡域名再指到新域名。
- 尾斜杠、大小写、参数清理各自做跳转,同一条 URL 连走三次。
- 页面内链和 Sitemap 里仍写着旧地址,蜘蛛每次都是从旧地址被引上跳转链。
- 临时跳转长期未改,302 与 301 混用,链路越接越长。
自查:先看清楚链条有多长
用命令行查看跳转链是一个直接的办法,例如用 curl 带 -I 和 -L,观察每一次响应里 Location 指向哪里;也可以打开浏览器开发者工具的 Network 面板,查看该请求经过的每一跳。重点抽查首页、栏目页和主要入口页。
日志侧可以筛选状态码为 301、302 的记录,按 URL 聚合请求次数,找出跳转次数明显偏多或反复出现的路径。注意同时看请求方法和响应时间,慢的那一跳往往就是问题所在。
收敛:让蜘蛛一跳到位
- 规则尽量写成直接指向最终 URL,避免旧地址先跳中间地址。
- Sitemap、内链、canonical 统一使用最终地址,减少蜘蛛被引到旧地址的机会。
- 域名迁移期间保留跳转是必要的,但旧域名应直接指向新域名,而不是经过过渡站。
- 定期检查是否存在循环跳转,以及该用 301 的地方是否误用了 302。
- 服务器配置或插件调整后,抽查几条代表 URL,确认跳转结果与预期一致。
重定向本身不是问题,链条太长才是。蜘蛛的抓取时间是有限的,每一跳都要花在等待响应上,留给读取内容的份额就少了。
一个简单的判断标准
如果一条 URL 到达最终页面需要超过一跳,就值得检查。尤其是首页、频道页和重点内容页,它们被访问的频率高,跳转成本会被反复放大。把路径缩短到一跳,对蜘蛛和访客都是更直接的方式。
抓取路径越短,蜘蛛就越容易把有限的时间用在真正的内容上,URL 发现和覆盖也更容易保持稳定。