hreflang:27 个首页里只有 10 个声明了,2 个漏了 x-default
hreflang 是唯一能告诉引擎「哪个版本归哪批读者」的标记。2026-08-17 读了 30 个首页:能读到的 27 个里 10 个声明了,其中 2 个没有 x-default。

实测 · 2026-08-17 · 30 个站 · 单次快照
样本与口径:与我们做 robots.txt、sitemap 两次调查完全相同的 30 个站。每站首页一次请求,浏览器 User-Agent,2026-08-17。3 个站拒绝了我们,所以下面的分母是 27。这一次抓取同时供本批另外四篇用,同一份数据,各问各的问题。
做出海独立站的人迟早要上多语言,而 hreflang 是唯一能告诉引擎「哪个版本归哪批读者」的标记。27 个能读到的首页里只有 10 个声明了它,其中 8 个带 x-default。真正扎眼的不是那 17 个没写的——它们大多本来就只有一种语言——而是 Notion:报了 22 个语种,却没有 x-default。
谁声明了,声明了多少个
数量差得很远。Stripe 首页一口气声明 89 个,BBC 只有 2 个。这个数字说的是站的规模,不是实现质量。
| 站点 | 声明数 | x-default |
|---|---|---|
| stripe.com | 89 | 有 |
| shopify.com | 66 | 有 |
| figma.com | 34 | 有 |
| notion.com | 22 | 没有 |
| slack.com | 16 | 有 |
| cloudflare.com | 10 | 有 |
| nytimes.com | 9 | 有 |
| github.com | 8 | 有 |
| webflow.com | 4 | 有 |
| bbc.com | 2 | 没有 |
怎么测的
提取规则在抓取前写死,看到结果之后一条没改。
- 对
https://{域名}/发一次请求,跟随重定向,用桌面浏览器的 User-Agent。 - 从返回的 HTML 里取出每一个同时带
hreflang属性的<link rel="alternate">。 - 数总数、数去重后的值,并记录里面有没有
x-default。
我们读的是服务器交付的那份 HTML。前端脚本后注入的标签这个方法看不见——而不执行页面的爬虫同样看不见。
漏掉 x-default 是最贵的那种漏
x-default 告诉引擎:当读者不属于任何一个已声明的语种时,该给他哪一版。没有这一行,落在声明范围之外的读者拿到哪一版由引擎决定,你说了不算。
Notion 值得单看。22 个语种是认真做过本地化的规模,偏偏少了那一行管「其余所有人」的声明。BBC 只报 2 个,同一个洞,波及面小得多。
🔴 用 IP 跳转代替 hreflang,是出海站最容易踩的那个坑
这一节既是本次测量的局限,也是一个结论。我们的出口 IP 归属日本大阪,于是有两个站在返回 HTML 之前就先把我们送走了。
| 请求的地址 | 实际拿到的 |
|---|---|
| stripe.com | stripe.com/jp |
| slack.com | slack.com/intl/ja-jp/ |
所以这两家的 hreflang 是从日语页上数出来的,不是美国读者看到的那一页。它们的 canonical 也指向日语地址——对我们拿到的那个页面来说这是对的,只是那不是我们要的页面。
对做出海的人这条尤其要紧:国内建站习惯按地区跳转,但爬虫是从固定国家出口的,主流 AI 引擎公布的爬虫 IP 段大多落在美国。你用 IP 跳转做地区分发,爬虫这辈子只会看到其中一个版本,另外几个版本它根本不知道存在。hreflang 和 IP 跳转是两套机制在解同一个问题,只有前者是说给引擎听的。
这次没查的
我们没有验证互相回指。一组 hreflang 只有在它点名的每个页面都反过来指回整组时才算有效,光验 Stripe 一家就要再抓 89 个地址。我们每站只抓了一页,所以只能说这 10 组声明存在,说不了它们自不自洽。
引擎拿它们做了什么,我们也不知道。声明是输入,最后展示哪一版是站外观察不到的决定。
你该怎么查自己的 hreflang
三步,按性价比排。
- 声明了不止一个语种,就确认
x-default在。一行的事,省掉一次猜。 - 用 curl 取一次自己的首页,数一下 alternate 有几个。做了多语言却数出 0,说明标签是前端注入的,爬虫看不到。
- 别拿 IP 跳转代替 hreflang。它把每个爬虫都锁死在它出口国那一版上。
- 别声明自己并没有提供的语种。点名一个 404 的地址,比不声明还糟。
如果你还在决定先上哪几个语种,那是另一个问题——关键词挖掘那篇讲了为什么每个语种要各选各的词,而不是把英文词翻过去。同一批 27 个首页在结构化数据上的表现,写在多数首页根本没有结构化数据里。把这些检查在整站范围内做完、而不是一页一页手动查,正是 QueryWin 在做的事。
常见问题
hreflang 会影响 AI 答案吗?
这次没测,所以不下结论。hreflang 可验证的作用是告诉搜索引擎哪个语言版本属于哪批读者。AI 引擎是读这个标签、还是直接从正文判断语言,站在外面观察不到。
声明 89 个是不是太多了?
你真有 89 个就不多。长清单的代价是页面体积,以及维护——每一条都得一直活着。Stripe 那份加载正常。
只有一种语言要不要加?
不用。这里 27 个站有 17 个一条没声明,多数就是单语言站。这个标签是用来消歧的,没有歧义就没有它的事。
标签放哪儿?
放在这一组里每个页面的 HTML head 里,或者写进 sitemap。两种都有文档;放 head 的好处是一条 curl 就能验。


