重定向不是一次请求,而是一段路径
蜘蛛拿到一个 URL 后,如果服务器返回 301 或 302,它会继续请求 Location 指向的新地址。这个过程对用户也许只是一次跳转,对蜘蛛却意味着额外的一次或多次抓取。每多一跳,就多一次连接、等待和解析。
当重定向链只有一两跳且目标稳定时,通常不会造成大问题。但如果链达到四五跳,或者其中某一跳响应慢、返回异常,蜘蛛可能在中间停下,最终页面就没有被完整发现。
301、302 与多跳链的常见问题
301:永久跳转的传递依赖链路质量
301 表示目标地址已经固定。蜘蛛通常会把旧 URL 的抓取权重和发现能力逐步转移到新 URL。但如果 301 指向的仍然是一个 302,或者再跳到第三个地址,传递过程就变得不确定。更稳妥的做法是让内链和 Sitemap 直接使用最终 URL。
302:临时跳转不要长期挂着
302 适合短期活动或临时切换。长期使用 302 时,蜘蛛可能仍把旧地址当作主要入口,反复回来检查,而新地址的抓取频率未必能立刻提升。如果确实已经永久更换,应尽量用 301。
循环与互相跳转
A 跳 B、B 跳 A,或者多个 URL 形成闭环,会让蜘蛛在有限步数内反复消耗请求。日志里通常能看到同一个 IP 对几个 URL 的连续请求,最终没有落到任何可索引内容上。
缩短重定向链的实操方向
- 内链直接写最终地址:导航、正文、面包屑、分页都尽量不再经过跳转。
- Sitemap 使用最终 URL:不要提交一个会 301 到别处的旧地址,除非你正在做改版过渡。
- 检查服务器与 CDN 规则:有些跳转来自 http 到 https、www 到非 www 或结尾斜杠的统一规则,叠加后容易变长。
- 清理历史跳转:不再使用的活动页、旧栏目页,如果已经确定目标,保留一跳即可。
- 关注响应码分布:日志里如果 301/302 占比明显上升,说明抓取可能花在了跳转上。
从日志判断重定向是否拖慢抓取
在服务器日志中,可以筛选状态码为 301、302、307、308 的请求,观察同一蜘蛛 IP 在短时间内的连续访问。如果它跟随一个 URL 后又请求另一个 URL,再请求第三个,而目标页面的响应码才是 200,这条路径就值得关注。
还需要区分正常跳转和异常跳转。例如 http 到 https 的统一跳转是常规配置,但如果每个内链都先经过一次 301,再由 CDN 做一次 302,最后才到内容页,抓取预算就被拉长了。把内链改成最终地址,通常能减少这部分损耗。
重定向本身不是错误,错误在于让蜘蛛反复走多余的弯路。能直连的入口,不要让它绕路。
改版或迁移时怎么安排
如果站点正在改版,旧 URL 到新 URL 的 301 是必要的过渡手段。此时可以分两步做:先保证旧地址只跳一次到新地址,再逐步把内链、导航和 Sitemap 更新为最终地址。等旧地址的访问量下降后,再评估是否保留跳转。
同时注意服务器稳定性。重定向链越长,中间任何一跳超时或返回 5xx,都会让蜘蛛提前结束。与其在蜘蛛池或外链上堆很多入口,不如先把已有入口的跳转路径缩短,让每个入口都能稳定落到内容页。
最后,定期检查站点地图和主要内链的落点,确认它们返回的是 200 而不是 3xx。对于蜘蛛来说,少一次跳转,就多一次把时间花在真正内容上的机会。