服务器返回 301、302、307、308 时,蜘蛛拿到的不是页面内容,而是一个新的地址。它必须再发一次请求,才能继续这条路径。单次跳转很常见,也不算什么大问题;真正麻烦的是跳转连成一条链,一个 URL 要经过三四个地址才能落到最终页。
一次跳转,两次抓取
对蜘蛛来说,抓取预算里记的是请求次数,不是“最终拿到了几个页面”。一次跳转至少消耗两次请求:一次拿 3xx 响应,一次拿最终内容。链上有三跳,成本就是四次。站点规模不大时感觉不明显,URL 数量到几万、几十万,跳转链就会实打实地占掉一部分抓取额度。
同时,跳转也拉长了发现时间。蜘蛛在链上中途停下、限速、改天再来,新页面进入索引的时间就会往后拖。
跳转链通常从哪里长出来
- HTTP 到 HTTPS 一次跳转,再从裸域跳到 www,这是两条独立规则,叠在一起就成了两跳。
- 旧栏目改版时逐次配置的跳转,A 跳到 B,B 后来又跳到 C,旧规则没清理,A 就变成两跳甚至三跳。
- CDN、负载均衡、反向代理各自加了一条跳转规则,比如补斜杠、统一小写、修正大小写路径。
- 页面里用 meta refresh 或 JavaScript 做的“跳转”,蜘蛛需要先下载 HTML 再执行,成本比 HTTP 跳转更高,效果也更不稳定。
- 移动端与桌面端互跳、多语言站点按 IP 或语言自动跳,容易形成来回跳或按 UA 分流的多条链。
链太长会出现什么
- 抓取次数被摊薄:本该用在内容页上的请求,花在了中间地址上。
- 信号分散:内链、外链、Sitemap 如果指向的地址不一致,同一份内容会出现多个入口,权重判断更模糊。
- 循环与断链:两条规则互相指向,或跳到已经失效的地址,蜘蛛走到一半只能放弃。
- 状态码误判:临时跳转反复出现时,蜘蛛可能仍把旧地址当作主版本,新地址的收益被延后。
把跳转收敛到一跳
- 梳理现有规则,找出所有落在中间的地址,确认每一跳的目标是否必要。
- 让最常见的入口一次到位:http 直接跳 https 的 www 版本,不要在 http 裸域上再中转一次。
- 内链、Sitemap、canonical、分享链接统一写成最终 URL,不要依赖跳转来“修正”。
- 改版时用 301 指向新地址,而不是先指到临时页再指到最终页。
- 定期用日志或抓取工具抽查 3xx 的分布,看看有没有超过一跳的路径。
服务器与配置侧的检查点
很多跳转不是内容团队配的,而是服务器和边缘节点自动加的。检查 HSTS 设置、CDN 的强制 HTTPS、回源协议、URL 重写规则,能发现一批看不见的中转。若站点使用 WAF 或限流,还要确认跳转响应本身没有被误拦成 403 或 5xx,否则蜘蛛看到的是“错误”而不是“搬走了”。
跳转本身没有错,错的是让蜘蛛在路上多走几趟。能把一个地址一跳送到最终页,就别用两跳。
小结
把跳转链当作抓取路径上的收费站:每过一个,都要交一次请求。定期清理中间地址、让链接直接指向最终 URL,是最省事的做法。它不能让页面一定被收录,但能让蜘蛛少花冤枉时间,把配额留给真正的内容。