How to bulk edit Ghost posts for SEO (at scale)
If you have a few dozen Ghost posts, editing them by hand is tedious but doable. If you have hundreds, it’s a wall. You can’t refresh a meta description on every post, standardize tags across the archive, or fix a heading pattern site-wide without opening each post one at a time. That’s the gap this guide closes.
The problem: Ghost has no real bulk content editor
Ghost did add bulk actions to the admin panel a while back. Select multiple posts in the post list, right-click, and you can add or remove tags, change post access, toggle featured status, or unpublish in one go. That’s genuinely useful for housekeeping.
But it stops at metadata and status. There is no native way to bulk-edit the things that actually move SEO: post bodies, titles, meta descriptions (custom excerpts), internal links, or heading structure. For content work, the Ghost editor is still strictly one post at a time. At scale, that workflow is hopeless — a 300-post archive turns a “quick” meta-description sweep into a week of clicking.
The approach: sync down, edit the folder, sync back
The fix is to stop editing inside Ghost’s web admin and bring the whole blog 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 menu-bar app that does two-way sync between Ghost and a local folder. Point it at your site (you’ll need a Ghost Admin API key), pick a folder, and it pulls every post down as a .md file. Crucially, it’s a two-way Ghost-to-markdown sync — it can edit posts you’ve already published, not just create new drafts. That’s the whole point for SEO, where the posts that matter are the ones already ranking.
The workflow looks like this:
- Sync your entire blog down to a folder. Every post becomes a markdown file with its frontmatter preserved — title, tags, status, feature image URL, and custom excerpt all live at the top of the file.
- Run one pass across the whole folder. Use an AI tool (Claude, ChatGPT, Gemini, Copilot — Specter has no built-in AI, you bring your own) or a plain script. Either operates on the folder like any other set of text files.
- Run a dry-run preview in Specter. Before anything touches Ghost, you see exactly which posts will be created, updated, or flagged as a conflict.
- Sync back. Push the edits to Ghost once the preview looks right.
Because the metadata lives in the frontmatter, this isn’t limited to body copy. You can bulk-edit titles, meta descriptions, tags, and feature images 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
excerptin frontmatter and write a ~150-character description from the body. Leave existing ones alone. - Rewrite or optimize titles. Tighten clickbait, front-load keywords, or enforce a length limit across the archive.
- Standardize tags. Merge duplicates (
how-tovshowto), fix casing, and apply a consistent taxonomy. - Add internal links. Have an AI scan each post for mentions of topics you’ve covered elsewhere and insert links to those posts.
- Fix heading structure. Enforce a single H1 per post, demote stray headings, and clean up the hierarchy for both readers and crawlers.
- Update outdated links. Replace dead URLs or old domains everywhere they appear.
This is also the territory people mean by “programmatic SEO” on Ghost — 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 Ghost
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 in the Ghost editor and changed it locally, Specter asks you which version wins instead of silently clobbering one. After a 300-file edit, that’s the difference between a clean update and a quiet disaster.
A fair warning, though: 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, and don’t push slop to readers just because the tooling made it easy.
How this actually gets used
This isn’t a hypothetical workflow. It’s how the maker of Specter, Axel — who’s run SEO sites for two decades — maintains his own revenue-generating Ghost blogs: sync the archive down, run a pass, preview, sync back. The tool exists because that loop needed to be safe enough to trust on live posts.
The mental model to hold onto is simple. Ghost 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.