Meta description length, duplicates and when Google ignores yours
The meta description, <meta name="description" content="…">, is a short summary of the page that Google sometimes shows under the title in search results. Give every important page its own, written for people deciding whether to click: one or two sentences, roughly 120 to 155 characters, so it isn't cut off on desktop. Google sets no limit, but shortens snippets to fit the screen. Google often writes its own snippet from the page instead, especially when yours is missing, duplicated or doesn't match the search.
What a meta description does
It's the sales pitch under your link. When Google uses it, it's the main thing a searcher reads before deciding whether to click:
Google builds snippets mainly from the page's own content and uses the meta description as a second source, when it describes the page better than the visible text. So a good description raises the chance it's shown, but doesn't guarantee it.
Meta description length
Google says there's no limit on how long a meta description can be. Snippets are simply cut to fit the device. In practice:
| Length | Rough guide | Why |
|---|---|---|
| Too short | Under about 70 characters | Too little room to say what the page offers (70 is SEOSnip's threshold, not Google's) |
| About right | About 120 to 155 characters | Usually shows in full on desktop |
| Too long | Over about 160 characters, or about 985 pixels in 14px Arial | The end gets replaced with "…" |
Like titles, it's the width that gets cut, not the character count: capitals and wide letters run out of room sooner. See title tag length for why pixels matter.
Why Google shows other text
Google often shows other text from the page instead. It's most likely when:
- There's no description, so it has to pick text from the page.
- It's the same on many pages, such as one site-wide description in the template. Google recommends a different one for each page.
- It's a list of keywords, which Google says is less likely to be shown.
- It doesn't match the search. Google may show the part of the page that answers the query instead.
- It only repeats the title, which tells the searcher nothing new.
More than one <meta name="description"> on a page, often one from the theme and one from a plugin, makes it unclear which you meant. Keep one.
How to write one
- Summarise the page, not the site. What will someone get if they click?
- Lead with the useful part, so it still makes sense if the end is cut.
- Include the facts people compare on: price, sizes, delivery, date, author, as fits the page.
- Make each one unique. On large sites, generating them from page data (product name, category, key details) is fine, as long as they read naturally and differ from page to page.
- Prioritise. If you can't write them all, start with the homepage and the pages that get the most search traffic.
How to check by hand
1Check the description, and look for copies 1 minute
Open DevTools (F12), go to the Console and paste:
// Checks this page's meta description, then compares it with up to 20 pages it links to
const clean = s => (s || '').replace(/\s+/g, ' ').trim();
const all = [...document.querySelectorAll('meta[name="description" i]')].map(m => clean(m.getAttribute('content')));
const desc = all[0] || '';
const ctx = document.createElement('canvas').getContext('2d');
ctx.font = '14px Arial';
const px = Math.round(ctx.measureText(desc).width);
const problems = [
!desc && 'MISSING',
all.length > 1 && 'MORE THAN ONE',
desc && desc.toLowerCase() === clean(document.title).toLowerCase() && 'SAME AS THE TITLE',
desc && desc.length < 70 && 'SHORT',
(desc.length > 160 || px > 985) && 'LIKELY CUT OFF',
].filter(Boolean);
console.table({
'Meta descriptions': all.length,
Characters: desc.length,
'Pixels (14px Arial, estimate)': px,
Result: problems.join(', ') || 'ok',
});
// Duplicates: same description on other pages of the site. Skips sign-out, cart and delete links, and files.
if (desc) {
const skip = /log[-_]?(out|off)|sign[-_]?(out|off)|delete|remove|unsubscribe|cart|basket|checkout|\.(pdf|zip|docx?|xlsx?|mp4|jpe?g|png|gif|webp)(\?|$)/i;
const here = location.href.split('#')[0];
const links = [...new Set([...document.links].map(a => a.href.split('#')[0])
.filter(h => h.startsWith(location.origin + '/') && h !== here && !skip.test(h)))].slice(0, 20);
const same = [], failed = [];
for (const url of links) {
try {
const res = await fetch(url, { signal: AbortSignal.timeout(8000) });
if (!res.ok || res.redirected || !/html/i.test(res.headers.get('content-type') || '')) {
res.body?.cancel();
failed.push(url);
continue;
}
const doc = new DOMParser().parseFromString(await res.text(), 'text/html');
if (clean(doc.querySelector('meta[name="description" i]')?.getAttribute('content')) === desc) same.push(url);
} catch (e) { failed.push(url); }
}
console.log(same.length ? 'Same description on: ' + same.join(', ')
: 'None of the ' + (links.length - failed.length) + ' linked pages checked share this description');
if (failed.length) console.log('Skipped (error, redirect, timeout or not HTML): ' + failed.join(', '));
}
It reports how many descriptions the page has, the length in characters, an estimate of its width in Google's desktop results (14px Arial), and every problem it finds: missing, short, likely cut off or the same as the title. Then it fetches up to 20 same-site pages this one links to and lists any with exactly the same description.
It reads the page as rendered, so it includes a description added by JavaScript. The duplicate check reads each linked page's server HTML, so it misses descriptions added there by JavaScript. It skips sign-out, cart and delete links, files, and pages that fail or redirect, but every other link gets a normal request, so run it while signed out.
2See what Google actually shows 1 minute
Search Google for site: followed by the page's URL. Compare the snippet with your description. The snippet changes with the search, so also try a phrase people would use to find the page. If it's different text from the page, Google preferred that, so look at what it chose and why.
3Look at the source 30 seconds
Press Ctrl+U (⌘+⌥+U on a Mac) and search for name="description". There should be one match, in the head. A description added by JavaScript won't show here; the Console check above sees it.
On Shopify, WordPress and Next.js
- Shopify: Use the Description field under Edit website SEO on the page. The homepage description is under Online Store > Preferences.
- WordPress: Descriptions usually come from an SEO plugin. If you see two, the theme or a second plugin is probably adding another.
- Next.js: Set
descriptionin themetadataobject or return it fromgenerateMetadata.
How crawlers report this
If a crawl sent you here, these are the labels to look for. Our guide to Screaming Frog and Sitebulb issues covers other common ones.
| Screaming Frog | Sitebulb | What it means |
|---|---|---|
| Meta Description: Missing | Meta description is missing | Search engines will write the snippet themselves. |
| Meta Description: Multiple | Multiple meta descriptions | More than one description tag on the page. |
| Meta Description: Over 155 Characters | Meta description length too long | The description may be cut off in results. |
| Meta Description: Below 70 Characters | Meta description length too short | The description may be too thin to be used. |
| No direct match | Title and meta description are the same | The description repeats the title and adds nothing. |
Doing this on every page?
SEOSnip checks meta descriptions for you
Open the extension on any page and it measures the description in characters and Google's desktop pixels. You get:
- A missing description, or more than one, in the server HTML or the rendered page
- One under 70 or over 160 characters, or within 160 characters but too wide, with the part that would be cut struck through
- A description that repeats the page title
- A ticket with that evidence, and a "Check if fixed" button that re-runs the check
Meta description is too long
| Meta description · 221 characters |
|---|
| Our navy wool coat is made from 80% recycled wool with a water-resistant finish, a detachable hood and deep pockets, and is available in sizes 6 to 22 with free |
| Struck-through text is past the 160-character guidance, around where search results cut it off. |