Google rewrites most meta descriptions — Ahrefs measured 62.78% across 192,000 pages, and the share climbs higher for long-tail queries. Write them anyway, but budget accordingly: a formula per template, not handcrafted prose per page. Your description survives mainly on head queries whose terms it contains; everywhere else it is raw material for Google's snippet generator, the fallback for social cards, and context that answer engines read during retrieval.

When your description survives

The rewrite decision is query-dependent, which is why "Google ignores descriptions" and "descriptions matter" are both half true. Yours tends to be kept when the query's terms appear in it, when the query is a head or navigational term matching the page title, and when the description actually summarises the page — Google's own snippet documentation says it prefers the meta description when it describes the page better than an extracted passage. Invert that: vague boilerplate gets replaced by your own body text, chosen by an algorithm optimising for the query, not for your click. For long-tail queries the replacement rate approaches always, because no static sentence can contain every query's terms.

The practical consequence: your first paragraph is your real meta description for most impressions. The answer-first opening rule pays twice — once as a featured-snippet candidate, once as the passage Google extracts when it discards your meta tag.

What AI snippets changed

For queries with an AI Overview, classic blue links start below a generated answer, and CTR on informational queries has dropped measurably since rollout. That changes the description's job rather than ending it. Three consumers remain: the shrinking-but-alive classic SERP, where a kept description still wins or loses the click; every social and chat platform that falls back to it for link previews when og:description is absent; and retrieval pipelines — answer engines ingest the description as part of the page's representation, one more place where chunk-quality writing gets you quoted. None of these consumers rewards cleverness; all reward a compressed, specific summary.

Formulas per page type

On a programmatic site descriptions are generated, so the craft moves into the formula. The ones running here:

Page typeFormulaExample output
ComparisonVerdict + deciding axis + data promise"Immich wins for phone backup, PhotoPrism for huge legacy libraries. Side-by-side specs, measured RAM use, and migration notes."
Alternatives listCount + qualifier + selection tease"12 self-hosted Notion alternatives compared on editor, sync, and export — one clear pick for teams, one for solo note-takers."
App profileWhat it is + requirement + differentiator"Jellyfin is a free media server for movies, TV, and music. Runs on 2GB RAM, no account required, with hardware transcoding on a $150 mini PC."
Blog postThe article's answer, compressedThe verdict sentence, trimmed to fit

Each formula states a payoff, contains at least one concrete number, and front-loads the primary phrase — the same rules as the pages themselves, which is not a coincidence. This mirrors how comparison pages lead with the verdict: the description is the verdict's trailer.

Mechanics: 140–160 characters, enforced by the build

Truncation is pixel-based (roughly 920px on desktop, less on mobile), so character counts are a proxy — but 155 characters is a safe proxy, and a range is enforceable where pixels aren't:

const desc = compareDescription(a, b, verdict);
if (desc.length < 140 || desc.length > 160) {
  throw new Error(`description out of range (${desc.length}): ${slug}`);
}

Composing from data fields and failing the build on violations is the entire quality system — no spinner, no synonym shuffling, no 40,000 hand-edits. Two rules the assertion can't catch: don't restate the title (the SERP shows both; a description repeating the title spends its 155 characters saying nothing new), and put the distinguishing fact in the first 80 characters, because mobile truncates hardest and the front is all anyone reliably sees.

One description serves more masters than Google. og:description for social and chat previews tolerates up to ~200 characters and benefits from a slightly warmer register; if you maintain only one string, write the 155-character version and let Open Graph inherit it — the reverse inheritance truncates badly. This site generates both from the same formula, with the OG variant allowed one extra clause, and that is the entire social-preview strategy: two template lines, no per-page work.

Descriptions are not a ranking factor

Settling the perennial question: meta descriptions do not affect rankings, and Google has said so plainly for years. They affect CTR when shown, which affects the traffic a ranking yields. That framing sets the correct effort level — never worth keyword-stuffing (rankings ignore it), always worth one good formula per template (clicks don't). Where Search Console shows a page with strong impressions, decent position, and weak CTR, the snippet is the suspect — that diagnostic loop lives in long-tail keyword research.

What I'd do

Write one formula per template, composed from real data fields, with length asserted in CI. Hand-write descriptions only for the homepage, category hubs, and the top 50 organic landers — the pages where head queries make survival likely enough to reward craft. Keep first paragraphs snippet-grade everywhere, since they're what Google shows when it overrules you. Then stop thinking about descriptions; past this setup, marginal effort on them returns approximately nothing.