lang属性必须写在标签上,声明文档主语言;值须符合BCP 47规范(如zh-CN),不可用chinese等非法值;局部外语内容需在对应子元素显式标注lang;JS动态修改无效,语言切换应依赖服务端渲染或多版本静态页。

在 HTML5 中,根节点 `` 的语言属性不是“切换开关”,而是**声明当前文档的主语言**。它不支持运行时切换,也不能靠 JS 修改就让页面自动变语言——那是内容层或框架的事。正确配置的关键是:一次写对、位置准确、值规范。
lang 属性必须写在 标签上
这是整个页面语言识别的基础,所有辅助技术(如屏幕阅读器)、搜索引擎和浏览器渲染都依赖它:
- 必须放在 `` 之后、第一个标签就是 ``(中文简体)或 ``(美式英语)
- 不能遗漏闭合 ``,且该属性要覆盖全部内容
- 值必须符合 BCP 47 标准:用连字符分隔语言+地区,如 `zh-HK`(繁体中文-香港)、`pt-BR`(葡萄牙语-巴西),不能写 `chinese` 或 `english`
局部语言内容要用子元素覆盖
当页面中出现非主语言内容(比如英文引文、日文术语、法语书名),应在对应元素上单独加 `lang`:
为跨境电子商务生成多语言、SEO 优化的产品描述。支持英语、西班牙语、俄语和阿拉伯语,并针对不同搜索引擎(Google / Bing、Yandex、中东市场)进行专项 SEO 优化。适用于以下场景:用户需为国际市场创建符合 SEO 规范的产品文案、批量生成产品描述,或针对特定搜索引擎及区域用户偏好优化内容。
- 直接写在段落、标题、列表项等标签上,例如:
<p lang="en">The Web Standards Guide</p> - 避免在 `
`、`alt`、`placeholder` 等属性值里嵌套语言标签——HTML 不允许,也无效 - 不要给 `` 多次设 `lang`,也不要在 `` 上重复设——它只认根节点
别指望 JS 改 lang 就能“切换语言”
运行时执行 document.documentElement.lang = "ja" 只会改 DOM 属性,但:
立即学习“前端免费学习笔记(深入)”;
- 屏幕阅读器不会重读页面,用户感知不到变化
- 搜索引擎不会重新索引,SEO 无效果
- CSS 的
:lang(ja)选择器可能不刷新样式(各浏览器行为不一致) - 真正可行的语言切换只有两种:服务端输出不同 lang 的 HTML(如 `/en/about` 返回 ``),或静态站生成多份文件(`index-zh.html` / `index-en.html`)
配套设置不能少:编码与 HTTP 响应头
光有 `lang` 不够,中文等非 ASCII 内容还要确保底层编码一致:
- HTML 文件本身保存为 UTF-8 无 BOM(VS Code 保存时选 “UTF-8”,不要选 “UTF-8 with BOM”)
- 页面内必须有 ``,且放在 `` 最前面
- 检查浏览器开发者工具 → Network → HTML 请求的 Response Headers,确认 `Content-Type: text/html; charset=utf-8` 存在


















