重定向在站点运维里几乎是必需品:换域名、改路径、统一协议都要用到它。但对搜索蜘蛛来说,每一次跳转都是一次额外的请求。一条链接如果连续跳三次,蜘蛛为拿到同一个页面就要付出四次连接成本,而这些成本会从整体的抓取额度里扣掉。
重定向为什么会被算进抓取成本
蜘蛛拿到一个 URL 后先发请求,读到 3xx 状态码和 Location 头,再对新地址重新发起一次请求。这个过程通常没有缓存可言,除非跳转结果本身带了足够强的缓存头。所以跳转链越长,单位时间内能被处理的 URL 数量就越少,新页面被发现的节奏也会被拖慢。
更麻烦的是类型混用。301 表示永久,302/307 表示临时,蜘蛛对二者的处理方式不同:长期用 302 承担迁移职责,旧地址可能一直留在待抓列表里,新地址的信号积累也会慢一些。
常见的几种问题形态
- 协议与主机叠加跳转:http 跳 https,再跳 www,再跳结尾斜杠,一条内链要经过三到四跳。
- 跳转类型来回切换:CDN 或网关配了 301,应用层又返回 302,蜘蛛前后看到的状态码不一致。
- 跳转到 404 或空页面:旧路径跳到已下线的地址,等于白跑一趟。
- 循环跳转:A 跳 B、B 跳 A,通常是尾斜杠规则和伪静态规则互相打架造成的。
- 跳转目标本身还会再跳:内链、Sitemap、canonical 各处写的地址不统一,各自指向不同的中间节点。
先做一次跳转链体检
- 用 curl -I -L 或类似工具,抽 50 到 100 个内链 URL,记录每一跳的状态码和 Location。
- 翻抓取日志,统计 3xx 响应占全部抓取请求的比例,比例偏高说明跳转被反复触发。
- 对比 Sitemap、canonical、hreflang 与页面内链里写的地址,看是否都指向最终 URL。
- 单独检查尾斜杠、大小写、http/https 几类规则,确认它们没有互相触发。
修正顺序建议
- 先确定一个唯一的最终地址格式,协议、主机、路径写法一次性定下来。
- 把所有内部引用改成最终地址,让内链、Sitemap、canonical 直接指向它,不再经过中间跳转。
- 旧地址保留一条 301 直达最终地址,不要串成链条。历史上留下的多级跳转可以合并成一步。
- 确认跳转目标返回 200,且内容与旧页面意图一致;页面确实下线的,改用 410 而不是统一跳首页。
- 循环跳转优先处理,这类问题会让蜘蛛在同一组 URL 上反复消耗。
跳转治理与 URL 发现的关系
URL 发现的入口主要有三条:Sitemap、站内链接、外部链接。三者如果都写最终地址,蜘蛛第一次请求就能拿到内容,不需要额外一跳。反过来,如果站内链接大量指向中间地址,蜘蛛会把这些中间地址当作独立 URL 记录,待抓列表被稀释,真正的内容页反而排到后面。
多语言站点还要留意 hreflang 的指向,它应该写最终 URL,写成跳转前的地址会让蜘蛛多做一轮校验。
重定向治理没有一劳永逸的做法。站点每次调整路径、协议或 CDN 规则之后,都值得重新抽一次跳转链。重点不是消灭重定向,而是让必要的跳转保持单步、直达、目标明确。