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

lang 属性必须写在 <html> 标签上才被搜索引擎识别
搜索引擎(Google、Bing)只读取 <html lang="zh-CN"> 这个位置的值作为整页语言依据。写在 <body>、<div> 或用 JS 动态设置,对 SEO 完全无效——它们根本不会扫描这些节点。
常见错误现象:
-
<body lang="zh-CN">→ 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 lang="en"># Initialize counter</pre>(不是lang="bash") - 避免
<div lang="en">包裹多个段落——<div>无语义,Google 不视其为语言单元
动态页面(Next.js/Nuxt/SSR)怎么确保 lang 被搜索引擎抓到
关键点:搜索引擎只抓首屏 HTML 响应体,JS 后期修改毫无意义。必须让真实语言值在服务端就注入到 <html> 标签中。
具体做法:
- Next.js:在
app/layout.tsx中用<html lang={locale}>,locale来自路由参数或 i18n 配置 - Nuxt:用
useLocaleHead(),确保生成的 HTML 字符串里<html lang="ja-JP">已存在 - PHP/Node 模板:直接拼接
<html lang="= htmlspecialchars($lang, ENT_QUOTES) ?>">,防 XSS - 纯 CSR(React/Vue)站点:若需多语言 SEO,必须走静态生成(SSG)或 SSR,产出不同
lang的 HTML 文件
最容易被忽略的一点:hreflang 标签和 lang 属性没有自动同步关系,两者必须独立维护且保持一致,否则 Google 可能认为页面语言声明冲突。



















