Guide

How to bulk-write meta descriptions for WordPress posts

By Axel Antas-Bergkvist Published May 9, 2026 Updated May 31, 2026

If you’ve got a WordPress site with more than fifty posts, odds are most of them are missing a meta description, or carrying one that Yoast auto-generated three years ago from the first 155 characters of the body. Hand-writing one for every old post is one of those jobs that’s been on your list for two years and will be on it for two more. This guide is the workflow that clears that backlog in one pass, in your browser.

It’s a specific application of the broader bulk SEO edit pattern — connect, run a recipe, review, publish — narrowed to the single field that gives you the most search-result lift for the least effort.

Why meta descriptions are worth doing in bulk

The meta description doesn’t directly affect rankings, but it affects whether someone clicks your result. Google rewrites a chunk of them anyway, but the ones you write yourself win more often than auto-generated ones — a meaningful, scannable description is the difference between a 2% click-through and a 5% one across an archive. Multiplied across hundreds of posts, that’s real traffic.

The reason this never gets done is the same reason every bulk content job on WordPress doesn’t: there’s no native interface for it. Yoast and Rank Math both give you a single field per post, inside the Block Editor, one post at a time. The Bulk Edit dropdown in the post list doesn’t touch SEO fields. So you stare down 300 posts and your good intentions die.

Works for Yoast and Rank Math

Both plugins expose the meta description through the WordPress REST API. Yoast uses _yoast_wpseo_metadesc, Rank Math uses rank_math_description, but Spectersync normalizes both into the same field. You edit in the workspace; Spectersync writes back to whichever plugin you’re using. SEOPress and All in One SEO work the same way — check one post round-trips correctly before running anything in bulk.

The workflow

This is the same shape as every bulk job — covered in detail in bulk edit WordPress for SEO — applied to one field.

  1. Connect your site. Add WordPress in the Spectersync workspace with your site URL, username, and an Application Password, and your whole archive opens as clean, structured content. Subscribe now for 500 free credits when your workspace opens.
  2. Find the meta-description field. Depending on your setup it’s surfaced as the post’s meta description — often empty or auto-filled.
  3. Run the recipe. Give the AI the instruction below; it runs across the whole archive at once (AI workflow). Browsing is free; only the AI run spends credits.
  4. Review the diff. Spectersync’s dry-run shows you every post that would be updated, the old value, and the new value. Read through the list. If 80% look good and 20% are garbage, publish the good ones and refine the recipe for the rest.
  5. Publish back. One push, and the descriptions land in Yoast or Rank Math on your live site.

A recipe that respects existing descriptions

The hard part isn’t generating descriptions — it’s not nuking ones you’ve already written by hand. This instruction does the right thing:

For each post in the archive:

- If the meta description is empty or matches the first 155
  characters of the post body (i.e. it was auto-generated),
  write a new one based on the post body. Aim for 145 to 160
  characters, lead with the reader's problem or the post's
  payoff, and don't end on a cut-off word.

- If the meta description is already a hand-written sentence
  that doesn't match the post's opening, LEAVE IT ALONE.
  Log "skipped: existing description" for that post.

Don't touch any other field. Don't touch the post body.

The two rules that matter: only fill empty or obviously-auto-generated descriptions, and tell the AI explicitly to log skips. The skip log is how you verify it didn’t quietly overwrite your good ones — if the count of “skipped” lines matches the count of posts where you remember writing the description by hand, you’re safe.

Review, then publish

The dry-run diff is non-negotiable for this kind of job. You’re touching every post in your archive. Spectersync’s diff lays out the full list of changes — every post, old value, new value — before anything reaches WordPress. Scroll through it. Spot-check a dozen random rows. If something looks off, send it back, refine the recipe, regenerate.

Conflicts are the second safety net. If a post got edited in wp-admin after you connected — maybe a teammate updated the description in Yoast while you were running the recipe — Spectersync flags the conflict instead of clobbering their work, and asks which version wins.

Where this fits

Meta descriptions are the highest-ROI bulk SEO job because every post needs one, the field is small, and the AI is genuinely good at writing them. The same connect-recipe-review-publish loop opens up the rest of the bulk SEO checklist: rewriting SEO titles, refreshing old posts, standardizing categories. The setup is the same; the recipe is what changes. Start with descriptions.

Prefer the desktop edition?

If you’d rather run the engine locally — your archive as plain .md files on your Mac, with nothing routed through our servers — that’s the desktop and open-source edition. The hosted webapp is the fastest way in. Subscribe now →