lang属性应设为BCP 47标准值,如zh-CN;必须放在标签上;局部多语言内容用内联lang标注;不设会导致屏幕阅读器发音错误、翻译失效、css引号不生效、拼写检查失效等问题。

lang 属性该设成什么值
页面语言必须用 lang 属性明确声明,值应遵循 BCP 47 标准,比如中文网页用 zh-CN(简体中文,中国大陆),而不是笼统写 zh 或 cn。浏览器、屏幕阅读器、搜索引擎都依赖这个值做语言相关判断——zh 虽合法,但缺乏区域信息,可能导致拼音排序、日期格式、字体回退不准确。
常见正确写法:
-
zh-CN:简体中文(中国大陆) -
zh-TW:繁体中文(中国台湾) -
en-US:美式英语 -
en-GB:英式英语 -
ja:日语(无地域后缀也可,因日语方言差异小)
lang 放在哪个标签上最有效
必须设在 标签上,这是唯一能全局生效的位置。设在 或某个
上只影响其后代元素,且对 seo 和辅助技术基本无效。
错误示例:
—— 这不会被搜索引擎当作整页语言识别。
立即学习“前端免费学习笔记(深入)”;
正确写法:
,并确保它出现在文档最开头(紧跟 后)。
多语言混合内容怎么处理
主页面语言不变,仅对局部语言不同的内容加 lang。例如英文引文、代码注释、外文人名等,用内联 lang 显式标注:
鲁迅说:“Hope is a thing with feathers。”
注意:lang 不会自动翻译文本,也不触发浏览器翻译弹窗;它的作用是告诉屏幕阅读器切换发音规则、告诉 CSS 选择器 :lang(en) 匹配样式、告诉 spellcheck 使用对应词典。
容易踩的坑:
- 嵌套时子元素未重置
lang,导致英文段落里的中文括号被按英文规则断行 - 用
xml:lang替代lang(Xhtml 遗留写法,在 html5 中无效) - 动态生成内容(如 vue/react 渲染)后忘记同步设置
lang属性
不设 lang 会出什么实际问题
表面看页面照常显示,但背后已有多个环节失效:
- 屏幕阅读器可能用错语音引擎(比如用粤语读简体中文)
- chrome 浏览器右键“翻译成中文”功能无法自动触发
- CSS 的
quotes属性(控制引号样式)默认不生效,需配合:lang(zh)手动定义 - 部分搜索引擎降低页面语言相关性评分,影响多语言站点收录
- 拼写检查(
spellcheck="true")直接失效或提示大量误报
最隐蔽的问题是:这些缺陷往往只在特定辅助工具或小众浏览器中暴露,开发阶段很难自查。一旦上线,残障用户或海外访问者最先感知到异常。