站点做改版、换域名、上 HTTPS、统一带 www 或不带 www 的写法时,重定向几乎不可避免。单跳 301 属于正常且被推荐的配置,问题出在“跳一次再跳一次”的链式结构、跳转类型混用,以及跳向无关页面。这些情况不会立刻让页面消失,但会让抓取在入口层多绕路,预算被消耗在不产生新信息的请求上。
重定向在抓取流程里发生了什么
蜘蛛拿到一个 URL 后,会先请求它,读取响应头。如果是 3xx,它需要记录目标地址,再发起一次请求,才能拿到正文和其中的链接。跳一次是成本,跳三次就等于把一次抓取变成四次请求。对单条 URL 来说不算什么,但如果全站导航、Sitemap、外链都落在需要多跳的地址上,累积起来的开销就很明显。
更麻烦的是入口发现:只有当蜘蛛真正取到最终页面的 HTML,页面里的链接才会进入待抓队列。跳转链越长,中间任何一环超时、返回错误或指向 404,链条后面的页面就都不会被发现。
常见需要核对的重定向形态
- 链式跳转:A→B→C,常见于先跳 HTTPS 再跳 www,或旧域名先跳新域名再跳路径。
- 跳转类型混用:永久迁移用 302 或 307,蜘蛛按临时跳转处理,可能仍保留旧 URL 的抓取与展示。
- 跳到无关页面:404 页面被 302 送到首页,或已下架商品跳到分类页,容易形成大量软着陆。
- 循环跳转:A→B→A,蜘蛛最终只能报错放弃,页面长期不被取到。
- 客户端跳转:meta refresh 或 JS 跳转,首屏 HTML 里可能没有目标地址的可解析链接。
- 协议与主机名多次切换:http→https→带 www→带尾斜杠,一次请求走完四跳。
建议的核对顺序
- 用爬虫工具或命令行批量取全站入口 URL 的响应头,记录状态码与 Location。
- 把 Location 再取一次,看是否还有 3xx,直到出现 200 或 4xx,统计跳转次数分布。
- 重点检查跳转两次以上的 URL,判断是配置遗漏还是历史遗留。
- 比对 Sitemap 与内链:如果里面写的是旧地址,把声明改成最终地址。
- 检查 robots.txt、canonical、Sitemap 中的地址是否与最终落地地址一致。
- 确认跳转类型:永久迁移用 301/308,临时活动才用 302/307。
日志里怎么看
抓取日志中,如果大量 301、302 集中在同一批路径,且这些路径的请求量明显高于实际页面数,说明站内或站外还在用旧地址。可以按状态码分组,看 3xx 请求占比,再拉出对应的来源页,找到是谁在持续输出旧链接。
判断标准很简单:一条 URL 从被请求到拿到正文,理想情况只需要一次跳转,而且这一跳应该指向最终地址。
收链时的几个操作
- 把 http、https、www、非 www 的四种组合收敛到一种,其余全部一跳直达。
- 旧路径退役时,尽量直接跳到新路径,不要先跳首页再让用户自己找。
- Sitemap 只提交最终地址,不要提交会跳转的 URL。
- 分页、筛选参数页如果有跳转,确认跳转后仍能被正常抓取。
- 改完跳转后,观察一段时间内 3xx 请求占比是否下降,最终页面的抓取量是否回升。
重定向本身不是错误。把跳转控制在必要范围内、让每个入口一跳到位,才是减少抓取浪费的关键。