hreflang标签仅用于SEO,不触发用户自动跳转;必须在每页head中成组互指所有语言版本,值须严格符合BCP 47规范,href必须为绝对URL,且与html lang属性职责分离、各自独立校验。

hreflang 标签根本不会让用户自动跳转
加了 <link rel="alternate" hreflang="zh-Hans" href="https://example.com/zh/">,用户访问英文页时不会“自动切到中文”——浏览器完全忽略它。这个标签只给搜索引擎爬虫看,用于声明页面间的语言对应关系。如果你期望用户一进站就按 Accept-Language 跳转,得靠服务端重定向或前端 JS,和 hreflang 无关。
每个语言页的 <head> 必须完整互指所有版本
漏掉任意一个语言版本,整组 hreflang 都可能被 Google 忽略。不是“写几个就行”,而是必须成组、全覆盖、双向一致:
- 中文页(
https://example.com/zh/)的<head>里要有指向英文、日文、x-default 的<link>,也要有指向自身的hreflang="zh-Hans" - 英文页(
https://example.com/en/)也必须包含完全相同的三条(或更多)<link>,只是顺序和 href 值对调 -
hreflang="x-default"不是可选项,推荐指向语言选择器页或最通用首页(如https://example.com/),但不能替代具体语言标签
hreflang 值和 href 必须严格合规,错一个字符就失效
常见失效原因不是逻辑错,而是格式硬伤:
-
href必须是带协议的绝对 URL,/zh/或./zh/会被爬虫直接忽略 -
hreflang值必须符合 BCP 47:用zh-Hans,不用zh_CN、Chinese或zh-cn(大小写和连字符位置都敏感) - 地区码不能乱猜:
en-GB正确,en-UK错误;ja-JP正确,jp-JP错误 - 拼写错误如
rel="alernate"或漏掉rel属性,整条标签作废
hreflang 和 <html lang> 完全无关,别混着设
hreflang 是给搜索引擎看的链接关系,<html lang="zh-Hans"> 是给浏览器和屏幕阅读器看的内容语言。两者职责分离:
立即学习“前端免费学习笔记(深入)”;
- 中文页写了
hreflang="en"指向英文版,但自己<html lang="en">没改 → 浏览器按英文渲染中文字体、标点、语音朗读全错 - 英文页的
<html lang>必须是en或en-US,不能因为加了中文hreflang就改成zh-Hans - 页面内混用语言时,要用
<p lang="en">显式标注,不能依赖hreflang
真正容易翻车的地方,是把 hreflang 当成前端语言切换开关,或以为写一次就能全局生效。它本质是一组声明性元数据,必须每页手动生成、逐项校验、全量覆盖,且和服务端路由、HTML lang、CDN 缓存策略强耦合——少一个环节对不上,SEO 效果就归零。



















