lang属性必须严格遵循bcp 47标准,使用小写字母和短横线(如en、ja-jp),禁用下划线或大写;根元素lang须在构建时静态写入且与内容一致;局部外语需单独声明lang;hreflang必须与对应页面html lang值完全匹配。

lang 属性必须写对,否则外语页面的 SEO、语音合成、屏幕阅读器都会出问题——不是“写了就行”,而是“写错等于没写”。
lang 值必须严格匹配 BCP 47 标准
浏览器和搜索引擎只认小写字母 + 短横线 + 可选地区码的组合,其他全是无效值。
-
en、ja、fr、de是合法的 ISO 639-1 主语言码 -
en-US、ja-JP、zh-Hans是合法的带区域/变体的完整码(注意用短横线,不是下划线) -
en_US、ZH-CN、Chinese、zh-ch全部被忽略,等同于没写 - 页面若面向全球英文用户,用
en即可;若明确服务美国用户且需美式拼写/断字,才用en-US
HTML 根元素的 lang 必须与实际内容语言一致
不能靠 JS 后续改,也不能靠模板变量延迟注入——构建产物里 必须真实存在且准确。
- 英文首页:必须是
,不是lang="en-US"或lang="english" - 日文产品页:必须是
,不是lang="jp"或lang="ja_JP" - 构建工具如
html-webpack-plugin必须通过templateParameters.lang注入,模板中写 - Vite 用户注意:
vite-plugin-html默认不透传参数,得显式配置inject或用vite-plugin-inspect验证最终注入值
局部外语内容必须单独声明 lang
整页是中文,但引用了一句法语名言?那句必须加 lang="fr"。否则语音引擎会用中文音读法语,屏幕阅读器可能跳过,搜索引擎也可能判定语义混乱。
- 正确:
<p lang="fr">C'est la vie.</p> - 错误:
<p>C'est la vie.</p>(依赖父级lang="zh-CN"继承) - 代码块、引文、术语、甚至
<mark></mark>里的外语词,都应显式标注,例如<code lang="python">print("hello") - CSS 中可用
:lang(fr) { font-family: "Cascadia Code", monospace; }控制字体,但前提是 HTML 里真写了lang
lang 和 hreflang 不是一回事,但必须互相验证
你在英文页写 ,同时在 里放 <link rel="alternate" hreflang="ja" href="https://example.com/ja/">,那 https://example.com/ja/ 页面的根 lang 就必须是 ja,不能是 ja-JP 或 zh。
- Google 会比对每个
hreflang值和对应页面的—— 不一致就静默失效 - 验证方法:用 Google Search Console 的「URL 检查」工具抓取页面,看「国际化」标签页是否列出有效配对
- CI 中可加脚本检查:提取构建后 HTML 中的
和所有hreflang值,确保集合完全一致
真正难的不是记住 en 对应英语,而是让每一份构建产物、每一个动态插入的 DOM 节点、每一句 speechSynthesis 要朗读的文字,都带着可验证、不可绕过的 lang 值。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











