lang属性不参与排名但影响索引准确性,必须在<html>标签用BCP 47规范(如zh-CN)声明,SSR/SPA需服务端或JS正确设置,局部内容须显式标注,且与hreflang、meta等语言信号严格一致。

lang 属性本身不参与排名计算,但写错或缺失会让搜索引擎“不信你”——中文页没设 lang 或设成 lang="en" 却放满中文内容,Google 很可能按英文索引,导致中文搜索完全不出现在前 100 名。
必须在 <html> 标签上设置 lang
浏览器和搜索引擎只认 <html lang="zh-CN"> 这个根声明。改 <body lang>、<div lang> 或 JS 动态改 document.body.lang 都无效。
- 后果包括:Chrome 自动翻译按钮不出现、VoiceOver 把“北京”读成 “Bei Jing”、中英混排引号间距错乱
- SSR 页面应在服务端根据
Accept-Language头输出对应值,别等 JS 加载再补 - SPA 切换语言时,必须执行
document.documentElement.lang = "zh-CN",不是body,也不是只更新状态变量 - 静态多语言站每个版本单独一份 HTML,在
<html>上硬编码,避免 JS 注入延迟导致闪动
lang 值必须严格符合 BCP 47 规范
写成 zh_cn、Chinese、ZH-CN、zh-CN (末尾空格)都会被忽略——等于没写。
- 只接受小写字母 + 连字符 + 地区码(可选),例如:
zh-CN、en-GB、ja-JP - 后端返回
zh_ch之类非标格式时,前端必须做标准化转换再赋值,不能直传 -
lang="zh"虽合法,但不够精准:iOS VoiceOver 某些版本会降级为英语发音;zh-Hans在部分旧 TTS 引擎中识别率低;zh-TW在:lang()CSS 匹配中不准 - 简体中文优先用
zh-CN,它兼容性最稳,且与主流hreflang配置一致
局部多语言内容必须显式声明 lang
搜索引擎不继承、不推断语言上下文。主页是 lang="en",但产品描述大段中文却不加 <p lang="zh-CN">,Google 可能判定“语言混杂、质量存疑”,尤其打压长尾词权重。
立即学习“前端免费学习笔记(深入)”;
- 引用英文文献:
<blockquote lang="en"></blockquote> - 代码块中嵌日文注释:
<pre><code lang="ja">// サンプルコード</code></pre> - 技术文档夹英文术语:
<code lang="en">useState</code>,可触发 IDE 插件英文高亮 -
<meta name="description">和<title>的语言必须与<html lang>严格一致,否则 Google 可能误判页面主语言
lang 错误直接导致 hreflang 静默失效
lang 和 hreflang 是两条独立信号链,但 Google 要求它们语言代码完全一致:一个写 zh-cn,另一个写 zh-CN,就判定为矛盾,整组 hreflang 被静默丢弃。
- 验证方式:用 Google Search Console 的「URL 检查」工具抓取页面,看「国际化」标签页是否列出有效对应关系
- 错误操作:在英文页里写
<html lang="en">,却把hreflang="zh-CN"指向自己——等于告诉 Google “我是英文页,也是中文页” - 正确做法:每个语言版本页面只声明自己的
lang,并在<head>中列出所有其他语言版本的hreflang链接,且每个值必须与对应页面的根lang完全一致
真正难的不是写对一行 lang="zh-CN",而是让整个 DOM 树里每段文本——从 SSR 渲染的首屏、到 React/Vue 动态生成的卡片、再到用户粘贴进富文本编辑器的外文引用——都带着准确、可验证、可同步更新的 lang 值。



















