# Meta description length: what Google shows, when it rewrites, and how to write them by template

> Google sets no meta description length limit and often writes its own snippet. What it documents, a length budget, and template code for Next.js and WordPress.

Source: https://seofix.ai/blog/meta-description-length  
Published: 2026-11-08  
Updated: 2026-11-02  
Author: SEOFix Team  
Category: Technical SEO  
Tags: Technical SEO, Guides  
Length: 1,659 words, 8 min read

There is no meta description length limit in Google. Its documentation says: "There's no limit on how long a meta description can be, but the snippet is truncated in Google Search results as needed, typically to fit the device width" ([Google Search Central, snippets](https://developers.google.com/search/docs/appearance/snippet)). The practical answer is to put the useful part first, keep the whole thing to a budget of about 150 characters, and accept that Google often shows text from your page instead of your description. On a large site, the bigger problem is rarely length. It's thousands of pages sharing one description, and that gets fixed in the template.

## What Google documents about meta description length

Everything Google publishes on this fits in a few sentences on its snippets page:

- Snippets "are primarily created from the page content itself." Google "sometimes uses the meta description HTML element if it might give users a more accurate description of the page than content taken directly from the page" ([snippets](https://developers.google.com/search/docs/appearance/snippet)).
- Snippets are built per query: "Google Search might show different snippets for different searches."
- No length limit. Truncation follows the device width, which means pixels, not a character count.

So the 155 or 160 character numbers you see in audit tools are proxies for a screen width, not rules. SEOFix uses one too: `META_DESCRIPTION_TOO_LONG` fires above 160 characters and `META_DESCRIPTION_TOO_SHORT` below 50, both as notices ([On-page checks](https://seofix.ai/help/checks-on-page)). A 190-character description isn't an error. Its last sentence just won't be seen when Google uses it.

Google doesn't publish how often it replaces descriptions. The closest it gets is an answer in the September 2023 SEO office hours: "not always, but usually our algorithms will use your meta description when there's not much content on the page, or when the meta description is more relevant to a user's query than the actual content of the page" ([office hours transcript, September 2023](https://developers.google.com/search/help/office-hours/2023/september)). Another answer, in January 2023, said the same thing: "it's not guaranteed that Google will use a particular meta description that you write," and Google is "more likely to use the description that you write, if it more accurately describes the page than what Google can pull from the page itself" ([January 2023](https://developers.google.com/search/help/office-hours/2023/january)).

That gives you the two levers that matter more than length: accuracy and specificity.

## A practical length budget

Since the cut happens by width, write to a budget rather than a limit:

1. **Put the deciding facts in the first 120 to 150 characters.** Price, location, date, count, author: whatever makes someone pick this result over the next one.
2. **Let the rest be expendable.** A trailing sentence like "Updated daily" or "Free returns" can be cut without losing the point.
3. **Don't pad short pages.** A 70-character description that says something specific beats a 155-character one that repeats the title.
4. **Don't end on "..." yourself.** Cut at a word boundary. Three dots spend three characters and tell the searcher nothing.

Google's own before-and-after examples show what "specific" looks like. The "bad" product description is `Mechanical pencil`. The "better" one names the lead grade, the colours and the shipping threshold ([snippets](https://developers.google.com/search/docs/appearance/snippet)). For a book, Google suggests a structured line: `Written by A.N. Author, Illustrated by V. Gogh, Price: $17.99, Length: 784 pages`. That format suits product and listing templates well.

## Write meta descriptions by template, not by hand

Google explicitly endorses generating descriptions on large sites: "For larger database-driven sites, like product aggregators, hand-written descriptions can be impossible. In the latter case, however, programmatic generation of the descriptions can be appropriate and are encouraged. Good descriptions are human-readable and diverse. Page-specific data is a good candidate for programmatic generation" ([snippets](https://developers.google.com/search/docs/appearance/snippet)). Asked about a 10,000-page site in the November 2022 office hours, Google added the condition: "The descriptions should still be unique, specific, and relevant to each page. Don't use the same meta descriptions over and over again" ([office hours, November 2022](https://developers.google.com/search/help/office-hours/2022/november)).

A good template description has three parts:

```
{what this page is, with its distinguishing data}. {one or two facts a searcher compares on}. {optional extra}
```

For a job page:

```
Senior Accountant at Emaar in Dubai, AED 25,000–30,000 a month. Full-time, posted 3 Nov. IFRS and Big Four experience required.
```

For a category page:

```
142 used Toyota Land Cruisers for sale in Dubai from AED 89,000. Filter by year, mileage and dealer. Listings updated daily.
```

Rules that keep the output human-readable:

- **Skip empty fields.** "at  in Dubai" happens when a field is missing. Build the sentence only from fields that exist.
- **Strip HTML and collapse whitespace** before using body text as a fallback.
- **Avoid keyword lists.** Google says descriptions "comprised of long strings of keywords" are "less likely to be displayed as a snippet" ([snippets](https://developers.google.com/search/docs/appearance/snippet)).
- **Paginated pages can share one.** Google's pagination guide says pages in a sequence "don't need to follow" the distinct-title recommendation: "You can use the same titles and descriptions for all pages in the sequence" ([pagination](https://developers.google.com/search/docs/specialty/ecommerce/pagination-and-incremental-page-loading)).

## Next.js: generateMetadata and the layout trap

A shared helper that builds the sentence from the fields you have and cuts at a word boundary:

```typescript
// lib/seo/describe.ts
const BUDGET = 155;

export function describe(parts: (string | null | undefined)[], max = BUDGET): string {
  const text = parts
    .map((p) => (p ?? "").replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim())
    .filter(Boolean)
    .join(" ");
  if (text.length <= max) return text;
  const cut = text.slice(0, max + 1);
  const space = cut.lastIndexOf(" ");
  return (space > max * 0.6 ? cut.slice(0, space) : text.slice(0, max)).replace(/[\s,.;:–-]+$/, "") + ".";
}
```

```typescript
// app/jobs/[slug]/page.tsx
import type { Metadata } from "next";
import { describe } from "@/lib/seo/describe";
import { getJob } from "@/lib/jobs";

type Props = { params: Promise<{ slug: string }> };

export async function generateMetadata({ params }: Props): Promise<Metadata> {
  const { slug } = await params;
  const job = await getJob(slug);

  return {
    title: `${job.title} in ${job.city}`,
    description: describe([
      `${job.title} at ${job.company} in ${job.city}${job.salary ? `, ${job.salary}` : ""}.`,
      job.employmentType && `${job.employmentType}, posted ${job.postedLabel}.`,
      job.summary,
    ]),
  };
}
```

The trap is the root layout. Next.js shallow-merges metadata from layouts and pages, and a page that doesn't set a field inherits it from the nearest parent that does ([Next.js generateMetadata, Merging and Inheriting fields](https://nextjs.org/docs/app/api-reference/functions/generate-metadata)). A `description: "The best jobs in the UAE"` in `app/layout.tsx` ends up on every route that forgets its own. That's the most common source of thousands of identical descriptions on Next.js sites. Either remove the description from the root layout and set one per route, or keep it only on the homepage's `page.tsx`.

## WordPress: Yoast and Rank Math filters

Both plugins let you set a description template per post type in their settings, using variables such as the title or excerpt. Start there. When you need fallbacks (skip empty fields, use a custom field), filter the output.

Yoast prints the description through its `Meta_Description_Presenter`, filterable with `wpseo_metadesc` ([Yoast metadata API](https://developer.yoast.com/customization/apis/metadata-api/)):

```php
function example_job_description( int $post_id ): string {
    $company = get_post_meta( $post_id, 'job_company', true );
    $city    = get_post_meta( $post_id, 'job_city', true );
    $salary  = get_post_meta( $post_id, 'job_salary', true );

    $first = trim( get_the_title( $post_id )
        . ( $company ? " at $company" : '' )
        . ( $city ? " in $city" : '' )
        . ( $salary ? ", $salary" : '' ) ) . '.';
    $rest  = wp_strip_all_tags( get_the_excerpt( $post_id ) );
    $text  = trim( preg_replace( '/\s+/u', ' ', "$first $rest" ) );

    if ( mb_strlen( $text ) <= 155 ) {
        return $text;
    }
    $cut = mb_substr( $text, 0, 156 );
    $pos = mb_strrpos( $cut, ' ' );
    return rtrim( mb_substr( $cut, 0, $pos ?: 155 ), " ,.;:-" ) . '.';
}

add_filter( 'wpseo_metadesc', function ( $description ) {
    if ( is_singular( 'job_listing' ) && ! $description ) {
        return example_job_description( get_queried_object_id() );
    }
    return $description;
} );
```

The `! $description` check keeps descriptions editors wrote by hand. Rank Math's equivalent filter is `rank_math/frontend/description` ([Rank Math filters and hooks](https://rankmath.com/kb/filters-hooks-api-developer/)):

```php
add_filter( 'rank_math/frontend/description', function ( $description ) {
    if ( is_singular( 'job_listing' ) && ! $description ) {
        return example_job_description( get_queried_object_id() );
    }
    return $description;
} );
```

Run only one SEO plugin. Two plugins, or a plugin plus a theme that prints its own `<meta name="description">`, produce two description tags.

## Shopify: page\_description in theme.liquid

Shopify's own example prints the description only when one exists ([Shopify, Add SEO metadata to your theme](https://shopify.dev/docs/storefronts/themes/seo/metadata)):

```html
{% if page_description %}
  <meta name="description" content="{{ page_description | escape }}" />
{% endif %}
```

`page_description` comes from the SEO fields in the Shopify admin. For product pages whose SEO description was never filled in, you can add a fallback built from product data. Liquid's `truncate` filter counts its ellipsis inside the length, and passing an empty string as the second argument drops it ([Shopify truncate filter](https://shopify.dev/docs/api/liquid/filters/truncate)):

```html
{%- if page_description -%}
  <meta name="description" content="{{ page_description | escape }}" />
{%- elsif template.name == 'product' -%}
  {%- capture desc -%}
    {{ product.title }} by {{ product.vendor }}, from {{ product.price | money }}. {{ product.description | strip_html | strip_newlines }}
  {%- endcapture -%}
  <meta name="description" content="{{ desc | strip | truncate: 155, '' | escape }}" />
{%- endif -%}
```

Test it on a product with no vendor and one with an empty body before shipping. `truncate` cuts mid-word, so if that bothers you, use `truncatewords` with a word count instead.

## Controlling the snippet when you don't want one

Google documents three controls ([snippets](https://developers.google.com/search/docs/appearance/snippet), [robots meta tag](https://developers.google.com/search/docs/crawling-indexing/robots-meta-tag)):

- `<meta name="robots" content="nosnippet">` shows no text snippet.
- `max-snippet:[number]` caps the snippet at that many characters. `max-snippet:0` equals `nosnippet`, and `-1` lets Google choose. Google says this limit applies to all its search surfaces, including AI Overviews and AI Mode, and also limits how much content they can use as direct input.
- `data-nosnippet` on an element keeps that part of the page out of snippets.

These set limits on what Google shows. They don't make Google use your meta description.

## Find description problems across the whole site

On a site with more than a few hundred pages, look at descriptions by template:

1. **Crawl and export** title, meta description and URL for every indexable 200 page.
2. **Group by URL pattern** (`/jobs/[slug]`, `/category/[slug]`). If one pattern has the same description on most of its pages, the template has no page-specific data in it, or a layout default is winning.
3. **Count the tags.** `curl -s https://example.com/jobs/x | grep -ci '<meta name="description"'` should print 1. Two means a layout, plugin or head manager is adding a second one.
4. **Sample the output.** Check the longest, the shortest and a page with empty fields.

SEOFix runs this on every audit. `META_DESCRIPTION_MISSING`, `META_DESCRIPTION_TOO_LONG`, `META_DESCRIPTION_TOO_SHORT` and `MULTIPLE_META_DESCRIPTIONS` are read per page, and `DUPLICATE_META_DESCRIPTION` compares exact descriptions across indexable pages ([Indexability checks](https://seofix.ai/help/checks-indexability)). Noindex pages and pages canonicalised elsewhere are skipped, since Google won't show their snippet. Issues are grouped by URL template, and an issue on at least 80% of a template's pages (5 or more) is marked template-wide ([Fixing by template](https://seofix.ai/help/fixing-by-template)).

Titles follow the same pattern and usually live in the same template. See duplicate title tags and [title too long on thousands of pages](https://seofix.ai/blog/title-tag-too-long-fix).

## FAQ

**What is the ideal meta description length?** Google doesn't define one. It truncates "to fit the device width" ([snippets](https://developers.google.com/search/docs/appearance/snippet)). Keep the important part within about 150 characters and stop writing when you run out of specific things to say.

**Why does Google ignore my meta description?** Snippets are chosen per query, and Google uses your description when it describes the page better than the page's own text does. Make the description specific and accurate to the page. A description that matches the page's actual content gets used more often than a sales pitch.

**Do meta descriptions affect rankings?** Google's snippet documentation presents them as a way to influence the snippet, saying good descriptions "can go a long way to improving the quality and quantity of your search traffic" ([snippets](https://developers.google.com/search/docs/appearance/snippet)). That page doesn't describe them as a ranking signal. Their job is the click.

**Is a missing meta description worse than a duplicated one?** A single generic description repeated on 5,000 pages tells searchers nothing. Google recommends site-level descriptions only on the home page and other aggregation pages and "page-level descriptions everywhere else" ([snippets](https://developers.google.com/search/docs/appearance/snippet)). If you can't generate page-specific ones yet, removing the site-wide default lets Google build the snippet from each page's content, which is usually better than the boilerplate.

SEOFix reports missing, duplicated and overlong descriptions grouped by the template that generates them, and [Verify fix](https://seofix.ai/help/verify-fix) rechecks a sample right after you deploy. Your first audit is free, up to 500 pages.
