27 个首页全写了 html lang,Google 说它不看这个
html lang 这个属性 27 个首页一个不落全写了,而 Google 文档明写判断语言不看它。2026-08-21 抓的这一批里,有两个站交付给我们的是没要过的语种。

实测 · 2026-08-21 · 27 个首页 · 每站一次请求 · 出口在日本大阪
样本与口径:2026-08-15 起一直在用的那 30 个站,2026-08-21 每站首页抓一次,浏览器 UA,请求头带 Accept-Language: en-US,en;q=0.9。解析开头那个 <html> 标签的 lang、xml:lang、dir,再数 head 里带 hreflang 的 rel="alternate" 有几条。
这批首页 27 个全都写了 html lang,一个不落。而 Google 的文档明写:它判断页面语言不看这个属性。真正值得看的是另一件事 —— 有两个站交付给我们的,是我们没要过的那个语种。
怎么测的
每站一次 HTTP 请求,不渲染、不重试。出口 IP 是 23.106.140.215,抓取当天查到的归属地是日本大阪。这个细节下面会用到两次。
纳入规则跑数前就定死了:状态 200、响应体不少于 10,000 字节、含 <body。30 个里 3 个没过,全程剔除:stackoverflow.com 和 medium.com 回 403,www.reddit.com 回的是 8,393 字节的空壳。
同一个属性,六种写法
27 个站全声明了语言,但怎么写没有共识,而且其中两个根本不是在描述英文。
| 声明的值 | 站数 | 谁 |
|---|---|---|
en | 19 | 面板里的大多数 |
en-US | 4 | mdn、wired、techcrunch、theverge |
en-GB | 1 | www.bbc.com |
en-us | 1 | www.notion.com |
en-JP | 1 | stripe.com |
ja-JP | 1 | slack.com |
Notion 那个小写的 en-us 不算错 —— 这个标签本来就不区分大小写,地区码大写只是惯例。但 27 个里只有它这么写。这类细节能留好几年,因为从来没有任何东西会为它报错。
html lang 到底是写给谁看的
它告诉浏览器和读屏软件这份文档是什么语言。它不负责告诉 Google。Google Search Central 的《Managing multi-regional and multilingual sites》,2026-08-21 读到的原文:「Google uses the visible content of your page to determine its language. We don't use any code-level language information such as lang attributes, or the URL.」
换句话说,写对了在搜索侧不加分,写错了在搜索侧也不扣分。真正会照着它执行的是读屏软件 —— 念哪种发音、选哪个语音包,都从这里取。光这一条就够理由把它写对。
两个站给了我们没要过的语种
Slack 返回的首页声明的是 ja-JP,Stripe 返回的是 en-JP。我们的请求头写的是 Accept-Language: en-US,我们的 IP 写的是大阪。两次都是 IP 赢了。
这已经是这批站上第四次撞到出口位置改变返回内容,前几次记在 重定向链要跳几次 那篇里。同一份 Google 文档对这个做法说得很直:「Don't use IP analysis to adapt your content. IP location analysis is difficult and generally not reliable. Furthermore, Google may not be able to crawl variations of your site properly.」
为什么一次来自一个国家的访问就足以说明问题,答案也在同一页:「Google crawls the web from different locations around the world. We do not attempt to vary the crawler source used for a single site in order to find any possible variations in a page.」爬虫从哪儿来就拿哪一版,拿完就走。它不会换个地方再试一次。
lang 记录的是你的服务器决定给什么,不是访客要了什么。
做出海站的人对这条要格外敏感:按 IP 把访客分流到某个语种版本,在多语言插件和 CDN 规则里是默认选项之一。它对真人是体验优化,对一个固定出口的爬虫就是「你只准看这一版」。
旁边那几个属性基本没人写
lang 是那个永远都在的属性。同一个标签上的其他信号几乎是空的。
| 信号 | 站数 | 说明 |
|---|---|---|
lang | 27 / 27 | 全员都有 |
dir | 4 / 27 | canva、shopify、substack、wired |
xml:lang | 0 / 27 | 没有一个 |
| hreflang 链接 | 11 / 27 | 最多 107 条,16 个站是 0 |
Canva 声明了 107 条 hreflang 备用地址,stripe 89 条,shopify 71 条,另外 16 个站一条都没有。这个差距在 谁真的声明了 hreflang 里量过。这里只用它说明一点:一个站可以把 hreflang 做得很齐全,同时仍然给固定出口的爬虫交付了错的那一版 —— 这是两套互不相干的机制。
这次抓取回答不了什么
一个国家的一次请求画不出这些站的全貌。Stripe 和 Slack 对从美国来的爬虫可能返回的就是 en,我们在这里没法验。能确定的只有一句:2026-08-21 一个在大阪的客户端收到了什么。
我们没有验证任何引擎实际拿这个属性做什么。Google 文档写了不用它;答案引擎读不读、读了做什么,是本次测量的局限,不是结论。不猜。
还有一条:声明的语言不等于核对过的语言。本次没有检查写着 en 的页面正文是不是真的英文。27 个声明就是 27 个自称。
回自己站上查什么
两分钟,三步。
- 看一眼自己首页源码,确认开头那个
<html>上的lang值和页面上看得见的文字对得上。 - 换一个你不做生意的国家的出口,再抓一次自己的首页,比较两次的
lang值。不一样,就说明有一条 IP 规则在替你做决定。 - 别指望靠这个属性解决搜索侧的语言问题。Google 说它读的是可见正文,所以要改的是正文。
如果问题正好是「爬虫到底收到了哪一版」,逐个 UA 看回来的是什么,就是 AI 爬虫可达性检查 在做的事。
常见问题
你们是怎么测的?
2026-08-21 每站首页请求一次,请求头带英文 Accept-Language,出口 IP 在日本,然后解析开头那个 <html> 标签的属性。不渲染,不重试。
html lang 影响 SEO 吗?
Google 明写它判断语言用的是页面可见正文,不用 lang 这类代码层信息。这个属性服务的是浏览器和读屏软件。
该写 en 还是 en-US?
都合法。这 27 个站里 19 个写 en、4 个写 en-US。只有当你确实另外提供了一个地区版本时,地区码才值得加。
为什么我要英文,站点返回的是日文?
因为它按 IP 分流,而不是按 Accept-Language。2026-08-21 Slack 对我们就是这样,返回的页面声明的是 ja-JP。


