重定向不是错误,但会改变抓取路径
站点改版、换域名、调整目录结构时,重定向是最常见的衔接手段。对用户来说,浏览器地址栏变一下、页面正常打开,体验上几乎没有感觉;但对搜索蜘蛛来说,它拿到的第一个响应并不是内容页,而是一个 3xx 状态码和 Location 头。蜘蛛需要再发一次请求,才能到达最终页面。也就是说,一次重定向至少多消耗一次请求,抓取路径从一步变成了两步甚至更多。
重定向本身不会直接导致页面不被抓取,但如果链路过长、指向混乱,蜘蛛的抓取节奏和 URL 发现效率都会受到影响。
301、302、307、308 在蜘蛛眼里差别在哪
这些状态码都表示内容在别处,但语义和蜘蛛的处理方式并不完全相同。
- 301 Moved Permanently:永久跳转。蜘蛛通常会把旧 URL 的索引信号逐步转移到新 URL,后续也更倾向于直接抓新地址。
- 302 Found:临时跳转。蜘蛛会跟过去看内容,但一般不会立刻把旧 URL 替换掉,而是保留观察。把 302 当成长期迁移手段,容易让新旧地址长期并存。
- 307 Temporary Redirect:临时跳转,且明确要求保留原请求方法。对蜘蛛的 GET 请求来说,表现接近 302,但语义更严格。
- 308 Permanent Redirect:永久跳转,同样保留请求方法,语义上对应 301 的严格版本。
实际选择时,永久迁移用 301 或 308,临时调整用 302 或 307。关键不是状态码本身,而是别让蜘蛛长期在多个地址之间来回判断。
重定向链一长,抓取成本就上去了
单次跳转可以接受,但 A 到 B 到 C 到 D 这样的链式跳转,每一跳都要重新建立请求、等待响应。抓取预算有限时,蜘蛛花在跳转上的时间越多,能用来抓取有效内容的请求就越少。更麻烦的是,链路中间任何一个节点响应慢、返回 5xx 或超时,整条路径都可能中断,最终页面也就迟迟无法被发现或更新。
经验上,尽量把重定向控制在一次以内。超过两跳的链路,就值得回到服务器配置和内链里查一查。
几种容易出问题的重定向写法
循环跳转与自我跳转
A 跳到 B,B 又跳回 A,或者页面重定向到自己,蜘蛛会反复请求,最后放弃。这类问题常出现在规则叠加、HTTPS 与 HTTP 互相跳转、带与不带 www 的域名配置冲突时。
重定向到不相关页面
旧产品页 301 到首页或分类页,蜘蛛能跟过去,但新地址和原内容主题不一致。用户和蜘蛛都容易困惑,旧 URL 积累的信号也难以准确传递。更稳妥的做法是跳到内容最接近的新页面;确实没有对应内容时,再考虑 410 或合适的替代页。
JS 跳转与 meta refresh
用 JavaScript 或 meta refresh 做跳转,蜘蛛不一定能及时执行,或者执行优先级低于普通链接。能用服务器端 3xx 解决的,尽量不要放在前端。
怎么排查和收敛重定向
- 用 curl -I 或浏览器开发者工具查看完整跳转链,记录每一跳的状态码和 Location。
- 检查服务器日志里的 3xx 请求,找出被频繁访问的跳转入口。
- 把内链直接指向最终 URL,避免站内链接先跳到旧地址再跳一次。
- Sitemap 只提交最终 URL,不要把重定向地址混进去。
- 合并服务器重定向规则,减少 HTTP 到 HTTPS、www 到非 www、旧目录到新目录之间的重复跳转。
迁移期的过渡策略
迁移时保留旧 URL 并 301 到新 URL 是常见做法,但要注意:旧 URL 不要链式跳转,最好一步到位;内链和 Sitemap 尽快切换到新地址;同时观察日志中旧地址的抓取量是否逐步下降、新地址是否开始被稳定抓取。过渡期出现少量 3xx 很正常,长期大量存在才需要处理。
重定向是抓取路径上的一个环节,处理得好,蜘蛛能顺着清晰路径找到新内容;处理得乱,抓取效率就会在一次次跳转中被消耗掉。