Guide

How to bulk edit Ghost posts for SEO (at scale)

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

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: connect, run a recipe, review, publish

The fix is to stop editing inside Ghost’s web admin and bring the whole blog somewhere bulk edits are natural: the Specter webapp. You connect your Ghost site in the browser, and every post lands in your workspace as clean, structured content — title, tags, status, feature image, and custom excerpt all there, the body as plain prose. Nothing to install. Subscribe now and your workspace opens with 500 free credits.

The reason this works for SEO specifically: Specter reads your whole archive at once, and it edits posts you’ve already published — not just new drafts. The posts that matter for SEO are the ones already ranking, and that’s exactly what the workspace gives the AI to work with.

The workflow looks like this:

  1. Connect your Ghost blog in the browser. Every post becomes editable content with its metadata intact — title, tags, status, feature image, and custom excerpt all in one place. Browsing it is free.
  2. Run one AI recipe across the whole archive. “Generate the missing meta descriptions,” “front-load keywords in titles,” “fix the orphaned internal links” — the model runs with your entire site as context, not one post at a time. Only AI runs spend credits.
  3. Review the changes as a diff. Before anything touches Ghost, you see exactly which posts will be created, updated, or flagged as a conflict — reviewing is free.
  4. Publish back. Approve the posts that are right; send the rest back.

Because the metadata travels with each post, this isn’t limited to body copy. You can bulk-edit titles, meta descriptions, tags, and feature images the same way you’d revise prose.

Concrete bulk SEO jobs worth running

These are the kinds of tasks that are miserable one-by-one and trivial as a recipe across the whole archive:

  • Generate missing meta descriptions. Find every post with an empty excerpt 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-to vs howto), fix casing, and apply a consistent taxonomy.
  • Add internal links. Have the recipe scan every post for mentions of topics you’ve covered elsewhere and insert links to those posts — with the whole site as context, it can see every page that actually exists.
  • 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 — updating metadata and content at scale with a repeatable process rather than hand-editing each page. Running it as a reviewed recipe over the whole archive is exactly that, minus the brittle scripts.

Safety: review the diff before it touches Ghost

Bulk automation is powerful precisely because it’s indiscriminate, which is also the risk. The dry-run diff is the safety net. It’s not a vague “this will update 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. Browsing and reviewing cost nothing; only the AI run itself spends credits, so you never pay to look.

Conflict prompts are the second layer. If a post changed in the Ghost editor and in your workspace since the last sync, Specter asks you which version wins instead of silently clobbering one. Every publish keeps a snapshot behind it, so reverting is a decision, not a recovery project.

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: connect the archive, run a recipe, review, publish 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. The webapp gives you the whole archive in one reviewable place. The bulk work happens there, where doing something to every post at once is the natural case rather than the impossible one — and the diff tells you exactly what’s about to land before you commit.


Prefer to run this on your own machine, with your posts as plain .md files on disk and a script or your own AI in the loop? The desktop and open-source edition does the same sync, preview, and conflict handling locally.