重定向:到达 30 个首页,爬虫各要跳几次
重定向在你的首页之前就开始了。30 个站全部把明文 HTTP 跳走,25 个一跳到位,而所有多出来的跳都是域名归一或语言分流——按 IP 分流的那种,替爬虫做了选择。

实测 · 2026-08-18 · 30 个站 · 单次快照
样本与口径:与我们做 robots.txt、sitemap、首页结构三次调查完全相同的 30 个站。每条链都从 http://<裸域> 起,逐跳分别记录,浏览器 User-Agent,2026-08-18,出口在日本。同一次抓取供本批另外四篇用。
爬虫想看你的首页,先得绕一段。这 30 个站没有一个例外:明文 HTTP 一律被重定向走,没有哪个直接把页面给你。25 个站一跳到位,4 个两跳,1 个三跳。链本身都很短,有意思的是那些多出来的跳都在干什么。
怎么测的
跑数前写死,之后没改。
- 请求
http://<裸域>,不跟随重定向,记状态码和Location。 - 把
Location按当前地址解析出绝对地址,重复上一步,最多十跳。 - 遇到第一个非 3xx 就停,数的是重定向次数,不是响应次数。
从裸域加明文 HTTP 起步,是因为这是一个站能收到的信息量最少的请求——一条散落的旧链接、一个旧书签、一个从纯文本提及里抠出地址的爬虫,发出来的就是这个形状。
到达 30 个首页各要几跳
分布很紧。一跳是常态,没有任何一个站接近爬虫的上限。
| 跳数 | 站数 | 例子 |
|---|---|---|
| 1 | 25 | github、vercel、cloudflare、nytimes |
| 2 | 4 | mozilla、stripe、figma、stackoverflow |
| 3 | 1 | slack |
Google 文档给的天花板是十跳:By default, Google's crawlers follow up to 10 redirect hops. However, specific products' crawlers may have different limits.(默认最多跟十跳,具体产品的爬虫上限可能不同。)2026-08-18 读自 developers.google.com 的 HTTP 状态码页。这里没人接近它。真正该看的是抓取预算那页更软的一句:Avoid long redirect chains, which have a negative effect on crawling.(避免长重定向链,它对抓取有负面影响。)
第一跳用的是哪个状态码
HTTP 升 HTTPS 是这 30 个站都在做的那一跳,怎么表达却没谈拢。
| 状态码 | 站数 | 含义 |
|---|---|---|
| 301 | 25 | 永久移动 |
| 308 | 4 | 永久,且保留方法 |
| 302 | 1 | 临时 —— bbc.com |
BBC 用 302 接明文 HTTP 是这里的异类。临时重定向的意思是「旧地址还可能回来」,作为权重归并信号,它比另外 29 个站在同一件事上发的 301 弱。
还有三个站把端口写进了目标地址:slack、webflow、arstechnica 发的都是 Location: https://域名:443/。解析没问题。但爬虫最先学到的那个规范地址,带着一个全互联网别处都不会用的端口号。
多出来的跳,几乎都是语言分流
只有五个站超过一跳,每一个的理由都值得点名。
| 站点 | 链 | 多的那跳 |
|---|---|---|
| figma.com | 301, 301 | 裸域跳 www |
| developer.mozilla.org | 301, 302 | 补上 /en-US/ |
| stripe.com | 301, 307 | 把我们送到 /jp |
| stackoverflow.com | 301, 302 | 根路径跳 /questions 后 403 |
| slack.com | 301, 302, 302 | 先端口,再 /intl/ja-jp/ |
slack 那条最长也最怪:先到 https://slack.com:443/,再到 /?unknown_domain=1,最后到 /intl/ja-jp/?unknown_domain=1。爬虫会当成首页记下来的那个地址,尾巴上挂着一个看起来像内部诊断标记的参数。
🔴 按 IP 分流语言:出海站最贵的一次重定向
stripe 把我们送到 /jp、slack 送到 /intl/ja-jp/,是因为我们的请求从日本出口。这两跳不是它们配错了,从大阪看过去它们完全正确。
但这恰恰是问题所在。爬虫从它自己机房所在的地方发请求,不会换个地方再试一次。如果你在给出任何内容之前就按 IP 决定访客看哪个语言版本,那么被抓走、被引用的,就是你的跳转规则分给那个网段的那一份。
做出海的人最容易在这里栽:给大陆访客跳中文、给海外跳英文,看起来体贴,实际上是替爬虫做了选择——而它只会来一次,从一个固定的地方。上一批我们测 canonical 时撞的是同一堵墙,当时选择整篇砍掉,没把观测偏差当成结论发出去。
按 IP 跳语言,不是把网站展示给爬虫,是把某一个国家的那份复制品展示给它。
这次抓取回答不了什么
我们只测了前门。真正会攒出长链的是内页、改过的旧文章地址、带活动参数的 URL,这次一个都没测。
我们也不知道这些站对爬虫自己的 IP 段怎么响应。上面每一跳都是用浏览器 User-Agent、从一个国家的一个地址发出去的,而地理路由完全可以按网段区别对待。
今天能查的四件事
两件该做,两件该停。
- 跑
curl -sIL http://你的域名,数 3xx 有几行。两行正常,三行要有个说法,四行说明有个跳转指向了另一个跳转。 - 让 HTTP 升 HTTPS 那一跳直接落在最终域名上。先跳
https://example.com再跳https://www.example.com,等于给你每一个入口都白加一跳。 - 永久的搬迁别用 302。你会损失掉 301 本可以带来的权重归并。
- 别在访客看到任何东西之前,用 IP 替他决定语言。改成把各语言版本互相声明清楚,让爬虫看得见全部。
各语言版本该怎么互相声明,测在hreflang 到底有几个站在声明那篇,那正是上面这种 IP 跳转的替代做法。地址解析到空处时爬虫拿到什么,在不存在的地址返回了什么那篇。把全站的跳转链都跟一遍,而不是只跟一个前门,是 QueryWin 正在做的事。
常见问题
你们是怎么测的
每一跳发一次请求,从 http://<裸域> 起,手动解析重定向,好把每个 Location 单独记下来。浏览器 User-Agent,2026-08-18,跑一遍,不重试。
几跳算多
Google 的爬虫默认跟到十跳,技术上限很宽松。这个面板给出的实用答案是:30 个里 25 个只要一跳,所以到了两跳就该看一眼。
308 比 301 好吗
对首页来说这个区别是学术的,两个都是永久、都归并权重。308 会保留请求方法,那对表单提交有意义,对一个来取页面的爬虫没有。
重定向会不会丢权重
Google 说过永久重定向会传递信号,这次一点都没测。我们能说的只有一句:每一跳都是爬虫花掉却没拿到内容的一次请求。


