Guide
Add internal links across your whole Ghost blog at once
Internal links are some of the cheapest SEO you can do, and Ghost makes them slow. The editor does have a tidy way to add one: highlight text, hit cmd+k or type @, and search your published posts to drop a link in. That’s fine for a sentence. It is miserable for a hundred posts. There’s no native way to scan your whole archive, find every place a new article should point back to an older one, fix the links that went stale when you changed a slug, or standardize the anchor text you’ve been writing three different ways. Ghost links posts one at a time, by hand, inside a single open editor — and that’s the whole story.
So when your blog grows past a few dozen posts, internal linking quietly stops happening. You publish something new, you mean to go back and link the five related posts to it, and you never do. The links you do have slowly rot as URLs change. The work isn’t hard; it’s just impossible to do in bulk where your content actually lives.
The fix is to bring the whole blog somewhere a recipe can see all of it at once: the Specter webapp.
Connect the whole blog first
Specter connects to your Ghost site in the browser — paste your details (you’ll want a Ghost Admin API key) and every post lands in one workspace as clean, editable content with its title, tags, status, feature image, and excerpt intact. There’s nothing to install. Because the sync runs both ways, this isn’t limited to new drafts; it edits posts you’ve already published, which is exactly where your internal links live and exactly where they’ve gone stale.
Once your whole archive is in one workspace, every link in it is something the AI can read and rewrite — with the entire site as context. That’s the unlock the Ghost editor can never offer, because the editor only ever shows you one post.
Let an AI recipe suggest the links
Run a recipe across the connected archive. Specter isn’t an AI itself; it’s the control layer that runs the model over your whole site and shows you every change before it ships. Because the recipe sees every page that actually exists, it can do the things good internal linking requires:
- Read every post, and where one naturally references a topic covered in another, add a contextual link with sensible anchor text.
- Find broken or outdated internal links — old slugs, a domain you migrated away from, paths that 404 — and fix or flag them everywhere they appear.
- Standardize anchor text so the same destination isn’t linked as “our pricing,” “see pricing,” and “click here” across the archive.
Browsing your content and reviewing the result are free; only the AI run spends credits, and your workspace opens with 500 free — enough to see exactly what a link sweep does across your blog.
You review the suggestions — always
Here’s the catch. AI is good at spotting that two posts are related and proposing a link between them. It is not reliable at deciding whether that link actually helps the reader, whether the anchor text is right, or whether it just stuffed a paragraph with five links because it could. Treat what it produces as suggestions, not decisions. Read the diff, keep the links that genuinely connect related ideas, cut the ones that are reaching, and fix anchor text that reads like a robot wrote it. Over-linking is a real way to make a post worse, and the tooling won’t stop you — you have to.
This is the same human-in-the-loop discipline that makes the whole AI-on-Ghost workflow safe. Nothing reaches your live blog until you’ve looked at it.
Review the diff, then publish back
When the recipe finishes, Specter shows you the result as a diff before anything touches Ghost. It’s not a vague “this will update N posts” — it’s the actual creates, updates, and conflicts, so you can read the blast radius of a link sweep across your whole archive before a single byte goes live. After an edit that touched fifty posts, that diff is the difference between a confident publish and a guess. Reviewing it is free.
Then publish back. If one of those posts changed in the Ghost editor since the last sync, Specter prompts you about the conflict instead of silently overwriting either version, and every publish keeps a snapshot behind it. Approve, and your internal links are live across the blog.
The mental model is the same one that runs through the rest of this work, including bulk SEO edits: Ghost stays your publishing home, the webapp gives you the whole archive in one reviewable place, and the bulk work happens there where doing something to every post at once is the natural case rather than the impossible one. Internal linking, finally, is one of those things. Subscribe now →
Prefer to run this on your own machine, with your posts as .md files and your own AI or scripts in the loop? The desktop and open-source edition does the same sweep locally.