Ghost SEO: a publishing platform that does most of it for you
Ghost covers most SEO for a publisher without plugins. You still decide titles, tags, routes and what your theme outputs. This guide shows what Ghost handles, what to change, and how to ship a product site on it.
By Théophile Louvart, founder of Porteur · Updated 14 September 2026 · Markdown
What Ghost handles for you
Ghost is built for publishing. Out of the box it takes care of the basics so you can write and ship.
- Meta title and description fields on every post and page
- Automatic canonical URL on each post and page
- An automatic XML sitemap for posts, pages, tags and authors
- Clean URLs without date folders by default
- Article structured data on posts
- Tag pages and author pages that render as archives
- A members and newsletter system that works with your published posts
There is no plugin ecosystem. You extend SEO through your theme and the routes and redirects files. If you are not sure, check the platform's current settings.
Titles, descriptions and canonicals
Set the SEO title and description on every important post and page. Ghost uses those in the head. Keep titles about 60 characters. Write a clear description in 120 to 155 characters.
Open the post or page editor
Click the settings panel. Find the Meta data fields.
Write a unique SEO title
Example: On /guides/getting-started, use “Getting started with YourProduct” rather than “Blog”.
Write a specific meta description
Explain the value. Example: “Set up YourProduct with links, screenshots and a checklist.”
Leave the canonical unless you know you need a custom one
Ghost sets a self-referencing canonical on posts and pages. Set a custom canonical only when you publish a copy of content that lives elsewhere.
Check collection templates in your theme. Index pages like /blog have one title and no meta description field in the admin. You set those in the theme template head.
Ghost sitemap and robots control
Ghost builds your XML sitemap automatically. You do not submit it by hand on the site. You reference it in Search Console and leave it to update as you publish.
Find your sitemap
Visit yourproduct.com/sitemap.xml. You should see a sitemap index for posts, pages, tags and authors.
Submit it to Search Console
Add /sitemap.xml in the Sitemaps report. Watch for errors and coverage over time.
Robots.txt is not an admin setting in Ghost. You add or change it through your theme or routes files. The same goes for redirects. Keep both in your repo so you can version and deploy with the theme.
- robots.txt: add a robots.txt file to your theme assets and map it in routes if needed
- Redirects: upload redirects.json or define in your routes file for 301s and 302s
- Do not block the sitemap or content paths in robots.txt
- If you gate content for members, manage indexing with templates, not robots.txt blocks
If you target AI crawlers, manage that in robots.txt. Update when new bots appear. Test before you deploy a change to avoid blocking Googlebot by mistake.
What your Ghost theme should output
Ghost outputs Article structured data on posts and clean HTML. Beyond that, your theme decides the rest of your SEO features. Treat your theme as your SEO extension layer.
- Sitewide metadata: default title patterns, Open Graph and Twitter tags, social image fallbacks
- Meta robots on archives you do not want indexed
- Breadcrumbs markup and links if your site is multi-level
- Organization and WebSite JSON-LD on the homepage
- FAQ, HowTo or Product JSON-LD on relevant pages
- Pagination markup on archives
- A compact, readable post template with clear H1, intro and subheadings
Build social images per post. If you cannot automate them, at least allow an image upload field and set it in the head. That lifts click-through rate when your posts are shared and can help in Discover-like feeds.
Keep assets lean. Large images, custom fonts and third-party scripts slow Largest Contentful Paint above 2.5 seconds and hurt your scores. Optimise images and preload your main font if you use one. Test with Lighthouse and PageSpeed Insights.
Routes and redirects: shape your site structure
Ghost lets you define routes, collections and taxonomies in routes.yaml. Use this to shape your URL structure, landing pages and which lists appear where. Use redirects.json or the routes file for your 301s.
Define a primary collection
Put your blog under /blog/ so pages like /pricing and /about stay clean. Example: /blog/how-we-built-our-api.
Create custom collections
Group “guides” at /guides/ based on a tag. Control the template and pagination. Example: /guides/getting-started.
Set static routes for product pages
Map /pricing, /features, /security and /status to page templates. Keep these out of blog pagination.
Control tag and author URLs
Set how tag and author archives appear. If you want only core tags indexed, route the rest to a noindex template.
Add redirects for old URLs
If you migrated from another platform, keep a redirect map. Example: /2019/feature-x to /blog/feature-x.
A product site on Ghost: structure that works
You can run a product site on Ghost. Keep the product pages as pages, the blog as a collection and use tags to build helpful hubs. Tie it together with internal links that lead to signup or demo.
- Homepage: a page template with a clear H1, what it does, proof and links to /pricing and /guides
- Pricing: /pricing, a page with a stable URL. Link from the header and from high-traffic posts.
- Features: /features, split into subpages if you need search reach, example: /features/automation
- Guides: a routes collection at /guides/, with a tag like “guides”. Each guide answers one task.
- Changelog: /changelog with short entries. Tag them and link from docs and posts.
- Blog: /blog for news and opinions. Avoid mixing release notes into it if you have a changelog.
- Docs: if you host docs elsewhere, link them. If you keep docs in Ghost, use a routes collection with a docs template.
- Newsletter: /newsletter with an archive and a clear form, powered by members.
Mark up what matters. Add Organization JSON-LD on the homepage, Product or SoftwareApplication on feature pages, and Article on blog posts is already covered. Add FAQ markup where you answer common objections on /pricing or /features.
Link from content to product pages with clear anchors. Example: from /guides/getting-started link “See pricing” to /pricing. Keep internal links shallow so click depth stays low.
Speed and stability on Ghost
Ghost renders pages on the server. Your performance depends on your theme and your host. Aim for Core Web Vitals in the good range: LCP up to 2.5 s, CLS up to 0.1, INP up to 200 ms.
- Use modern image formats and sensible sizes. Compress hero images.
- Limit custom fonts. Self-host and subset if you can. Preload the main weight.
- Delay or remove third-party scripts. Audit what your theme loads.
- Keep templates simple. Overuse of effects adds layout shift.
- Test key pages: homepage, a guide page, a blog post and /pricing. Use PageSpeed Insights and Lighthouse and compare over 28 days in the field reports when they appear.
If a page feels slow to use, check Interaction to Next Paint. Heavy client-side widgets and trackers hurt INP first. Move non-essential scripts off critical pages like /signup and /pricing.
What to check after launch
- Your sitemap is reachable at /sitemap.xml and lists the right sections
- Your titles and meta descriptions show up as expected for key pages
- Tag pages that should not rank are noindexed and out of the sitemap
- Your routes put posts at /blog/ and leave core pages at the root
- Your redirects cover old URLs from any migration
- Your homepage has Organization and WebSite JSON-LD
- Your /pricing and /features pages have the right structured data
- Core Web Vitals stay in the good range for all page types
- Members-only pages render useful teasers and do not leak duplicate content
A fixed site feels simple. /pricing loads fast, has a clear title and shows in search with the right snippet. /blog/ shows useful posts, and /guides/ reads like an index for a topic you own.
Questions
Yes. Ghost ships meta fields, automatic canonicals, an XML sitemap, clean URLs, Article structured data and tag and author pages. You extend beyond that through your theme and routes and redirects files.
There is no robots.txt or redirects panel in the admin. Add robots.txt through your theme or configure it via routes. Manage 301s and 302s with redirects.json or the routes file. Keep them in your theme repo so you can version changes.
Yes. Add a meta robots noindex in the tag template in your theme for tags you do not want indexed. You can also adjust routes so non-core tags do not appear in the sitemap. Keep a small set of curated tags indexable.
It works. Keep product pages as pages at the root, and put your blog in a collection like /blog/. Build guides in a separate collection and use tags as hubs. Add the structured data your theme needs on /pricing and /features.
Posts you email are the same URLs on the web. That does not create duplicate pages. Set members-only posts to show a teaser for discovery. Noindex account and billing pages in your theme so they do not clutter results.
Ghost builds it at /sitemap.xml. Add that path in the Sitemaps report in Search Console. Leave Ghost to update it as you publish or update posts and pages.
Sources
Check my site, free
Paste your Ghost site URL to get a free check that reads your site, the searches around it and rivals on them in about thirty seconds, and shows three findings whole.
- Free check, no card
- Read-only, your own accounts
- Readable by your agent
Read next
- GuideWordPress SEO: what the CMS does, what the plugin does, what you do
- GuideTechnical SEO checklist for a small site
- GuideCanonical tags: what they do and the mistakes that cost rankings
- GuideArticle schema: headline, images, dates and author, done right
- GuideInternal linking for a small site: which pages link to which
- GuideHow to do SEO for a product site, in the order that pays
- GuideFramer SEO: the settings, the staging trap, and what to check
- GuideCalls to action on guides and blog posts: one, in the right place