打开 Google 搜你的文章,标题下面那段描述根本不是 <meta name="description"> 里写的——这不是 bug,是 Google 的默认行为。Google 官方的 snippet 文档说得很清楚:只有当它认为你写的描述比从正文抽取的内容更准确时,才会用你的;否则它自己生成一段。截至 2026 年 6 月,业界多项统计显示改写率大约在 60-80% 之间。
**最快的修复:**把描述改成同时满足三点——(1) 只适用于这一个页面、(2) 含用户实际搜索的那个关键词、(3) 长度落在约 140-155 英文字符(中文约 60-80 字)。光这三点就能找回大部分被改写的 snippet。本文剩下的部分讲怎么找出需要改的页面,以及每个页面被改写的具体原因。
常见原因
按命中率从高到低排列。
1. 描述太泛、没有”独有信息”
最典型的失败描述:
"了解 AI 工具如何提升你的工作效率,本文为你详细介绍。"
"This article introduces the best AI tools for productivity."
这种话适合任何一篇文章,Google 一眼判断”抽正文一句话比这强”,于是改写。
**如何判断:**把你自己的描述读出来,问”换到完全不同的另一篇文章上还能用吗?“——能用就是太泛。
2. 全站描述高度重复
很多模板默认所有页面共享一条描述(比如首页 description),或者用同一段 prefix 拼接到每个页面前面。注意:Google 多年前就下线了旧的 HTML Improvements 报告,所以截至 2026 年 6 月,Search Console 不会再帮你标记”重复 meta 描述”——Google 公开表示过重复描述不会”弄坏”网站。这一项得你自己查。
**如何判断:**在 Google 里执行下面这条并数返回条数:
site:yourdomain.com "你的描述前 30 字"
如果有 3 条以上你站内页返回的是同一段文字,就是全站重复。
3. 描述没回答用户的 query
Google 是按”哪一段最匹配这次搜索词”动态选 snippet 的。如果用户搜的是”Astro 部署 Vercel”,但你的 description 写的是”本博客分享前端经验”,它会从你正文里抽一段含”Astro”和”Vercel”的句子顶上去。一条描述要服务成百上千个不同查询,所以你的描述越是缺少核心关键词,被替换得越频繁。
**如何判断:**在 Search Console 打开 Performance(效果)→ Search results(搜索结果),点开某个 URL,再切到 Queries(查询) 标签。把展示出来的实际 snippet 和你的 meta description 对照——如果 snippet 含某个高频 query 的词、而你的描述里没有,原因就在这。
4. 描述长度不合适
- 太短(约 70 字符以下):Google 觉得信息量不够,会从正文补段落。
- 太长(约 160 字符以上):被截断,且 Google 往往判”反正要截,不如我自己重写”。
Google 是按像素宽度而非字符数截断。截至 2026 年 6 月,桌面端 snippet 宽度约 920px(约 155-160 英文字符),移动端约 680px(约 120 字符)。把最重要的词放在前约 120 字符内,移动端截断后才看得见。Google 会截到最近的完整词并加省略号。
5. 描述里的数字 / 日期与正文不一致
写”5 个工具”但正文列了 8 个;写”2024 最新”但 publishedAt: 2026-05-17——Google 检测到不一致,就换成正文里真正匹配的一段。
**如何判断:**搜 site:yourdomain.com 看 Google 给的 snippet,对比 description 里的数字 / 年份是否被换掉。
6. 描述里全是关键词堆砌
"AI tools, ChatGPT, Claude, productivity, best AI 2026, AI for developers"——这读起来是一串关键词而不是句子。Google 文档明确反对这种写法,会弃用它、改用正文里一句真正的句子。
诊断:你属于哪一种?
| 实际 snippet 的表现 | 可能原因 | 看哪节 |
|---|---|---|
| snippet 是从你正文里抽出来的一句话 | 描述太泛,或不匹配 query | 原因 1、3 |
| 你好几个页面显示同一段 snippet | 全站重复 | 原因 2 |
| snippet 以”…”结尾,或比你写的短很多 | 长度不对 | 原因 4 |
| snippet 里的数字 / 日期和你的 meta 不一样 | 正文与描述矛盾 | 原因 5 |
| snippet 是干净的正文句、你的 meta 却是逗号串 | 关键词堆砌 | 原因 6 |
最短修复路径
按收益从高到低,先做前 3 步通常就能解决 80% 的问题。
Step 1:找出哪些页面被改写了
在 Search Console → Performance(效果)→ Search results → Pages(页面) 标签,把展示量从高到低排序。挑前 20 个 URL,逐一执行:
site:yourdomain.com/your-article-slug
把 SERP 显示的实际描述复制下来,和源码里的 <meta name="description"> 对比。不一样的就标记为”被改写”。
也可以一次性批量检查——直接抓自己的页面、提取 meta:
# 用 curl 抓自己的页面,打印它实际输出的 meta description
curl -s "https://yourdomain.com/your-article" | grep -oE '<meta name="description" content="[^"]+"'
然后再 Google site: 查一下对应 SERP 的实际描述。
Step 2:按”独有 + 含关键词 + 价值”公式重写
为每个被改写的页面写新描述时,按这个模板:
[主关键词] + [独有信息或数字] + [对用户的价值或承诺]
例子(差→好):
| 差 | 好 |
|---|---|
| ”Google 改写描述怎么办?本文为你详细介绍" | "Google 改写 meta description 的 6 种原因,加上把 CTR 从 1.2% 提到 4.8% 的 3 步修复" |
| "AI tools for productivity" | "12 AI tools I actually paid for in 2026, ranked by hours saved per week” |
字符预算(截至 2026 年 6 月):
- 英文:140-155 字符(920px 桌面截断点约 158)
- 中文 / CJK:60-80 字(含标点)
- 主关键词放前约 120 字符内,移动端才不会被截掉
Step 3:用 build 脚本强制”每页一条独有描述”
如果你用 Astro / Next / Hugo,在 build 阶段加一层校验,把重复和长度问题在 CI 里拦下,别让它们上线:
// scripts/check-descriptions.mjs
import fs from "node:fs";
import path from "node:path";
import matter from "gray-matter";
const seen = new Map();
const root = "src/content/articles";
const issues = [];
function walk(dir) {
for (const name of fs.readdirSync(dir)) {
const p = path.join(dir, name);
if (fs.statSync(p).isDirectory()) walk(p);
else if (p.endsWith(".mdx") || p.endsWith(".md")) {
const { data } = matter(fs.readFileSync(p, "utf8"));
const desc = (data.description || "").trim();
if (!desc) issues.push(`MISSING: ${p}`);
else if (desc.length < 50) issues.push(`TOO SHORT (${desc.length}): ${p}`);
else if (desc.length > 160) issues.push(`TOO LONG (${desc.length}): ${p}`);
else if (seen.has(desc)) issues.push(`DUPLICATE: ${p} == ${seen.get(desc)}`);
else seen.set(desc, p);
}
}
}
walk(root);
if (issues.length) {
console.error(issues.join("\n"));
process.exit(1);
}
放进 prebuild 钩子,所有缺失 / 重复 / 超长的描述都会让 build 失败。
Step 4:请求重新抓取,然后等
Google 不会立刻重新评估。改完后:
- 在 Search Console 顶部的 URL Inspection(网址检查) 栏粘贴该 URL,点 Request indexing(请求编入索引)。注意截至 2026 年 6 月,单个资源每天大约只能提交 10-12 个 URL,所以先提交最重要的页面。
- 约 7 天后再
site:检查 snippet 是否变了。 - 约 14 天后,在 Performance → Search results 里筛到该 URL,看 CTR(点击率)有没有上升。
Step 5:还是被改写?让 Google 直接用正文
如果某些页面(比如长篇指南)你写不出比正文更好的总结,可以反过来:让正文第一段本身就是最佳描述,Google 通常会挑这句干净的开头。你也可以显式限制 snippet 长度:
<meta name="robots" content="max-snippet:160">
max-snippet:0 会强制完全不显示描述——别这么做,会丢 CTR。如果想让某段文字(比如固定的免责声明)不进入任何自动生成的 snippet,用 data-nosnippet 包起来:
<span data-nosnippet>Affiliate disclosure: ...</span>
如何确认修好了
改完并重新编入索引后约 7-14 天,重新搜 site:yourdomain.com/your-slug,如果显示的是你写的那句描述(或非常接近的版本)、而不是从正文抓的句子,就说明改写问题解决了。如果两周后、且已重新抓取,仍然显示正文文字,说明描述还是”输给”了正文——回到 Step 2,把它改得更贴近核心 query。提示:用无痕窗口搜,避免个性化 / 缓存结果干扰。
预防建议
- 描述按页面生成,绝不要用全站模板;写完用上面的 build 脚本拦截重复。
- 写完读一遍:“这句换到另一篇文章上还能用吗?“能用就要重写。
- 主关键词放前约 120 字符内,移动端截断后还能看见。
- 上线 14 天后,把 Search Console Performance 按展示量排序,筛出排名第 1-10 位、CTR 却低于约 1-3% 的页面,优先重写它们的描述。
常见问题
描述被改写会影响排名吗? 不会。meta description 不是排名因素,被改写也不会受罚。它只影响 snippet 文字,进而影响点击率。修它是为了 CTR,不是为了排名。
能强制 Google 永远用我的描述吗?
不能。没有任何标签能保证这一点。你只能把描述写成更优选项(独有、具体、长度合适),并用 max-snippet 限制长度。Google 仍会按每次查询自行选择。
为什么同一个页面在不同搜索下显示不同的 snippet? 因为 Google 会为每个查询单独拼 snippet。同一页面可能在一次搜索里用你的 meta description、在另一次里用从正文抽的段落。这是正常的——写一条覆盖核心关键词的描述,同时把正文写好,让被抽出的句子也够用。
Search Console 还会报告重复的 meta description 吗?
不会了。过去那个列出重复、过短 / 过长描述的 HTML Improvements 报告已经下线。截至 2026 年 6 月,你得用 site: 搜索或 build 脚本自己检测重复。
新描述多久才会显示出来?
请求编入索引后通常 3-14 天。抓取频率低的页面可能更久。重新跑 site: 是不等 Search Console 报告延迟、最快的验证方式。