lang 属性必须写在 标签上且仅一次,写在 或其他子元素无效;zh-cn 最常用且兼容性最佳,zh-hans 强调简体字但不绑定地域,zh 过于宽泛;错误值会导致读屏、翻译、css 和 seo 失效。

lang 属性该写在哪个标签上
必须写在 标签上,且只写一次。写在 或其他子元素上无效,浏览器不会据此处理页面整体语言逻辑。
常见错误是把 lang 加在 <div> 或 <code><p></p> 上想“局部声明”,这只能覆盖该元素及其后代(需配合语义合理使用),但文档主语言只能靠 确立。
- 正确:
- 错误:
(不被解析为文档语言) - 例外场景:多语言混排时,可在子元素补
lang,如<span lang="en">API</span>
zh-CN、zh-Hans、zh 有什么区别
三者都表示中文,但语义层级和兼容性不同,选错可能影响屏幕阅读器断词、字体回退或 SEO 识别。
-
zh-CN:最常用,明确“简体中文 + 中国大陆规范”,浏览器、读屏软件支持最稳 -
zh-Hans:强调“简体字”(Han Simplified),不绑定地域,适合港澳台用户也用简体的场景 -
zh:太宽泛,仅表示“中文”,不区分简繁、地域,部分旧工具可能忽略或误判
除非有明确国际化策略,否则直接用 zh-CN 最省心。别为了“看起来更标准”换成 zh-Hans——多数 CMS、翻译插件、SEO 工具认的是 zh-CN。
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
lang 值写错会出什么问题
表面看页面照常显示,但背后几个关键链路会悄悄失效:
- 屏幕阅读器可能按英文规则朗读中文,比如把“iOS”读成 /aɪ.ɒs/ 而不是 /ai-oh-es/
- 浏览器自动翻译按钮可能不出现,或点开后识别成日语、韩语
- 某些 CSS 伪类(如
:lang(zh))匹配失败,导致字体切换、引号样式异常 - 搜索引擎可能降权,尤其多语言站点中
hreflang和lang不一致时
典型错误值:zh-ch(拼错)、Chinese(非 BCP 47 标准)、zh_CN(下划线应为短横线)——这些都会被当无效值忽略。
动态生成 HTML 时怎么安全设 lang
服务端渲染或模板引擎里硬编码 lang 很容易漏掉多语言切换逻辑,结果所有页面都是 zh-CN,哪怕用户切到了英文。
- Next.js / Nuxt:从路由或上下文取语言标识,注入到
的lang属性 - PHP 模板:用
,防 XSS - 纯前端切换:不能只改
document.body.lang,必须改document.documentElement.lang
最容易被忽略的一点:HTML 文档已加载后,再通过 JS 改 lang,对已激活的屏幕阅读器无效——它只读取初始值。所以语言切换最好走整页刷新,或至少强制重载 ARIA 相关状态。










