The dangerous thing about Ghost SEO is how finished it looks. Ghost ships with automatic sitemaps, canonical tags, structured data, and social cards baked into the core, so the first time you open the admin you get the impression the search work is already handled. It isn’t. What Ghost hands you is a clean technical foundation with almost no configuration surface — which means the few knobs that exist matter enormously, and the failure mode is quietly leaving them on default while assuming the platform has your back. This guide covers what Ghost genuinely does for you, the fields you actually have to touch, and the parts no CMS will ever do on your behalf.
What Ghost Gets Right Out of the Box
Ghost’s technical SEO defaults are genuinely good, and this is the honest starting point. Every install automatically generates and updates an XML sitemap at /sitemap.xml, applies canonical tags site-wide, injects JSON-LD structured data into every post and page, and outputs Open Graph and Twitter Card tags plus an RSS feed. There is no plugin to install, no traffic-light widget to satisfy, no Yoast-versus-Rank Math decision to make. Unlike WordPress, where half the SEO stack lives in third-party plugins you have to configure and keep updated, Ghost bakes the plumbing into the platform.
The trade-off is fewer escape hatches. WordPress gives you a hundred ways to override behavior; Ghost gives you a handful, and expects the defaults to be right for most publishers. For a content-first blog that’s usually true. But “good defaults” and “optimized” are different states, and the gap between them is exactly where most Ghost sites leave rankings on the table.
The Metadata Fields You Actually Have to Fill In
Here’s the single highest-leverage habit in SEO for Ghost: stop letting the fallbacks write your metadata. When you leave a post’s meta title and description blank, Ghost falls back to the post title and an auto-truncated excerpt. That fallback is functional, not competitive. The post title you wrote for readers is rarely the same string a searcher types, and a machine-truncated first sentence almost never sells the click the way a deliberate description does.
Open the post settings panel and you’ll find dedicated fields under the meta data and social sections:
- Meta title — write it for the search result, front-loading the query. Ghost lets it differ from the on-page H1.
- Meta description — 150–160 characters that promise a specific payoff, not a summary.
- Open Graph and Twitter title/description/image — separate fields, because what wins a click in a Google result is not what wins a share in a feed.
- Post URL (slug) — editable per post; keep it short and keyword-bearing.
- Excerpt — used in feeds and as a description fallback.
Filling these on every published post is unglamorous and it is where real Ghost CMS SEO is won or lost. The preview built into the settings panel shows exactly how the result and the social card will render, so there’s no excuse for a truncated title or a missing image.
Canonical URLs: Ghost’s Quiet Superpower
Ghost exposes a per-post canonical URL field, and most publishers never notice it. It’s one of the most useful controls in the whole admin. If you republish a piece that first appeared on Medium, LinkedIn, or a client’s site, setting the canonical to the original tells Google which version owns the ranking — you get the syndication reach without competing against yourself for the same query.
It also solves the reverse problem. When a guest post or a syndicated version of your article lives elsewhere, you want that copy pointing its canonical back to your Ghost URL so the authority consolidates on your domain. Ghost handles the everyday canonicals automatically (paginated archives, the site’s own duplicates), but the manual field is the one you reach for whenever the same content exists in two places. Used deliberately, it’s the difference between syndication that builds your site and syndication that cannibalizes it.
URL Structure and routes.yaml
By default Ghost publishes posts at /{slug}/ — flat, clean, and exactly what you want. There’s no dated /2026/07/ cruft and no category folder bloating the path. Trailing slashes are mandatory and non-removable, which is fine as long as you’re consistent and never link to the slash-less version.
Where it gets powerful is routes.yaml, Ghost’s routing configuration file. It lets you organize posts into collections with their own permalink structures — for example putting articles under /blog/ and a separate content type under /guides/, or renaming the tag prefix from /tag/ to /topic/. Two cautions that trip people up: a post can live in only one collection, so a URL can’t exist in two places at once; and the router has no awareness of your existing slugs, so you have to manage conflicts yourself. The real SEO risk is changing routing on an established site — every URL you move needs a 301 redirect, and Ghost’s redirects file (redirects.yaml) is where you set those. Decide your structure early; migrating it later is a redirect project, not a settings tweak.
Structured Data and Social Cards
Ghost’s automatic JSON-LD covers the standard Article and publisher schema, which is enough for most blogs to earn rich-result eligibility without lifting a finger. What it doesn’t do is generate FAQ, HowTo, Product, or Review schema tailored to a specific page — and those are the markup types that win expanded search features. If you want them, the path is code injection (covered below), pasting a hand-built JSON-LD block into the post’s header.
On the social side, the OG and Twitter tags mean your links render with a title, description, and feature image wherever they’re shared. The one thing worth checking: your feature image dimensions. A card image that’s too small or the wrong aspect ratio gets cropped awkwardly or dropped entirely, and Ghost won’t warn you.
Speed: Ghost’s Real SEO Advantage
This is where Ghost genuinely outperforms most of its competition. It’s a server-side-rendered Node.js application with Handlebars themes and very little mandatory client-side JavaScript, so pages arrive fast and stay light — which flows straight into Core Web Vitals. There’s no plugin sprawl adding render-blocking scripts, no page builder injecting kilobytes of CSS you don’t use. Ghost(Pro) hosting adds a CDN and automatic image resizing on top.
Fast defaults don’t make you immune. Heavy feature images shipped at full resolution, embedded third-party widgets, and a bloated custom theme can still drag your numbers down. Good Ghost blog SEO means compressing images before upload, keeping embeds sparse, and testing real pages in PageSpeed Insights rather than trusting the platform’s reputation. The foundation is fast; it’s still possible to build something slow on top of it.
The Members Paywall Problem
Ghost’s native membership and paywall features are a big reason publishers choose it — and a genuine SEO gotcha nobody warns you about. When you gate a post behind a members-only or paid tier, Googlebot sees the same thing a logged-out visitor sees: the public teaser, not the full article. If your teaser is two thin paragraphs, that’s the entire indexable page, and it will struggle to rank for anything competitive.
The fix is to use Ghost’s public preview divider deliberately. Put enough genuinely useful, keyword-relevant content above the paywall that the indexable portion can stand on its own and rank, then gate the depth that justifies a subscription. Treat the free preview as a real page with a job to do, not a locked door. Publishers who gate aggressively and then wonder why their organic traffic is flat are almost always indexing thin teasers.
Code Injection: Where the Missing Plugins Go
Because Ghost has no plugin marketplace, its escape hatch is code injection — a header and footer field available site-wide (Settings) and per-post. This is where you paste analytics tags, verification snippets, custom JSON-LD for FAQ or Product schema, or a small script a specific page needs. It’s more flexible than a plugin in that you can put anything there, and less forgiving in that there’s no interface guarding you from mistakes.
Keep it disciplined. Every script in the site-wide header runs on every page and can cost you the speed advantage that makes Ghost worth using. Put page-specific markup in that page’s injection, not the global one, and audit periodically — orphaned tags from tools you no longer use are a common, silent source of bloat.
What Ghost Won’t Do For You
Here’s the part that no amount of platform polish changes: Ghost is a publishing engine, not a strategy. It will render your metadata, structure your URLs, and serve pages fast — but it has no idea what your audience searches, which keywords are realistically winnable, what your competitors already rank for, or whether the article you just wrote actually answers the query better than the page currently sitting at position eight. Those are the decisions that determine whether you rank, and the hard truth of Ghost SEO is that they live entirely outside the CMS.
This is the honest place SEO Rocket fits. It’s a platform-agnostic SEO layer that sits alongside Ghost, not a replacement for it: AI keyword research on real Ahrefs data to find the terms worth targeting, competitor gap analysis to see what’s ranking that you’re missing, and a real-crawler site audit that will actually catch a broken canonical, an orphaned page, or a thin members teaser Ghost’s clean-looking admin hides. It won’t build your theme — it’s the research and validation layer the CMS was never meant to be.
A Practical Ghost SEO Workflow
Put the pieces in order and the routine is short:
- Set structure once — confirm your
routes.yamlcollections and permalinks before you have a hundred posts to redirect. - Research before you write — target keywords by real difficulty and volume, not vibes, and check what the weakest page-one result is missing.
- Fill every metadata field — meta title, description, social image, slug — on every post. Never ship on the fallbacks.
- Guard the paywall preview — make sure gated posts expose enough indexable substance to rank.
- Add schema where it helps — hand-built FAQ or Product JSON-LD via code injection for pages that qualify.
- Audit and track — crawl the site for technical issues and monitor rankings as a trend, not a spot check.
SEO Rocket runs the research, audit, and rank-tracking half of that loop as one workflow — with a client dashboard, roughly $50/month and a free tier — so the strategy keeps pace with the publishing. Ghost handles the rendering beautifully; the thinking is still yours to do, ideally with data instead of guesses. It’s the same playbook proven across 1,000,000+ ranking pages, applied to a platform that finally gets out of the way.
Frequently Asked Questions
Is Ghost good for SEO?
Yes — arguably better than most platforms on the technical side. Automatic sitemaps, canonical tags, structured data, fast server-rendered pages, and minimal JavaScript give you a strong foundation with almost no setup. The catch is that Ghost’s defaults are a floor, not a ceiling: you still have to fill in metadata, guard your paywall previews, and do the keyword and content work the CMS can’t do for you.
Do I need an SEO plugin for Ghost?
No, and there isn’t one to install — Ghost has no plugin marketplace. The features a WordPress user would reach Yoast or Rank Math for (sitemaps, meta fields, canonicals, social cards, schema) are built into Ghost’s core. For custom markup like FAQ schema, you use code injection instead of a plugin.
How do I change URLs in Ghost without hurting SEO?
Edit individual slugs in the post settings, or restructure site-wide with routes.yaml. Whenever a live URL changes, add a matching 301 in Ghost’s redirects.yaml so the old address forwards to the new one and preserves its ranking. Decide your structure early — remapping an established site is a redirect project, not a quick edit.