hreflang仅用于告知搜索引擎页面的语言版本关系,不影响用户端语言切换;必须用绝对URL写在<head>中,各语言页需双向声明,值须符合BCP 47规范,且与lang属性无关。

hreflang 不是用来切换语言的,它只告诉搜索引擎:这个页面的其他语言版本在哪。写错、漏写、用相对路径,整组标签就失效。
hreflang 必须成组双向声明,漏一个等于全白写
每个语言页的 <head> 里,都要包含指向所有语言变体(含自己)的 <link rel="alternate" hreflang="...">。不是“英文页写中文链接就行”,而是:
- 英文页要写:
hreflang="en-us"、hreflang="zh-cn"、hreflang="ja-jp"、hreflang="x-default" - 中文页也要写这四条,只是
href指向各自对应 URL,且hreflang="zh-cn"的href必须是当前页自身绝对地址 - 漏掉任意一条(比如中文页没写
hreflang="en-us"),Google 可能直接忽略整组
hreflang 值必须严格符合 BCP 47,拼写错误=无效
这不是靠经验填的缩写,错一个字符爬虫就拒收:
- 简体中文中国大陆:只能用
zh-cn(小写,连字符,不能是zh_CN、zh或chinese) - 繁体中文台湾:用
zh-tw,不是zh-hant(虽合法但 Google 更倾向带地区码) - 英语通用版慎用
en;推荐明确写en-us或en-gb -
x-default只能出现一次,且href必须指向兜底页(如国际首页),不能和某个具体语言重复
href 必须是绝对 URL,相对路径会被完全忽略
浏览器不解析 hreflang,但 Googlebot 会严格校验格式。常见翻车点:
立即学习“前端免费学习笔记(深入)”;
- 写成
href="/zh/"→ 爬虫当没写 - 正确写法必须带协议和域名:
href="https://example.com/zh/" - 所有语言页的 href 协议要一致(不能有的用
https,有的用http) - 子目录(
/en/)、子域名(en.example.com)、不同域名(example.cn)必须一一对应,混用会导致验证失败
hreflang 和 lang 属性完全无关,别指望它自动改页面语言
很多人以为加了 hreflang="zh-cn",用户点进来就自动显示中文——这是根本性误解:
-
hreflang是给爬虫看的链接关系,不影响 DOM 渲染、字体、标点、屏幕阅读器发音 - 页面实际语言由
<html lang="zh-cn">决定;嵌入的中文段落还得单独加<p lang="zh-cn"> - JS 动态切换语言时,
hreflang仍需静态写死在每个语言页的<head>中,不能靠 JS 注入(爬虫不执行 JS)
最易被忽略的是“自指+互指”的完整性,以及 hreflang 和 lang 的职责分离——前者管索引,后者管渲染,两者必须各自配齐、各自校验,缺一不可。



















