Google Replaced My Meta Description

Search results show a Google-generated snippet instead of your meta description.

You search Google for your article and the snippet under the title isn’t what you put in <meta name="description">. It’s a paragraph from your page body — sometimes a relevant one, sometimes random-feeling. People panic about this, but Google documents that they use your description about 70% of the time and synthesize the other 30% from your page body. The snippet also changes per query: someone searching “vsync fix” sees a different snippet than someone searching “DaVinci freezing.”

To push that 30% down to 10-15%, identify which trigger your description is hitting and remove it.

Common causes

Ordered by hit rate, highest first.

1. Description too generic

“Learn everything about X in this comprehensive guide” reads like it could be on any page. Google sees no specific value and decides it can extract a better sentence from the body — and does.

How to spot it: Read your description aloud. Ask “would this still make sense on a completely different article?” If yes, it’s too generic.

2. Description duplicated across many pages

A site-wide template that puts the same description on every page. Search Console → Indexing → Enhancements may flag it as “Duplicate meta descriptions.”

How to spot it:

site:yourdomain.com "first 30 chars of your description"

If 3+ pages of yours come back, you have site-wide duplication.

3. Description doesn’t contain the query that matched

Google picks snippets dynamically based on which passage best matches the search query. If someone searches “deploy Astro to Vercel” but your description says “this blog is about frontend,” Google grabs a body sentence containing “Astro” and “Vercel.”

How to spot it: Search Console → Performance → pick the URL → Queries tab. Compare actual SERP snippet to your meta. If the SERP version includes words from the query that aren’t in your meta, that’s why.

4. Description length is wrong

  • Too short (< 70 chars): Google adds body content to fill out the snippet.
  • Too long (> 160 chars): Truncated and Google often replaces rather than cuts mid-sentence.

Desktop SERP width is ~920px, ~155-160 English chars. Mobile ~20% less.

5. Description contradicts the body

You wrote “5 tools” but the body lists 8. You wrote “Best of 2024” but publishedAt: 2026-05-17. Google detects and substitutes.

How to spot it: Compare numbers and dates in your meta to the actual body. Mismatches are common after edits.

6. Description duplicates the title

If <title> and <meta name="description"> say roughly the same thing, Google considers the description redundant and replaces with a body excerpt.

How to spot it: Read title and description back-to-back. If you’d describe them as “the same sentence twice,” that’s the issue.

7. Description is keyword-stuffed

"AI tools, ChatGPT, Claude, productivity 2026, AI developer tools, best AI" — comma-separated keyword list. Google flags as low-quality and discards.

How to spot it: Comma count in description. > 4 commas with disconnected fragments = keyword stuffing.

Shortest path to fix

Step 1: Find which pages got rewritten

Search Console → Performance → Pages → sort by impressions. Top 20 URLs:

# Pull the meta description
curl -s "https://yourdomain.com/your-article" | grep -oP '<meta name="description" content="\K[^"]+'

Then site:yourdomain.com/your-article in Google and copy the SERP snippet. Diff. Mismatches are rewritten.

Step 2: Rewrite using the “unique + keyword + value” formula

[primary keyword] + [unique fact or number] + [user value or promise]
BadGood
”Learn about meta descriptions""6 reasons Google rewrites meta descriptions + the 3-step fix that lifted our CTR from 1.2% to 4.8%"
"AI tools for productivity""12 AI tools I actually paid for in 2026, ranked by hours saved per week”

Character budget:

  • English: 140-160 characters
  • CJK: 60-80 characters

Step 3: Make every description unique

For Astro/Next/Hugo, add a build-time check:

// scripts/check-descriptions.mjs
import fs from "node:fs";
import path from "node:path";
import matter from "gray-matter";

const seen = new Map();
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")) {
      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: ${p}`);
      else if (desc.length > 160) issues.push(`TOO LONG: ${p}`);
      else if (seen.has(desc)) issues.push(`DUPLICATE: ${p}`);
      else seen.set(desc, p);
    }
  }
}

walk("src/content/articles");
if (issues.length) { console.error(issues.join("\n")); process.exit(1); }

Wire it into prebuild.

Step 4: Match description to actual queries

If Search Console shows your page ranking for “X tutorial,” include “X” and “tutorial” in the description. Don’t write descriptions in isolation from the queries Google is sending you.

Step 5: Wait 7-14 days

Google doesn’t re-evaluate immediately. Use Search Console → URL Inspection → Request indexing on each edited URL.

Step 6: For multi-intent pages, accept Google’s choice

If your page genuinely serves 3 different queries, Google’s per-query snippets are usually correct. You can’t write one description that serves “how to deploy Astro” and “Astro vs Next.js comparison” and “Astro CMS examples” equally well. Accept the per-query snippets for these pages.

Prevention

  • Write per-page descriptions, never use a site-wide template.
  • Enforce uniqueness at build time with a script.
  • Put the primary keyword in the first 60 characters so it survives mobile truncation.
  • 14 days post-publish, audit pages with CTR < 1% and rewrite their descriptions.
  • Re-read every description: “Would this still make sense on a different article?” If yes, rewrite.

Tags: #Troubleshooting #SEO #Debug