/ ← Meta Tag Fixes / Duplicate Meta Descriptions
In this guide
  1. What a duplicate meta description is, and why it matters
  2. How to find and group the duplicates
  3. Fixing the template default
  4. Pagination, filters and true duplicates
  5. Writing descriptions for the pages that matter
  6. A worked example
  7. The fix, step by step
  8. Edge cases worth knowing
  9. Keeping descriptions unique
  10. Questions and answers

What a duplicate meta description is, and why it matters

A duplicate meta description is the same description text used on more than one URL. Audit tools flag it because the description is meant to summarise one page. When fifty pages all say Shop the best garden tools online, the text tells a searcher, and Google, nothing about any one of them.

Duplicates do not cause a penalty, and the meta description is not a ranking factor. The cost is indirect. Google is more likely to ignore a description that appears across many pages and build its own snippet from page text, so you lose control of what people read before they click. Large groups of duplicates are also a useful warning sign, because they often point at a deeper problem: a template printing a default, or many URLs carrying the same content.

Type of duplicateTypical causePriority
Hundreds of pages share one descriptionTheme or platform default printed when a page has noneHigh: one template fix solves it
Products in a range share oneCopied product data, or a bulk importHigh for best sellers
Category page 1, 2, 3 share onePagination uses the same templateLow
Filtered and sorted URLs share oneParameter URLs repeat the main pageLow once canonicalised
Two pages share description and contentGenuine duplicate pagesMedium: merge them
http and https, or www and non-www versionsSite reachable at several addressesHigh: fix redirects
πŸ’‘ A missing description is better than a wrong one. Google writes its own snippet for a page with none, but a copied description tells it nothing about the page and may be shown anyway.

How to find and group the duplicates

Search Console no longer reports duplicate descriptions, so you need a crawl. Our site crawler or any desktop crawler will list every URL with its description. Export the list, sort by description, and count how many URLs share each one. Then group them by template, because the fix is usually per template, not per page.

If you prefer the command line, this short Python script reads your sitemap, fetches each page and prints the descriptions used more than once, with a count:

import re, urllib.request
from collections import defaultdict

SITEMAP = 'https://www.example.com/sitemap.xml'
get = lambda u: urllib.request.urlopen(urllib.request.Request(u, headers={'User-Agent': 'desc-check'}), timeout=20).read().decode('utf-8', 'ignore')
urls = re.findall(r'<loc>(.*?)</loc>', get(SITEMAP))
seen = defaultdict(list)
for u in urls[:2000]:
    m = re.search(r'<meta[^>]+name=["\']description["\'][^>]*content=["\']([^"\']*)', get(u), re.I)
    seen[m.group(1).strip() if m else '(none)'].append(u)
for d, us in sorted(seen.items(), key=lambda x: -len(x[1])):
    if len(us) > 1:
        print(len(us), '|', d[:90], '|', us[0])

If your sitemap is an index of other sitemaps, run it against each child sitemap. Then look at the URL patterns in each group. Paths such as /tag/, /page/2/, ?sort= or /collections/ tell you which template is responsible.

Before fixing anything, remove from your list the URLs that do not matter: pages with a noindex tag, and pages whose canonical points elsewhere. Google does not show their snippets, so their descriptions are not worth your time.

Fixing the template default

The biggest groups almost always come from a default. Many themes print the site tagline, or one fixed sentence, whenever a page has no description of its own. Fixing that one line usually removes most of the duplicates at once. You have two good options: build a description from each page's own data, or print no tag at all when there is nothing specific to say.

WordPress with an SEO plugin

Set a template for each content type in the plugin settings, built from variables that differ per page. In Yoast, a product template might be %%title%% from %%sitename%%. %%excerpt%%; in Rank Math the variables use single percent signs, such as %title% and %excerpt%. Check that the theme is not adding its own description as well. Our guide to Yoast and Rank Math descriptions covers finding a hard-coded theme tag.

Shopify

Shopify themes print the description from the page_description object in theme.liquid. For products without an SEO description, Shopify uses the start of the product description, so duplicates usually mean the product descriptions themselves begin the same way. Collections and pages work the same way. A theme that hard-codes a fallback is the other common cause:

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

If your theme has an else branch printing a fixed sentence, remove it. See fixing meta tags on Shopify for the rest of the head.

Next.js and other custom sites

Build the description from the page data in generateMetadata, and leave it out rather than falling back to a site-wide sentence:

