做改版、换域名、调整栏目路径时,重定向是最常用的手段。但从蜘蛛的角度看,每一次 3xx 都是一次额外请求,需要在同一份抓取额度里多走一步。跳转本身没有错,问题往往出在链太长、环太多、目标太随意。
蜘蛛遇到 3xx 时会发生什么
蜘蛛请求地址 A,收到 301 指向 B。它通常不会立刻把 B 当作本次结果,而是把 B 放进待抓队列,等下一轮再去取。也就是说,一条跳转链上的每一跳都占用了一次请求。三步跳转,就是三次请求换一个最终页面。
301 与 302 在抓取上的差别
两者都会触发新的请求。区别在于长期信号:301 一般被理解为永久迁移,蜘蛛会逐步把索引和链接信号转移到新地址;302 是临时状态,蜘蛛可能继续回访旧地址,确认迁移是否恢复。如果已经确定不再回滚,长期挂着 302 只会让旧地址被反复访问。
三种常见的跳转浪费
链式跳转
A→B→C→D 这种结构,多见于多次改版叠加:http 到 https 跳一次,带 www 到不带 www 再跳一次,旧栏目到新栏目又跳一次。蜘蛛要跟着走完才知道最终页面,中间每一跳对用户和蜘蛛都是等待。处理办法是把中间层规则改成直接指向最终地址,让链路收敛到一跳。
跳转环
A→B、B→A,或者 A→B→C→A。蜘蛛识别到循环后会停止跟随,但此前投入的请求已经花掉,这个地址也拿不到任何内容。跳转环多数来自配置冲突,比如 CDN 与源站各配了一条方向相反的规则,排查时要两边一起看。
旧地址统一跳首页
这是代价最大的一种。旧的详情页、分类页全部 301 到首页,蜘蛛请求的是具体内容,拿回来的却是首页,这次抓取基本没有产出新信息,也容易让这些地址被当作首页的重复入口。更稳妥的做法是:内容还在,就跳到内容对等的新地址;内容确实删了,用 404 或 410 明确告知,比硬塞首页干净得多。
内链与 Sitemap 里该写哪个地址
内链、Sitemap、canonical 都应当直接指向最终地址,而不是跳转前的地址。
- Sitemap 里写旧地址,等于让蜘蛛每次都要多走一步才能到达内容。
- 站内链接指向会跳转的 URL,会让抓取路径变长,尤其在列表页和分页中影响会被放大。
- canonical 指向一个会跳转的地址,信号传递容易变得含糊,最好直接写最终 URL。
一份简单的自查清单
- 抽一批重要 URL,用抓取工具或命令行看跳转层数,超过一跳的记下来。
- 检查 http 到 https、www 与非 www 是否只保留一次跳转。
- 检查是否存在互跳、循环跳转,CDN 与源站规则是否冲突。
- 检查旧 URL 是否被统一指向首页,能否改为对等内容页。
- 检查内链与 Sitemap 是否还写着跳转前的旧地址。
- 看服务器日志里 3xx 的占比,长期居高不下通常说明规则没有收敛。
跳转是过渡手段,不是长期状态。改版完成、观察一段时间后,应尽量让跳转层数收敛到一跳,并让内链直接指向新地址。
小结
重定向不会直接导致页面无法被抓取,但它会实打实地占用抓取次数、拉长 URL 发现路径。把跳转层数压到最少、让站内链接和 Sitemap 直指最终地址,是成本最低也最容易被忽略的一项基础优化。