必须设且设对lang属性——它影响屏幕阅读器朗读、浏览器翻译、seo及css :lang() 伪类;应唯一写在标签上,用bcp 47格式如zh-hans-cn,禁用chinese等非法值,错误会导致无障碍失效与功能异常。

必须设,而且得设对——lang 属性不是可有可无的装饰,它直接影响屏幕阅读器朗读、浏览器自动翻译、搜索引擎语义识别,甚至部分 CSS 伪类(比如 :lang())的行为。
lang 属性该写在哪个标签上
只写在 标签上,且仅此一处。其他地方(比如 或某个 <div>)加 <code>lang 是无效覆盖,反而可能干扰辅助技术。
常见错误现象: 写成 却没配 <meta charset="UTF-8">,导致部分旧版 IE 解析失败;或漏掉 根标签,只在子元素里乱加。
- 主语言用
(简体中文中国大陆)或(美式英语),优先选带区域码的 BCP 47 格式 - 页面含多语言片段时,才在局部元素上用
lang覆盖,例如:<p lang="ja">こんにちは</p> - 不要写
lang="chinese"或lang="cn"—— 浏览器不认,屏幕阅读器直接忽略
lang 值写错会出什么问题
写错 lang 不会报错,但后果隐蔽:Google 可能误判页面目标地区,NVDA/JAWS 朗读时用错语音引擎,Chrome 自动翻译按钮灰掉,:lang(zh) { quotes: "「" "」" "『" "』"; } 样式完全不生效。
使用场景:做外贸站、多语言文档、政府/教育类无障碍要求高的项目时,lang 错误 = 直接不合规。
-
lang="zh"和lang="zh-Hans"都合法,但前者太宽泛,部分翻译工具无法精准匹配简体字形 -
lang="zh-CN"在 Safari 中对某些 CSS:lang()匹配不稳定,推荐用zh-Hans-CN - 静态站点生成器(如 Hugo、Jekyll)常从配置文件注入
lang,要检查模板里是否硬编码了错误值
怎么验证 lang 属性有没有生效
别靠肉眼检查源码,要用真实环境验证。最简单的是打开 Chrome,右键 → “检查” → 切到 Elements 面板,确认 开头确实有 lang="xxx";再进一步,用屏幕阅读器(如 NVDA + Firefox)听一遍首段文字,看发音是否符合预期语言。
性能 / 兼容性影响:零成本。不增加任何资源加载,所有现代浏览器和辅助技术都支持,IE9+ 也完全兼容。
- 命令行快速检测:
curl -s URL | grep ",看输出是否含正确 <code>lang - 自动化测试可用 Axe 或 Lighthouse 检查“
html has valid lang attribute”这一项 - 如果用了 Web Components 或 Shadow DOM,
lang不会自动继承,需手动透传
真正容易被忽略的是:动态渲染的页面(比如 React/Vue SSR 后 hydrate 的内容),lang 必须在服务端首次吐出的 HTML 中就写对,客户端 JS 补写无效——因为辅助技术只读初始 HTML。











