How to bulk edit WordPress posts for SEO (at scale)
If you have fifty WordPress posts, hand-editing them for SEO is annoying but doable. If you have five hundred — or five thousand — it’s a brick wall. You can’t refresh a meta description on every post, standardize categories across the archive, or fix a heading pattern site-wide without opening each post in the Block Editor one at a time. That’s the gap this guide closes.
The problem: WordPress has no real bulk content editor
The WordPress admin does have a “Bulk Actions” dropdown on the post list. It moves posts to draft, sends them to trash, changes the author, or toggles comments. Quick Edit lets you tweak the slug, status, categories, and tags for a post inline. Genuinely useful for housekeeping.
But it stops at metadata. There’s no native way to bulk-edit the things SEO actually cares about: post bodies, Yoast or Rank Math titles and descriptions, internal-link patterns, heading structure, or featured-image URLs. For content work, the Block Editor is still one post at a time, and the REST API will rate-limit and time out long before you finish a sweep across a real archive.
The “AI for WordPress” plugin shelf doesn’t help either. Most paste GPT output straight into the editor with no view of what else is on the site, no diff, and no rollback. You end up writing prompts to a tool that only sees one post.
The approach: sync down, edit the folder, push back
The fix is to stop editing inside wp-admin and bring the whole site to where bulk edits are easy: a folder of plain markdown files on your Mac.
That round trip is what Specter does. It’s a native macOS app that does two-way sync between WordPress and a local folder. Connect with an Application Password, pick a folder, and Specter pulls every post and page down as a .md file. Crucially, it’s a two-way WordPress-to-markdown sync — it can edit posts that are already published, not just create drafts. That’s the whole point for SEO, where the URLs that matter are the ones already ranking.
The workflow looks like this:
- Sync your whole site down to a folder. Every post becomes a markdown file. Frontmatter at the top preserves the title, slug, status, categories, tags, featured-image URL, and your Yoast or Rank Math meta title / description.
- Run one pass across the folder. Hand it to Claude, ChatGPT, Gemini, or any other AI (here’s the Claude workflow) — or run a five-line Python or shell script. Either operates on the folder like any other set of text files.
- Run a dry-run preview in Specter. Before anything touches your live site, you see exactly which posts will be created, updated, or flagged as a conflict.
- Sync back. Push the edits to WordPress over the REST API once the preview looks right. Specter batches and retries in the background — long sweeps don’t time out the way ad-hoc API scripts do.
Because the SEO fields live in the frontmatter, this isn’t limited to body copy. You can bulk-edit titles, meta descriptions, categories, tags, and canonicals the same way you edit prose — they’re just lines in the file.
Concrete bulk SEO jobs worth running
These are the kinds of tasks that are miserable one-by-one and trivial across a folder:
- Generate missing meta descriptions. Find every post with an empty
meta_descriptionin frontmatter and write a ~155-character description from the body. Leave existing ones alone. Works for Yoast and Rank Math since both expose the field via the REST API. - Rewrite SEO titles. Tighten clickbait, front-load keywords, or enforce a length limit across the archive.
- Standardize categories and tags. Merge duplicates (
how-tovshowto), fix casing, and apply a consistent taxonomy. - Insert internal links during a rewrite. Have an AI scan each post for mentions of topics you’ve covered elsewhere and weave in links to those posts.
- Fix heading structure. Enforce one H1 per post, demote stray H2s that should be H3s, and clean up the hierarchy.
- Refresh outdated content. Pull the old-post refresh workflow — sweep posts older than 18 months, update facts, refresh the date.
- Update outdated links. Replace dead URLs or old domains everywhere they appear.
This is the territory people mean by “programmatic SEO” on WordPress — generating or updating metadata and content at scale with a repeatable process rather than hand-editing each page. A folder of markdown is exactly the input a script wants.
Safety: preview the diff before it touches WordPress
Bulk automation is powerful precisely because it’s indiscriminate, which is also the risk. The dry-run preview is the safety net. It’s not a vague “this will sync N posts” — it shows the actual creates, updates, and conflicts so you can read the blast radius of an edit before a single byte reaches your live site.
Conflict prompts are the second layer. If you changed a post inside the WordPress admin and changed it locally, Specter asks you which version wins instead of silently clobbering one. After a 300-post edit, that’s the difference between a clean update and a quiet disaster.
A fair warning: review the diff. The fact that you can rewrite every post in one pass doesn’t mean you should mass-publish whatever an AI produces. Spot-check the output, especially on posts that already get traffic.
The mental model
WordPress stays your publishing home. Your Mac holds the source of truth as markdown. The bulk work — whether it’s an AI rewrite or a five-line script — happens in the folder, where doing something to every post at once is the natural case rather than the impossible one. Specter just keeps the two ends honest so a sweeping SEO edit lands exactly the way the preview said it would.