Every piece of advice about meta descriptions is written for one page. Make it compelling. Include the keyword. Match search intent. All reasonable, and all useless when the input is a catalogue of four thousand products that nobody is going to hand-write anything for.
This guide is about the other problem: what to do when the unit is a whole site.
First, calibrate how much this matters
Two facts change the effort this deserves, and both are frequently left out of advice that wants you to take it seriously:
- Meta descriptions are not a ranking factor. They do not affect where you rank. They affect whether someone clicks a result you already earned, which is worth having and is a much smaller claim.
- Google frequently ignores what you wrote. As Google's own documentation on snippets describes, it generates snippets from page content when it judges that a better match for the query than your description. This happens on a large share of results.
The honest conclusion is not "skip them". It is that a missing description is a lost opportunity to influence the snippet rather than a defect, and that the marginal value of the four-thousandth description is close to zero. That should change how you spend the effort.
Triage, don't cover
The instinct is to get to 100% coverage because coverage is measurable. It is the wrong target. A description on a page that nothing links to and nobody searches for changes nothing at all.
A defensible order:
- Pages that already rank and get impressions. Straight from Search Console: high impressions, mediocre click-through. These are the only pages where a better description has a measurable effect, because the ranking already exists and only the click is in question.
- High-value commercial pages. Category pages, top products, the pages you would be upset to lose. Worth hand-writing even if there are two hundred of them.
- Pages with a duplicated description. These are worse than empty, for reasons below.
- Everything else. Template it, or leave it. Google's extraction from a well-structured page is usually reasonable, and on a thin archive page there was nothing to say anyway.
Steps 1 and 2 are usually a few hundred pages. That is a week of real work with a real return, rather than a month of work with none.
Duplicates are worse than gaps
This is the finding that surprises people, and it is why a bulk view matters more than a per-page one.
A duplicated description usually means a template produced the same sentence for three hundred products with one variable swapped. Those pages now assert, identically, that they are interchangeable. Google commonly discards a description that does not distinguish the page and extracts its own text instead — so the generation effort bought nothing, and you cannot see it happening because each page looks fine in isolation.
An empty description at least hands the decision to an extractor that reads the actual page. A duplicated one wastes the slot and tells you nothing went wrong.
Check for duplicates before you check for length. They are the higher-value finding and the one no single-page tool can produce.
Template from structure, not from prose
The difference between a template that works and one that manufactures duplicates is what you feed it.
Prose templating takes one sentence and swaps a noun:
"Buy the {product} at Acme. Free shipping and 30-day returns."
Every output is near-identical, distinguished only by the product name, which is already in the title. This is the pattern that produces three hundred duplicates.
Structural templating assembles from fields that genuinely differ per item:
"{material} {product} in {sizes} sizes, {weight}. {distinguishing_feature}. Ships from {location}."
The output varies because the inputs vary. If you have a spec table, a category, dimensions, a material, a compatibility list — you already hold enough to generate descriptions that differ meaningfully. If you genuinely hold nothing but a name and a price, no template will save you, and that is worth knowing before you build one.
A useful test: strip the product name from the generated description. Could you still tell which product it belongs to? If not, the template is producing noise.
The length budget, and why character counts are wrong
Search results truncate by rendered pixel width, not by character count. That is why every rule of thumb you have read — 155 characters, 160, 156 — is wrong for some strings and right for others. WWW Warehouse Workshop and illinois militia list are both 22 characters and nothing like the same width.
Working budgets on desktop, observed rather than published:
- Meta description: about 960 pixels — roughly 155 characters of ordinary English.
- SEO title: about 600 pixels — roughly 60 characters.
Google has never documented a limit and changes the effective widths without notice, so treat these as budgets with a few percent of slack. You can measure any specific string in our SERP snippet preview, or a few thousand at once in the bulk length checker.
Since truncation takes the end, the practical response at scale is not "write shorter" — it is to put the distinguishing information first and the boilerplate last. If your template ends with "Free shipping on all orders", losing it costs nothing. If it ends with the one detail that differentiates the product, you have templated backwards.
Very short is a missed opportunity, not an error
A 40-character description carries no penalty. It does leave most of the budget unused, and Google is more likely to substitute its own text when given very little to work with. Treat it as a lower-priority finding than duplicates or gaps — worth a pass eventually, not worth blocking on.
Verifying without opening 4,000 editor screens
Whatever produced the descriptions, you need to see the result as a set. The questions are always the same four: how many are missing, how many are duplicated, how many will be truncated, and how many are very short.
Getting the data out of WordPress depends on which SEO plugin you run, and they disagree — Yoast, Rank Math and SEOPress use post meta with different keys, while All in One SEO uses its own database table entirely. Field names also change between major versions, so verify against your own install rather than trusting any published list.
The shortcut that sidesteps all of it: run a site crawler that reads the rendered <meta name="description"> from the page. That is what search engines see, it is correct regardless of which plugin wrote it, and it catches the case where two SEO plugins are both active and one is silently overriding the other. Export the crawl, paste it into the bulk checker, and you have the four numbers.
What to automate, and what not to
A workable division of labour after doing this a few times:
- Hand-write the pages from triage steps 1 and 2. There are fewer than you fear and they are where the return is.
- Template the structured long tail, from fields that actually vary, and check the output for duplicates before publishing rather than after.
- Leave alone the pages with nothing distinctive to say. An extracted snippet from a real page beats a generated sentence that says nothing.
- Re-check periodically. New products arrive without descriptions, and coverage decays.
That last point is the one that makes this an ongoing job rather than a project, and it is the reason Metaly is being built — bulk generation for the long tail on top of an audit that finds the gap. Its generation half is not finished, and its product page lists exactly which parts are and are not built. The measuring tools linked above work today and need no plugin at all.