Ghost SEO Without Plugins: A Config-File Approach
Ghost made a bet most platforms didn't: instead of a plugin ecosystem, ship the essentials in core and expose the rest through config files. So there's no SEO plugin for Ghost — and no need for one. Ghost SEO fundamentals are already in the box: per-post meta title and description fields, automatic canonical tags, a native sitemap at /sitemap.xml, structured data output, and some of the leanest markup of any CMS. What's left for you splits into two buckets: fields to fill in the editor, and files like routes.yaml and redirects.json to edit when you need control the UI doesn't offer.
What Ghost's core already covers
Open any post and expand the settings sidebar: you'll find Meta data (search title and description with live preview), separate Twitter card and Facebook card overrides, and a Canonical URL field — handy when you republish something that first appeared elsewhere. Ghost also emits Article schema with author and publisher data automatically, plus Organization markup from your site settings. The XML sitemap is generated and maintained without any toggle, split into sub-sitemaps for posts, pages, authors, and tags.
Less obvious: tags are first-class SEO objects. Open any tag under Tags in the admin and it has its own meta title, meta description, and social card fields — so a well-curated tag archive can be a genuine landing page rather than an auto-generated list. Authors get profile pages with the same treatment. And one gotcha that catches people during builds: Settings → General has a "Make this site private" toggle that password-protects the site and noindexes everything. Great for staging, catastrophic if it's still on at launch — it's Ghost's version of the forgotten WordPress indexing checkbox.
On speed, there's little to optimize because there's little to slow down. Ghost is a Node.js app serving minimal templates; official themes like Casper ship a fraction of the JavaScript a typical WordPress theme drags in. Images get responsive srcset variants generated automatically when themes use Ghost's image helpers, so a contributor uploading a 5MB photo doesn't torpedo mobile load times. Ghost(Pro) hosting adds a CDN on top. Most Ghost sites pass Core Web Vitals without anyone trying — which, if you're coming from a plugin-heavy platform, feels like cheating.
Redirects live in a file, and that's fine
Here's where Ghost diverges from everything else: there's no redirect manager in the admin. Redirects are defined in redirects.yaml (or the older redirects.json), uploaded under Settings → Labs → Redirects. The format is simple — pairs of from and to patterns with full regex support, and a 301 permanent flag per rule:
301: /old-post/: /new-post/— permanent, passes authority. Use302only for genuinely temporary moves.
Regex support actually makes this more powerful than most GUI redirect managers — one rule can migrate an entire date-based URL structure. If you're fuzzy on why the 301/302 distinction matters, our 301 status code guide covers it. Download the current file from the same Labs screen before editing; Ghost replaces the whole file on upload.
routes.yaml: URL structure as configuration
Ghost's URL structure is controlled by routes.yaml, also managed under Settings → Labs. Out of the box posts live at /slug/, which is a solid default. With routes you can add date-based permalinks, create separate content channels (say, /tutorials/ pulling only posts tagged tutorial, each channel with its own RSS), or build custom collection structures. Two cautions from experience: changing permalink structure on a live site requires a matching redirects file for every existing URL, and a malformed routes.yaml will take your site's routing down until you re-upload a valid one. Keep a known-good copy locally.
The honest gaps in Ghost SEO
- No plugin safety net. Anything core doesn't do — FAQ schema, review markup, granular noindex rules per tag archive — you implement in theme templates or code injection (
Settings → Code injection, site-wide or per-post). That's Handlebars templating and hand-written JSON-LD, not a settings screen. - Tag archives can go thin. Every tag gets a public archive page. A loose tagging habit produces dozens of near-empty pages; keep tags deliberate, or noindex thin archives via theme edits. Internal tags (prefixed with
#) are the exception — they're invisible to visitors and exist purely for routing and theme logic. - It's a publishing tool, full stop. No e-commerce catalog, no complex page hierarchies, no custom content types. Membership and newsletter features are first-class; everything else isn't.
- Self-hosting is on you. Ghost(Pro) handles updates and infrastructure; a $5 VPS install means you own Node upgrades, MySQL, and SSL renewal — and downtime is an SEO problem too.
Should your publication run on Ghost?
If you're a writer, newsletter operator, or content-first business publishing articles, Ghost is arguably the least-friction path to a technically clean site — faster out of the box than a tuned WordPress build, with none of the plugin maintenance. If your roadmap includes a store, a forum, or landing-page sprawl, you'll outgrow it.
A note on the code injection escape hatch, since it carries more weight here than elsewhere: Settings → Code injection accepts site-wide header and footer snippets, and each post has its own injection fields too. That's where FAQ schema for a specific article goes, where analytics lives, and where any verification meta tag lands. It's a perfectly good system — just document what you put there, because six months later nobody remembers why there's a mystery script tag in the site header.
The config-file model does have one operational risk: silent mistakes. A typo'd redirect rule or an overzealous route change won't throw a visible error on the homepage. Make a habit of running a site audit after any Labs upload — a crawler will spot the broken internal links and redirect loops your YAML just created faster than your readers will.
Frequently Asked Questions
Does Ghost need an SEO plugin?
No, and there isn't one to install — Ghost has no plugin ecosystem. Meta titles and descriptions, canonical URLs, Twitter and Facebook card fields, Article schema, and an XML sitemap are all built into core. Anything beyond that is handled in theme templates or code injection.
How do redirects work in Ghost?
Through a config file rather than an admin UI. You define rules in redirects.yaml (or the legacy redirects.json) and upload it under Settings → Labs → Redirects. Rules support full regex, so one pattern can handle an entire URL structure migration. Always download and back up the current file before uploading a new one.
Is Ghost faster than WordPress for SEO?
Out of the box, almost always. Ghost is a lean Node.js app with minimal theme JavaScript, so most Ghost sites pass Core Web Vitals with no tuning. A carefully optimized WordPress build can match it, but that takes caching plugins and theme discipline that Ghost simply doesn't require.
Try WebsiteChecker.Tech Free
Run a free technical SEO audit on any website. Get a client-ready report in minutes.
Start Free Scan