hreflang 仅告知搜索引擎页面的语言版本位置,必须严格遵循bcp 47规范、全量互指、绝对url、静态生成且与一致,否则整组失效。

hreflang 不是用来切换语言的,它只告诉搜索引擎“这个页面的其他语言版本在哪”。配置错一个字符、漏一条自指、用相对路径,整组标签就等于没写。
hreflang 值必须严格符合 BCP 47 规范
浏览器和爬虫不接受“差不多”的写法。常见错误包括:zh_CN(下划线)、EN-us(语言大写)、chinese(非标准码)、zh-TW(未明确脚本,Google 更倾向 zh-Hant-TW)。
正确写法只有这些:
-
en(通用英语) -
en-US(语言小写 + 地区大写) -
zh-Hans(简体中文,注意 H 大写、s 小写) -
zh-Hant-HK(三段式,合法且明确)
大小写、连字符、顺序全错不得——zh-hans 和 zh-HANS 都会被 Google 忽略。
每个页面都得完整声明全部语言版本(含自己)
不是“英文页写中文链接”,而是“英文页要同时声明英文、中文、日文、x-default 四条 <link>”。漏掉任意一条,整组可能被降权。
典型翻车点:
- 中文页没反向声明
hreflang="en-US" -
x-default指向了 /lang-selector/,但该页没在所有语言页中互指 - 某语言页返回 404,导致闭环断裂
验证方式:用 document.querySelectorAll('link[rel="alternate"][hreflang]') 手动检查每页是否输出全部条目,数量必须一致。
href 必须是绝对 URL,且协议、域名、路径全匹配
相对路径如 /zh/ 或带参数的 https://example.com/zh/?v=2 都会被忽略;HTTP 和 HTTPS 混用(比如英文页 href 是 http://,中文页是 https://)会让搜索引擎认为这是两个不同站点。
关键约束:
- 所有
href必须带协议、域名、结尾斜杠(https://example.com/zh/✅) - 子目录、子域名、独立域名方案必须统一,不能英文用
en.example.com,中文却用example.com/zh/ -
x-default的href必须指向真实可访问页面,且该页本身也要包含完整 hreflang 声明
别用 JS 动态注入 hreflang 标签
搜索引擎不执行 JS,所以运行时用 document.head.appendChild() 或 innerHTML += 添加的 <link rel="alternate"> 对 SEO 完全无效,还容易造成重复声明(后端已输出,前端又加一遍)。
必须静态生成,或至少保证:
- JS 注入前先
document.querySelectorAll('link[rel="alternate"][hreflang]').forEach(el => el.remove()) - 避免用
innerHTML拼接,改用head.replaceChildren(...)确保干净覆盖 - SPA 路由切换时,必须同步更新
属性——hreflang 和lang是两套系统,互不感知
最常被忽略的细节:根 的值必须和当前页的 hreflang="zh-CN" 完全一致(大小写、连字符),否则 Google 会静默丢弃整组 hreflang。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











