Googlebot 和 Bingbot 仅识别 <head> 中首个 <meta name="description">,须紧接 <title> 后、1024 字节内,长度按 Unicode 计(≤160 字符),前 60 字需直击问题核心,且必须服务端生成、不可 JS 注入。

description 必须放在 里,且只能出现一次
Googlebot 和 Bingbot 只在 HTML 的 <head> 中读取 <meta name="description">,写在 <body> 里等于没写。重复写多个,浏览器和爬虫只认第一个,其余全丢弃。
常见错误包括:
- CMS 模板硬编码成全局值,所有页面输出同一段
- 用 JS 动态注入:
document.querySelector('head').appendChild(...)—— Googlebot 不执行 JS,这段直接失效 -
<title>前插了其他<meta>或注释,导致解析偏移或截断
最稳妥的位置是紧接在 <title> 后面,确保它出现在 <head> 前 1024 字节内(<meta charset="UTF-8"> 也得在这范围内)。
字符数不是“字数”,而是 str.length 计算的 Unicode 长度
Google 截断点是 155–160 个 Unicode 字符,中文、英文、空格、全角标点、emoji 全部各算 1 个。别信编辑器右下角的“字数统计”——它可能把全角空格当 2 字,或漏算 BOM。
立即学习“前端免费学习笔记(深入)”;
验证方法只有两个:
- 粘贴到浏览器控制台运行
"你的描述文本".length - 用在线工具如
metatag.io校验(注意选 UTF-8/Unicode 模式)
移动端 SERP 实际显示常压缩到 120 字左右,所以前 60 字必须直击问题核心:动词 + 对象 + 场景,比如 "修复 React Router v6 中 <code>useNavigate 在异步回调里报错的 3 种方法"。
搜索引擎不保证用你写的 description,匹配度比长度更重要
即使格式完全合规,Google 仍可能弃用它,改从 <h1> 或首段正文抽一段话。触发替换的典型条件有:
-
<h1>或首段正文里完全没出现content中的核心词(例如 description 写“JSON.parse 安全解析”,但页面正文连JSON.parse都没提) - 内容与当前 URL 实际主题偏差大(如商品页已下架,description 还写“限时抢购”)
- description 里混入电话、邮箱、促销文案、无关 emoji 或双引号
"—— 部分爬虫会整段跳过
真正起作用的不是关键词堆砌,而是“这页唯一能解决什么问题”。比如工具类页面,直接对应用户动作:"用 <code>contain-intrinsic-size 修复 Safari 15.4 中 height: auto 失效"。
SSR/SSG 和多语言站点必须服务端生成,不能靠 JS 或 lang 属性切换
Next.js、Nuxt 等框架必须通过 getStaticProps 或 getServerSideProps 注入 description 字段;CMS 后台要限制输入框最大长度为 160 字符,并前端实时计数 + 后端强制截断。
多语言站点尤其容易踩坑:
- 不能靠
lang="zh-CN"自动切换 description —— 每个hreflang对应的 HTML 文件必须各自含独立的</meta name="description"> - 不能用 JS 根据
document.documentElement.lang动态改 content —— Googlebot 不执行 JS,且初始 HTML 里没值 - 中英文混排时注意半角/全角空格不统一,会导致字符数误判(如
"React | Vue"中的竖线若为全角,多占 1 字)
最隐蔽的问题是:即使服务端输出了合规的 description,只要页面加载后 JS 动态替换了 <h1> 或首段文本,Google 仍可能弃用它——它的快照基于初始 HTML,不是运行时 DOM。



















