Google按UTF-8字节数截断description,中文占2字节,需手动验证字节数;开头60字符须含动词+具体对象,禁用泛化表述,每页唯一且服务端强制截断至160字符。

155–160 字符是硬上限,超了就截断,不是“尽量别超”,而是“超 1 个字符也会丢后半句”。
为什么浏览器里数着没超,搜索结果却还是被截成“…”
你用 textContent.length 测中文字符串,得到的是 Unicode 码点数(比如一个汉字算 1),但 Google 的截断逻辑认的是字节数:UTF-8 编码下,中文、全角标点各占 2 字节,英文/空格/半角标点各占 1 字节。所以一段含 80 个汉字 + 标点的 description,实际可能已超 160 字节。
- 最可靠验证方式:把
content值粘贴进记事本 → 开启「显示所有字符」→ 删除换行符 → 手动逐字计数(中英文、空格、标点全算 1) - 别信 CMS 后台的“字数统计”或编辑器右下角数字——它们通常按 Unicode 码点算,和 SERP 不一致
- 移动端 SERP 实际常在 120 字符左右就截断,前 60 字必须直击问题核心,否则用户扫一眼就划走
怎么写才能卡准 155–160 字符且不被 Google 替换
Google 不是“用了你的 description 就完事”,它会比对搜索词、<h1>、正文前 150 字,选它认为“最相关的一段”。你写的 description 被跳过,往往是因为它不够强。
- 开头 60 字必须含动词 + 具体对象,例如:
content="修复 React Router v6 中 <code>useNavigate</code> 在异步回调里报错的 3 种方法" - 禁用泛化主语:“本网站”“欢迎访问”“专业提供”——这些词不传递任何有效信息,直接拉低信息密度
- 每页唯一,不能靠 CMS 模板变量拼接出“{{ title }} | {{ site.name }}”,首页、列表页、详情页的
content必须语义不同 - 避免全角空格、emoji、»★• 等符号,部分爬虫解析失败后整段弃用
服务端注入时容易漏掉的强制约束
Next.js、Nuxt、Hugo 等框架支持 SSR/SSG,但很多人只改了模板,忘了配套机制。
立即学习“前端免费学习笔记(深入)”;
- 前端编辑器必须实时显示剩余字符数,并在输入满 160 时禁用输入(不只是提示)
- 后端入库前必须强制截断:
content.substring(0, 160),不能依赖前端限制——否则 XSS 风险或乱码入库 - 多语言站点不能共用一个字段,
hreflang="zh-CN"页面必须输出独立的content,不能靠 JS 切换 - 纯 CSR(如 create-react-app)页面,初始 HTML 的
content不能为空或“加载中…”,否则 Googlebot 抓到的就是空值
真正卡住的点从来不是“怎么数字符”,而是“要不要为每一页手写一句精准、唯一、带动词的自然句”。自动填充、模板复用、JS 注入——这些省事的做法,恰恰是 description 失效的根源。



















