Skip to content

Meta Descriptions

A meta description is a short summary in a page's head that search engines may show beneath the title in results. It is not a ranking factor, it affects whether someone clicks rather than whether you appear, and Google frequently replaces it with text from the page.

What we measured

We ran a meta description audit across our own site. 212 pages carry one, the 5 without are all noindex, and zero descriptions are duplicated across indexable pages. Nine indexable descriptions run over 160 characters. One of those nine is the blog post published this morning, at 178 characters, written by the same process that produced this lesson. We are not shortening it, and the reason is the lesson.

Why it matters

  • It is the sales line under your title. It does not decide whether you rank, it decides whether the person who already found you bothers to click.
  • A duplicate description across many pages usually means a template is writing them, which means nobody is writing them.
  • Google rewrites descriptions often, particularly when the query matches page text better than your summary does. A rewrite is information, not a failure.
  • It is the single most over-policed field in SEO auditing, which is why it is worth knowing exactly what it does not do.

The failure

The failure: one description for the whole site
// src/app/layout.tsx
export const metadata = {
  description:
    "Web design and SEO services. Contact us today!",
};

// No page overrides it, so all 217 pages
// ship the same sentence.

A layout-level description with nothing overriding it. Every result in a search listing then reads identically, which tells a searcher nothing about which page to open. It also wastes the one piece of copy you fully control.

The fix

The fix: write it per page, from the page
export async function generateMetadata({ params }) {
  const { slug } = await params;
  const page = getLearnPage(slug);
  return {
    description: page.description,
  };
}

Sourced from the page's own record rather than a shared default. That is why our audit found zero duplicates across indexable pages without anyone checking for them.

Verify the fix

Changing the code is not the same as fixing the problem. Confirm it.

  1. Run the script against your rendered output. A missing description on a noindex page is not a finding, so the script stays quiet about those.
  2. For any duplicate, look for the shared template before editing pages. One default is usually writing all of them.
  3. Read the description against the page it describes. Accurate beats keyword-rich, because an inaccurate one costs you the click after you earned it.
  4. Check what Google actually shows, using a site: query or Search Console. If it is consistently rewriting yours, the page answers the query better than your summary does, and the summary is what should change.
  5. Do not chase length. If you want to know whether a description truncates, look at the live result, not a character count.
Run this against your own rendered pages
import re, glob, collections

descriptions = collections.defaultdict(list)

for f in sorted(glob.glob("out/**/*.html", recursive=True)):
    html = open(f, encoding="utf-8", errors="ignore").read()
    if "<html" not in html:
        continue
    path = "/" + f[len("out/"):].replace(".html", "")
    noindex = 'content="noindex' in html
    found = re.findall(r'<meta name="description" content="(.*?)"', html, re.S)

    if not found:
        if not noindex:
            print("NO DESCRIPTION", path)
        continue

    text = found[0].replace("&amp;", "&").strip()
    descriptions[text].append((path, noindex))

for text, pages in descriptions.items():
    indexable = [p for p, ni in pages if not ni]
    if len(indexable) > 1:
        print("DUPLICATE across", len(indexable), "pages:", text[:60])
        for p in indexable:
            print("   ", p)

It deliberately does not report length. Length is the finding every tool leads with and the one that matters least, so including it would train you to act on noise. Missing and duplicated are the findings worth your time.

Exceptions and misconceptions

Meta descriptions are not a ranking factor

Google has said this plainly and repeatedly. A description does not move you up or down. It affects click-through on a result you already earned. Any advice treating it as a ranking lever is wrong, and any tool scoring it as one is measuring the wrong thing.

Over 160 characters is not a defect

Search results truncate by pixel width, and Google rewrites descriptions regardless. Nine of our indexable descriptions run over 160 characters and we are leaving all nine alone, including one at 178 written this morning. A complete sentence that gets clipped reads better than an incomplete one that fits.

A noindex page does not need one

Five of our pages have no description and all five are noindex. Nothing will ever display them. Counting those as missing is the same false alarm as counting a noindex page's missing canonical.

Do not write one for a page you want deindexed

If a page should not be in search results, the fix is the robots directive, not better summary copy.

Watch it

Primary sources

The measurement above comes from our study, State of Small Business Websites 2026.

Related lessons

Check your own site for this

DeepAudit AI renders your page in a real browser and reports the affected code, so you can see exactly where each finding came from. Free, no signup.

Run a free audit

Last reviewed 2026-09-17. Checks covered: Meta Description.