html5 中 标签必须且只能在根元素上设置 lang 属性,如 lang="zh-cn",以声明整页主语言;子元素上的 lang 仅用于局部外语内容,不可替代根声明。

HTML5 中规范的 标签必须包含 lang 属性,且只能出现在根元素上,不能省略、不能重复、也不能写在其他位置。
必须写在 html> 开始标签里
浏览器、屏幕阅读器(如 VoiceOver、NVDA)、搜索引擎和翻译工具,全部只读取 这一处的值作为整页语言依据。写在 、<div> 或任何子元素上,对主语言声明完全无效。<p>常见错误包括:</p>
<ul>
<li>
<code> —— <title></title> 和 <meta name="description"> 不继承该值,语义“失联”
<meta http-equiv="content-language" content="zh-CN"> —— HTML5 已弃用,现代浏览器忽略 或 —— 空值或非标准值,被当未知语言处理lang 值要符合 BCP 47 规范
中文推荐使用 zh-CN,它是事实标准,覆盖拼音、声调、词典匹配最全,所有主流辅助技术稳定支持。
其他常见写法对比:
-
zh-Hans:仅表示简体字,不绑定地域,部分旧引擎语音库缺失 -
zh:过于宽泛,iOS VoiceOver 可能 fallback 到英文 TTS 处理多音字 -
zh_china、zh-CN-ZH、Chinese:全部非法,会被静默忽略
大小写不敏感但惯例小写,统一用 zh-CN 避免模板拼写混乱。
完整根结构示例(含必要配套)
规范的 HTML5 根结构需同时满足三项基本要求:
- 首行声明
- 紧接
,且闭合标签为 -
内必须有<meta charset="UTF-8">,且位于<title></title>之前
正确写法如下:
欢迎访问
局部外语内容要单独标注 lang
主语言由 确立,嵌入的英文术语、代码块、引文等,必须显式加 lang 属性,否则屏幕阅读器仍按中文规则硬读。
- 单个术语:
<code lang="en">useState - 整段英文:
<p lang="en">This is a code example.</p> - 代码注释:
<pre class="brush:php;toolbar:false;" lang="en"># Initialize counter</pre>(不是lang="bash")
避免用 <div lang="en"> 包裹多个段落——会破坏语义层级,也干扰 CSS 的 <code>:lang(zh) 匹配范围。











