hreflang 是 link 标签专属属性,仅用于 head 中 rel="alternate" 的成组声明;每页须互指全部语言版本,值需符合 bcp 47 规范,绝对 url,且 html lang 必须一致,否则整组失效。

hreflang 不是 HTML 元素的属性,它只属于 link 标签
很多人在写 a 标签时加 hreflang="zh-CN",浏览器完全忽略,谷歌也看不到——hreflang 是 link 元素的合法属性,且**仅用于 中的 <link rel="alternate"> 声明**。它的作用不是让用户点击切换语言,而是告诉谷歌:“这个页面还有哪些语言+地区版本”。
每个语言页的 必须成组互指全部版本
假设你有英文(en-US)、简体中文(zh-Hans)、日文(ja-JP)三个版本,那么每一页的 都要包含三条 <link>,包括指向自身的那条:
<link rel="alternate" hreflang="en-US" href="https://example.com/en/"><link rel="alternate" hreflang="zh-Hans" href="https://example.com/zh/"><link rel="alternate" hreflang="ja-JP" href="https://example.com/ja/">
漏掉任意一条(比如中文页没写回指英文页的 <link>),整组会被谷歌静默忽略——不是报错,是当没写。
- 所有
href必须是绝对 URL,协议、域名、路径全量写出,不能用/zh/或./zh/ -
hreflang值必须严格符合 BCP 47:小写语言码 + 短横线 + 大写地区码(zh-Hans✅,zh_hans❌,zh-CN❌) - 根
的值必须和hreflang="zh-Hans"完全一致,否则整组失效
常见踩坑点:x-default、大小写、动态注入
hreflang="x-default" 不是“默认语言”,而是兜底页,通常指向语言选择器页或首选语言首页(如 https://example.com/)。它不能替代具体语言标签,必须和其它 hreflang 并存。
- 大小写敏感:
EN-US、en-us、En-US全部非法,只有en-US合规 - JS 动态插入极易重复:后端已输出静态
<link>,前端又用 JS 创建新<link>并 append,导致同语言被声明两次,谷歌判定冲突后弃用整组 - URL 返回非 200(如 404、301 跳转、权限拦截)会让对应语言关系断裂,验证时需确保每个
href可直接访问且返回正确语言内容
验证是否生效,别靠肉眼,得用工具
打开 Google Search Console →「URL 检查」→ 输入某语言页 URL → 查看「国际化」标签页。只有这里列出所有互指语言版本,才算真正生效。
最常被忽略的是闭环验证:不仅要确认英文页声明了中文页,还要手动打开中文页源码,检查它是否也声明了英文页;同时核对三者的 html lang、hreflang、href 绝对路径、HTTP 状态码,四者缺一不可。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