export async function generateMetadata({ params }) {
  const { slug } = await params;
  const p = await getProduct(slug);
  const desc = p.summary
    || `${p.name} in ${p.material}, ${p.sizeRange}. From Β£${p.priceFrom}, delivered in ${p.leadTime}.`;
  return { title: `${p.name} | Oak & Iron`, description: desc };
}

Pagination, filters and true duplicates

Paginated pages

Page 2 and beyond of a category or blog listing can share page 1's description, or add the page number. People rarely search for page 3 of anything, so this is the lowest-priority group. The quick fix is a variable: Yoast offers %%page%% and Rank Math offers %page%, which add text such as Page 2 of 5. Each page in the series should keep a canonical pointing to itself, not to page 1.

Filter, sort and tracking parameters

Addresses such as /shoes/?colour=red&size=8 or /shoes/?sort=price usually show the same listing in a different order. Give them a canonical tag pointing to the main category, and do not link to them in ways that invite crawling. Once they are canonicalised, their descriptions stop mattering. Large filter systems can also waste crawling, which is covered in fixing crawler traps.

<link rel="canonical" href="https://www.example.com/shoes/">

Pages that are truly the same

If two URLs share a description because they share almost all their content, the description is a symptom. Merge them into one stronger page and add a 301 redirect from the old one. Common examples are two near-identical service pages for neighbouring towns, or an old and new version of the same guide. See fixing duplicate content and fixing canonical tags.

The same page at several addresses

If the crawl shows the same page under http and https, or with and without www, every description is duplicated twice over. The fix is a single 301 redirect to one version, not new descriptions. Check with curl -sI http://example.com/ that each variant redirects in one step to your main address.

Writing descriptions for the pages that matter

Templates handle the long tail. Your home page, main service or category pages, best-selling products and most visited posts deserve descriptions written by hand. Use your analytics or the Search Console Performance report to list the 20 to 50 pages that get the most impressions, and start there.

PageTemplate-builtHand-written
ProductOak dining table from Oak and Iron. Our oak dining table is…Solid oak dining table seating six to eight, made to order in four finishes. From Β£1,450, delivered in five weeks.
ServiceBoiler servicing. Example Heating Ltd.Annual boiler servicing in Leeds by Gas Safe engineers. Fixed price of Β£85, with a written report and same-week visits.
CategoryGarden tools. Shop garden tools online.Spades, forks, pruners and hoes from British and Japanese makers, with free UK delivery over Β£40.

Each hand-written version names what the page offers, adds a specific fact such as a price, place or timescale, and is around 120 to 160 characters long.

A worked example

A garden tools shop on WooCommerce had a crawl report showing 904 URLs with the description Shop the best garden tools online. The groups were 640 products, 180 tag pages, 60 paginated category pages and 24 filtered URLs.

Viewing the source showed the theme printing the tagline whenever the SEO plugin had no description, because the plugin's product template had been cleared during a migration. The theme line was removed in a child theme, and the product template was set to build each description from the product name, its main feature from a custom field, and its price range. Tag pages were set to noindex, paginated pages gained the page number, and the filtered URLs already had canonicals to their categories.

The owner then wrote descriptions by hand for the 30 products and categories with the most impressions. A second crawl two days later found 14 duplicates left, all pairs of near-identical products, which were merged.

The fix, step by step

Step 1

Crawl the site

Run a full crawl with our site crawler or a desktop crawler, or use the sitemap script above, and export every URL with its meta description. Sort by description and count how many URLs share each one. Note the size of each group. A handful of groups covering hundreds of URLs points to a template; many small groups of two or three point to copied content or near-duplicate pages.

Step 2

Remove pages that do not matter

Filter out URLs with a noindex tag and URLs whose canonical points to a different page, because Google does not show their snippets. Also set aside paginated pages beyond page 1. What remains is the list worth fixing. Record the count before and after this step, so you can measure progress against the pages that really appear in search results.

Step 3

Group by template

Look at the URL patterns in each group, such as /product/, /tag/, /page/2/ or ?sort=, and label each group with the template that produces it. Open one page from each group and view the source to see where the description comes from: the SEO plugin, the theme or the platform. This tells you which single change will fix the largest number of pages at once.

Step 4

Fix the default

Change the template so pages without their own description either build one from their own data, such as name, main feature and price, or print no description tag at all. Remove any fixed fallback sentence from the theme, using a child theme on WordPress or editing theme.liquid on Shopify. Recrawl a sample of the affected pages and confirm each now has a different description or none.

Step 5

Write key pages by hand

List your 20 to 50 most important pages from the Search Console Performance report, sorted by impressions. Write a specific description for each, around 120 to 160 characters, saying what the page offers, who it is for and one concrete fact. Avoid repeating the same opening on every page. View the source of each to confirm the new text is live after clearing caches.

