站内做改版、换域名、调整目录结构之后,经常会出现这样一条路径:一个外部链接指向 A 地址,A 跳转到 B,B 又跳转到 C,最终用户看到的页面在 C。对访问者来说只是慢了一点,但对爬虫来说,这一路上每一步都要单独发一次请求、单独解析一次响应。跳数越多,入口地址到最终页面之间的距离就越长。
一次跳转和三次跳转,差别在哪里
单次 301 跳转是很常见的做法,本身没有问题。问题出在跳转被层层叠加之后:爬虫请求 A,收到跳转指令,再请求 B,又收到跳转指令,再请求 C。这几步都会占用抓取资源,而最终只有 C 这一页的内容会被真正读取。也就是说,同样的内容,经过一条三跳的链路被发现,消耗的请求数可能是直接访问的三倍。
更麻烦的是,跳转链中间如果出现断点——比如 B 返回 404、B 指向了不相关的页面、或者 A 和 B 相互跳转形成循环——爬虫可能根本走不到 C。这时候页面本身质量不差,却因为入口路径出了问题而迟迟没有进入索引。
跳转链是怎么堆出来的
- 历史改版没清理:早期用 http,后来换 https,再后来换域名。旧地址指向新地址,新地址又指向更新的地址,前三代地址一直留着。
- 规范化与跳转叠用:一个 URL 本应通过 canonical 指向规范版本,同时也做了 301,方向还不一致。
- 结尾斜杠与大小写各有一版:/Page 跳到 /page,/page 又跳到 /page/,机器识别不出这是同一个地址。
- 工具生成的跳转:某些插件、CDN 规则、跳转脚本各自配置了一条,互不知情,合起来就成了多跳。
- 短链或活动链接:为了统计点击,先过一层跳转服务,再到真实地址,再到规范地址。
它对抓取和收录的实际影响
第一是消耗。抓取资源是有限的,跳转链越多,越多的请求花在了中转上,留给真正内容页的次数就少了。第二是延迟,新页面发布后,如果入口不是直达,被发现和被处理的时间可能被拉长。第三是不确定性,中间任何一环配置出错,整条链路就断在那里。第四是地址分裂,如果链路上每一跳都被当成独立地址记录,同一个页面在系统里可能出现多个身份。
排查与收敛的顺序
- 先找出链路长的入口。用爬虫工具或日志,按跳转次数排序,优先看那些跳了三次以上的地址。重点是外链指向的地址、站内重要入口、sitemap 里的地址。
- 确认最终页是谁。把每条链路的终点写下来,判断它是不是你想要的那个规范地址。如果终点本身就是另一个需要再跳的地址,说明链路还没收敛完。
- 把中间层去掉。让入口直接指向最终页,中间的 301 能用一条合并的就合并,能改源链接的就改源链接。sitemap、内链、对外投放的地址都同步更新。
- 检查循环和断点。A 跳 B、B 跳 A,或者某一跳返回 404、500,都要单独处理。跳转到与内容无关的页面同样要修正。
- 跳转方向统一。canonical 指向的版本和 301 指向的版本要一致,不要一个指这边、一个指那边。
- 观察一段时间。调整后继续看日志,确认爬虫对入口的访问里,跳转响应减少、直达响应增加。
不是所有跳转都该删
合并重复地址、旧链接过渡、http 转 https,这些跳转是有意义的,保留一条直接跳转即可。真正要改的是“跳转再跳转”这件事本身——保留终点,去掉中间环节。
判断标准很简单:从入口出发,能不能一步到达最终页面。能一步到的,就别让它走三步。
收录本身受很多因素影响,把跳转链理顺不会立刻带来收录变化,但它减少了路径上的损耗和不确定性,让爬虫把请求花在内容上,而不是花在转车上。这件事做起来不复杂,效果也偏向“少出问题”,属于基础但值得定期检查的一项。