lang属性必须写在标签上,搜索引擎仅识别此位置的值作为整页语言依据;、或js设置均无效,中文推荐使用符合bcp 47规范的zh-cn。

lang 属性必须写在 标签上才被搜索引擎识别
搜索引擎(Google、Bing)只读取 这个位置的值作为整页语言依据。写在 、<div> 或用 JS 动态设置,对 SEO 完全无效——它们根本不会扫描这些节点。<p>常见错误现象:</p>
<ul>
<li>
<code> → Search Console 仍报“未指定语言”
<meta http-equiv="Content-Language" content="zh-CN"> → HTML5 已废弃,Google 直接忽略document.documentElement.lang = "en-US" → 首屏 HTML 里是 lang="zh-CN",爬虫只抓这个中文该用 zh-CN 还是 zh-Hans 或 zh
Google Search Console 明确推荐使用 zh-CN:它绑定简体字 + 中国大陆规范,能正确触发拼音索引、繁简自动匹配、区域化搜索结果排序。
其他选项的问题:
-
zh:太宽泛,不区分简繁,Search Console 可能标记为“语言未声明”或降级处理 -
zh-Hans:只声明字形,未指明地域,部分旧版 Googlebot 对语音模型和断词支持不稳定 -
zh_china、zh_CN、Chinese:全部非法,BCP 47 不认,静默失效
多语言页面中局部内容要不要加 lang
局部外文内容(如英文引文、日文术语、代码注释)**必须显式标注 lang**,否则搜索引擎可能误判语义边界,影响片段抽取和关键词权重分配。
实操建议:
- 整段英文:
<p lang="en">This is a technical term.</p> - 法文书名:
<q lang="fr">Le Petit Prince</q> - 代码块里的英文注释:
<pre class="brush:php;toolbar:false;" lang="en"># Initialize counter</pre>(不是lang="bash") - 避免
<div lang="en"> 包裹多个段落——<code><div> 无语义,Google 不视其为语言单元<h3>动态页面(Next.js/Nuxt/SSR)怎么确保 <code>lang被搜索引擎抓到关键点:搜索引擎只抓首屏 HTML 响应体,JS 后期修改毫无意义。必须让真实语言值在服务端就注入到
标签中。具体做法:
- Next.js:在
app/layout.tsx中用,locale来自路由参数或 i18n 配置 - Nuxt:用
useLocaleHead(),确保生成的 HTML 字符串里已存在 - PHP/Node 模板:直接拼接
,防 XSS - 纯 CSR(React/Vue)站点:若需多语言 SEO,必须走静态生成(SSG)或 SSR,产出不同
lang的 HTML 文件
最容易被忽略的一点:hreflang 标签和
lang属性没有自动同步关系,两者必须独立维护且保持一致,否则 Google 可能认为页面语言声明冲突。 - Next.js:在











