重定向不是终点,而是路径的一部分
搜索蜘蛛沿着链接一层层往下走,遇到 301 或 302 时通常不会停下,而是继续跟到 Location 指向的地址。这就意味着,一次重定向会把原本一次请求就能拿到的页面,拆成两次甚至更多次请求。跳数越多,抓取路径越长,蜘蛛在这条 URL 上花的时间也越多。
一跳、两跳与多跳的成本差别
单次 301 是很常见的做法,站点迁移、http 换到 https、裸域换到 www 几乎都要用到。问题一般出在链上:A 跳到 B,B 又跳到 C,C 才是真正的页面。每多一跳,就多一次连接建立和响应等待。对服务器来说这不算大事,但蜘蛛的抓取额度有限,同一批 URL 里如果存在大量多跳链,能分给真正内容页的抓取机会就少了。
此外,多跳链在传递权重信号时会被稀释,部分抓取系统对超过一定跳数的链会降低跟进意愿,甚至直接放弃这条路径。
301 与 302 在抓取中的区别
301 表示永久迁移,蜘蛛通常会把新地址当作正式地址,并逐步用新地址替换索引中的旧地址。302 表示临时跳转,蜘蛛一般会保留旧地址并持续回来复查,于是旧地址会长期占用抓取名额。如果本来是永久换址却用了 302,旧 URL 会一直留在抓取队列里,新地址的确认也会被拖慢。
长链通常来自哪里
- 协议与域名同时切换:先跳到 https 版本,再跳到带 www 的地址,最后还补一次结尾斜杠。
- 目录层级改版:旧栏目路径没有直接指向新地址,而是先跳到中间过渡页。
- CDN 或负载均衡回源时附加的跳转,日志里不显眼,但蜘蛛确实多走了一次。
- URL 大小写、结尾斜杠、index.html 等写法不统一,靠跳转来兜底。
- 短链、活动页、旧域名保留的入口,常年挂着多重跳转。
怎样自查重定向链
最简单的办法是看响应头,用命令行加 -L 参数把每一跳的状态码和 Location 都打印出来,重点看三件事:最终到达的地址是不是规范地址;中间有没有本该是 301 却用了 302、307 的跳转;整条链一共跳了几次。
另一个角度是服务器日志。同一来源的蜘蛛在很短时间内连续请求多个相似路径,往往就是它在跟着跳转链走。如果某条链的中间地址访问量很高,终点页访问量却一般,说明这条链本身就在消耗抓取。
让 URL 发现少走弯路
- 内链直接指向终点地址。导航、面包屑、正文里的链接都不要指向会跳转的地址,能省一次请求就省一次。
- Sitemap 里只放最终地址。把 301 之前的 URL 写进 Sitemap,等于让蜘蛛每次都先撞一次跳转。
- 把多跳合并成一跳。能在一个跳转里从旧地址直达新地址,就不要分两步完成。
- 协议、域名、结尾斜杠统一成一种写法,全站内链按这个写法生成。
- 定期清理历史遗留的跳转规则,尤其是几次改版叠加出来的长链。
跳转与服务器稳定性
多跳链不只影响蜘蛛,也会放大服务器压力:每个中间跳转都是一次真实请求。如果跳转规则写得复杂,还要查数据库或做正则匹配,响应时间就会上去。响应慢到一定程度,蜘蛛会降低抓取频率,连正常页面的抓取节奏都会受影响。所以整理重定向链,本质上也是整理站点性能和抓取效率。
不必追求零跳转,迁移和协议统一本来就离不开 301。关键是让链控制在一跳之内,并让内链与 Sitemap 尽量指向终点。
这样蜘蛛的每一次访问都更接近有效内容,URL 被发现、被处理的节奏也会更稳定。