站点改版、域名迁移、协议切换的时候,重定向是最顺手的工具。但在搜索蜘蛛看来,重定向不是一次免费的转交,而是一次额外的请求加一次额外的排队:它先拿到 3xx 响应,记下 Location 里的目标地址,然后再回头去抓那个地址。跳转链条越长,URL 被发现和被处理的路径就越绕。
蜘蛛拿到 3xx 之后做了什么
当蜘蛛请求一个 URL 得到 301 或 302 时,它通常不会把响应体当作页面内容来处理,而是把目标地址当成一个新的待抓取 URL 放进队列。也就是说,一个重定向实际上占用了两次抓取机会:一次花在旧地址上,一次花在新地址上。如果新地址又返回 3xx,这个过程还会继续,直到拿到 200,或者超过引擎设定的跳转上限。走到上限之后,链路末端的页面就可能一直没有被真正抓取。
不同跳转方式的差别
- 301 与 308:表示永久移动。适合域名迁移、协议切换、URL 结构定型后的规范化,蜘蛛会把它当作资源的迁移来处理。
- 302 与 307:临时跳转。适合短期活动页、维护页。如果长期用 302 承载整站迁移,蜘蛛会反复回到旧地址确认,旧地址也不容易被替换掉。
- Meta refresh 与 JS 跳转:蜘蛛需要先渲染页面才可能执行,成本更高,也更依赖渲染队列的排期。能用服务端 3xx 解决的情况,不建议交给前端。
链式跳转:最容易被忽视的浪费
比单次重定向更麻烦的是链条。典型场景是 http 跳 https,再跳 www,再跳一次带尾斜杠的最终地址;或者旧域名先 302 到另一个旧域名,再 301 到新站。每一跳都是一次独立的请求,蜘蛛需要逐跳跟进,抓取机会被消耗在中间的过渡地址上,而真正的内容页在链条末端等着。
更麻烦的是循环跳转或指向失效页面的跳转:A 跳 B、B 跳回 A,或者重定向目标本身已经是 404。这类地址会持续占用抓取资源,却永远走不到可用的内容。
常见的几类写法
- 协议、主机名、尾斜杠分开跳:尽量合并成一次跳转,直接指向最终地址。
- 大小写不一致带来跳转:例如 /Page 跳到 /page,而站内链接仍然写成 /Page。
- 用跳转代替站内导航:菜单或按钮先指向一个立即跳转的中转页,蜘蛛要多走一步。
- 移动站与主站互相跳转:需要确认没有形成回环,也没有让两边都停留在跳转状态。
怎么把它收敛下来
思路很简单:让蜘蛛第一次拿到的地址就是最终地址。
- 内链直接指向终点:导航、正文链接、相关推荐里都写最终 URL,不要写会跳转的旧地址。
- 合并跳转链:检查 http、https、www、尾斜杠的组合,把多跳压成一跳。
- Sitemap 只放返回 200 的地址:把 3xx 地址留在 Sitemap 里,等于每一次抓取都要先绕一圈。
- 看日志里的 3xx 比例:如果蜘蛛访问记录中 3xx 占比明显偏高,通常说明站内还有大量链接指向会跳转的地址。
跳转不是问题,跳转链才是
重定向本身是正常的技术手段,需要长期保留的迁移用 301,临时的调整用 302,关键在于链条要短、目标要稳定。当内链、Sitemap 和外部入口都指向同一个最终地址时,蜘蛛在发现的环节就能少走弯路,把有限的抓取机会留给真正需要被看到的页面。
把跳转当成交接棒,而不是接力赛:一次交接到位,蜘蛛的路径就短了。