Step 6

Handle pagination and filters

Add a page number to descriptions on paginated pages with a variable such as %%page%% in Yoast or %page% in Rank Math, and keep each page's self-referencing canonical. Make sure filtered and sorted URLs carry a canonical pointing to the main category. Check a few with view source. These groups can then stay in your crawl report without needing their own descriptions.

Step 7

Merge true duplicates

For pairs of pages that share their content as well as their description, choose the stronger page, move any useful content into it, and add a 301 redirect from the other. Update internal links to point at the page you kept. Check with curl -sI that the old address returns a 301 to the new one in a single step, and remove the old URL from your sitemap.

Step 8

Recrawl and request indexing

Crawl the site again and compare the duplicate count with your first crawl; it should drop sharply, with only small or low-priority groups left. Clear caches if any old text remains. Then request indexing for your key pages in URL Inspection and let Google recrawl the rest over the following weeks. Keep the crawl export so you can compare the next monthly check.

Edge cases worth knowing

Keeping descriptions unique

Google picks up changes as it recrawls, which takes weeks for a large site. Key pages can be sped up with URL Inspection and Request indexing. For how Google then chooses snippets, see why your meta description is not showing in Google.

Questions and answers

1. Are duplicate meta descriptions bad for SEO?

Duplicate meta descriptions are not a penalty and do not directly lower rankings, because the meta description is not a ranking factor. The harm is indirect. Google is more likely to ignore a description repeated across many pages and write its own snippet, so you lose control of what searchers read. Large groups of duplicates also often reveal a template default or duplicate pages, which are worth fixing for their own sake.

2. How do I find duplicate meta descriptions on my site?

You find duplicate meta descriptions by crawling the site and sorting every URL by its description. Search Console no longer has a report for this, so use a site crawler or a short script that reads your sitemap and fetches each page. Export the results, count how many URLs share each description, and group them by URL pattern, such as products, tags or paginated pages, so you can see which template is responsible.

3. Is it better to have no meta description than a duplicate one?

Yes, for most pages a missing meta description is better than a duplicated one. With no description, Google builds a snippet from the page text that suits each search. A copied description describes another page or the whole site, so it tells searchers little and may still be shown. The best option is a unique description for each important page, with no tag rather than a generic fallback for the rest.

4. Do paginated pages need unique meta descriptions?

Paginated pages do not strictly need unique meta descriptions, because pages two, three and beyond of a listing are rarely what people search for. A simple fix is to add the page number with a template variable, so each one reads slightly differently, and keep a self-referencing canonical on each page. Spend your time on page one of each category and on your key products and services instead, where the description is more likely to be seen.

5. Why do my Shopify products have the same meta description?

Shopify products often share a meta description because Shopify uses the start of the product description when no SEO description is set, so products whose descriptions begin with the same sentence get the same snippet text. A theme that prints a fixed fallback sentence causes the same result. Edit the search engine listing for key products, vary the opening line of similar product descriptions, and check theme.liquid for a hard-coded fallback.

6. Should I fix duplicate descriptions on filtered URLs?

You usually do not need to fix descriptions on filtered or sorted URLs. These addresses show the same listing as the main category in a different order or subset, so the right fix is a canonical tag pointing to the main category, which tells Google which version to show. Once that is in place, Google rarely shows the filtered URL in results, and its description stops mattering. Check the canonical is present with view source.

7. How long does it take Google to pick up new meta descriptions?

Google picks up new meta descriptions as it recrawls each page, which can take from a few days for popular pages to several weeks or longer for deep pages on a large site. You can request indexing for important pages in the URL Inspection tool to speed them up. For the rest, keep internal links and the sitemap up to date and let normal crawling handle it, checking progress with your main search phrases.

Find every duplicate description on your site

Our site crawler lists every page with its meta description and groups the duplicates, so you can see which template is responsible and fix the biggest groups first.

Open Meta Tag Fixes β†’
πŸ’¬ Got a problem?
Related Guides: All Meta Tag Fixes  ·  How to Fix Meta Descriptions  ·  How to Fix Duplicate Content  ·  Yoast and Rank Math Meta Description Not Working  ·  How to Fix Canonical Tags  ·  Learning Hub

About aiwebpageseo

aiwebpageseo.com is a data-driven SEO and AEO (Answer Engine Optimisation) platform providing a free suite of technical SEO tools. Rather than relying on AI-theorised assumptions, the platform analyses live URL performance, delivering objective diagnostics, page speed metrics, CLS debugging, and site crawl data alongside actionable technical tutorials.