hreflang 仅用于 <link> 标签且必须在 <head> 中声明多语言关系,对浏览器和用户无影响;它要求 rel="alternate"、绝对 URL、完整版本列表、严格符合 BCP 47 的值(如 zh-CN),并与 <html lang> 一致。

hreflang 不是 HTML 元素的通用属性,它只属于 <link> 标签,且仅在 <head> 中生效——浏览器忽略它,用户点击链接时也完全不感知;它唯一的作用,是向搜索引擎声明“这个页面和那些 URL 是同一内容的不同语言/地区版本”。
为什么 <a> 标签加 hreflang 没用
常见错误:把 <a href="/zh/" hreflang="zh-CN">中文版</a> 当成多语言跳转或 SEO 声明。结果是链接照常跳转(靠的是 href),但 hreflang 被浏览器和爬虫直接丢弃——HTML 规范里它根本不是 <a> 的合法属性。
真正起作用的写法必须是:
<head> <link rel="alternate" hreflang="zh-CN" href="https://example.com/zh/"> <link rel="alternate" hreflang="en-US" href="https://example.com/en/"> <link rel="alternate" hreflang="x-default" href="https://example.com/en/"> </head>
-
rel="alternate"是必需的,不能省略或写错(比如写成rel="canonical") -
href必须是绝对 URL,/zh/或./zh/都无效 - 每个语言页都要完整写出所有版本(含自身),漏一条,整组可能被搜索引擎静默忽略
hreflang 值写错会导致整组失效
Google 对 hreflang 值校验极严:只要任意一个值不符合 BCP 47 规范(比如大小写、分隔符、代码组合),整组标签会被当不存在——不报错,也不提示,只是默默不索引多语言关系。
立即学习“前端免费学习笔记(深入)”;
- 正确写法:
zh-CN、en-us、ja-JP(大小写敏感,短横线-,非下划线_) - 典型非法值:
zh_cn、Chinese、zh-ch、cn-zh - 根标签
<html lang="zh-CN">的值必须和hreflang="zh-CN"完全一致,否则整组失效
hreflang 和 lang 属性完全无关
很多人以为写了 hreflang="zh-CN" 就等于页面自动渲染为中文——不是的。hreflang 只影响搜索引擎如何匹配页面,lang 才决定浏览器怎么排版、屏幕阅读器怎么读、拼写检查用哪套词典。
-
<html lang="zh-CN">控制全局语言行为 - 局部混用语言要显式加
lang,比如<p lang="en">API</p> - SPA 切换语言时,必须同步更新
document.documentElement.lang和关键子元素的lang属性
最容易被忽略的点是:hreflang 不提供任何运行时能力——它不跳转、不重定向、不改 DOM、不触发 JS。它的全部价值,只存在于搜索引擎抓取、解析、建立语言关系链的那一刻。验证是否生效,唯一可靠方式是用 Google Search Console 的「URL 检查」工具看「国际化」标签页有没有列出对应关系。



















