Guide Ghost SEO

How SEO fonctionne on Ghost CMS — the traditional-vs-headless fork, the SEO Ghost builds in automatically, ce que it leaves to vous, gated-content limites, and Ghost Pro vs self-hosted.

Première publication : 27 juin 2026 · Dernière mise à jour : 3 août 2026 · Advanced
Langues

Ghost SEO splits in two selon how vous run it. In traditional (Handlebars) mode, Ghost handles core SEO technique automatically — sitemap, balise canonicals, meta tags, Ouvrir Graph, Twitter Cards, and Article JSON-LD — with zero plugins, and it's fast by par défaut. Run Ghost headless (Content API seulement) and tout of que disappears; the frontend has to rebuild every piece. Soit façon, Ghost has gaps it jamais fills (breadcrumb/FAQ schema, hreflang, per-post noindex toggle, IndexNow), and gated members-only content can't be indexé parce que it's blocked server-side. The unique biggest mistake is treating traditional and headless Ghost as the même SEO problem — ils aren't.

TL;DR — Ghost SEO forks on un decision: traditional (Handlebars) mode vs. headless (Content API). Traditional Ghost ships core SEO technique automatically — sitemap, self-referencing + custom canonicals, meta tags, OG/Twitter cards, and Article JSON-LD — with aucun plugin, and it’s fast by par défaut. Go headless and tout of que disappears; the frontend has to rebuild every piece, and Ghost’s speed advantage evaporates parce que the framework now owns performances. Les deux modes share gaps Ghost jamais fills (breadcrumb/FAQ/Product schema, hreflang, per-post noindex, IndexNow, a redirection UI), and gated members-only content is blocked server-side so it can’t be indexé. Don’t conflate the two modes — they’re différent problems.

The fork in the road

Ghost is a Node.js (Express) CMS with a decoupled core: an API plus an optional Handlebars frontend. Que architecture is the whole SEO story.

  • Traditional mode — Ghost sert HTML via its Handlebars themes. Every built-in SEO fonctionnalité s’applique, generated automatically via the theme’s {{ghost_head}} helper.
  • Headless mode — Ghost is “a complet CMS headless qui is complètement agnostic of quelconque particulier front fin or static site framework.” Vous requête le contenu API or Admin API from a separate frontend (Suivant.js, Astro, Nuxt, SvelteKit), and SEO becomes 100% que frontend’s responsibility.

The choice of mode is the unique biggest determinant of Ghost’s SEO footprint. Everything ci-dessous is organized autour it. (Pour the framework-agnostic version of the headless side, voir SEO pour a CMS headless.)

Ce que traditional Ghost handles automatically

In traditional mode Ghost fait the core SEO technique with zero configuration:

  • Sitemap. Auto-generated at /sitemap.xml, mis à jour on publish/unpublish, covering posts, pages, tags, and authors. “Ghost automatically creates and updates an XML sitemap pour votre website.” Evidence for this claim Ghost automatically creates and updates an XML sitemap. Scope: Traditional Ghost publication output. Confidence: high · Verified: Ghost: SEO
  • Balise canonicals. A self-referencing rel=canonical on every post and page — “Ghost adds balise canonicals à travers votre site to tell moteur de recherches qui version of une page ils devrait considérer the ‘official’ un.” Since March 2019 vous pouvez aussi définir a custom canonical per post in the editor’s metadata panel, or via the Admin API canonical_url field — construit pour “guest posts, multiple versions of the même page or quand vous devez curate a liste of liens to external sources.” Evidence for this claim Ghost outputs canonical tags and supports a custom canonical URL for a post or page. Scope: Traditional Ghost and the post/page metadata configuration. Confidence: high · Verified: Ghost: Canonical URLs
  • Meta title/description. Custom fields que fall back to the post title and excerpt quand left blank.
  • Ouvrir Graph + Twitter Cards. Auto-generated from post metadata and the fonctionnalité image.
  • Données structurées (JSON-LD). “Ghost automatically inclut données structurées in tout posts and pages” — Article schema with publisher, author, headline, datePublished, dateModified, image, and keywords.
  • Clean URLs + custom routing. Slug-based URLs by par défaut, entièrement customizable via routes.yaml.
  • robots.txt. A par défaut fichier que disallows the /ghost/ admin chemin and permet everything sinon.

Ce is genuinely plus que a stock WordPress install donne vous — Ghost listes “XML sitemaps, balise canonicals, optimised URLs, microformats, Facebook Ouvrir Graph tags, prise en charge pour Twitter cards and clean semantic markup” as built-in, aucun plugin requis.

Ce que Ghost jamais fait — in soit mode

Ghost covers the core and arrête là. It fait pas generate:

  • Avancé schema — breadcrumb, FAQ, HowTo, Product, Recipe, or Video markup. Article schema seulement. Anything sinon is manual code injection or theme fonctionner.
  • Hreflang / international SEO — aucun native prise en charge. Multi-language Ghost nécessite a third-party service (Weglot, ConveyThis) or theme-level implementation, and hreflang n’est pasoriously error-prone.
  • A per-post noindex toggle in the UI — vous besoin code injection.
  • Keyword optimization guidance. Ce is deliberate. Asked à propos de ajout Yoast-style outils, the Ghost team argued que “un of the downsides of en utilisant Yoast’s KW optimisation suggestions is que is encourages us to écrire meta données pour machines au lieu de humans,” and on the broader advanced-SEO wishlist (breadcrumb schema, hreflang, noindex contrôle) said flatly: “Ce isn’t on our radar at the moment.”
  • IndexNow — aucun native prise en charge; wire it via a custom webhook on publish si vous vouloir Bing/others notified instantly.
  • A redirect-management UI — redirections live in redirects.yaml (self-hosted) or Ghost Pro’s redirection manager; there’s aucun plugin ecosystem to lean on.

Headless Ghost: the SEO vous have to rebuild

Go headless and Ghost arrête being an SEO system — it’s a content API. Everything in the “handles automatically” liste ci-dessus is now the frontend’s job:

  • Sitemap — generated at construire temps or by a serverless function hitting the Content API.
  • Balise canonicals — injected by the frontend framework, ideally absolute URLs from un SITE_URL.
  • Meta + OG/Twitter tags — rendered via the framework’s head management (Suivant.js generateMetadata, Astro’s <head>, Nuxt useSeoMeta).
  • Données structurées (JSON-LD) — now entirely custom.
  • robots.txt — served by the frontend.
  • 301/302 redirections — handled in the frontend or the CDN couche.
  • Core Web Vitals — Ghost’s speed advantage disappears; the framework and rendering mode now dominate performances.

The un chose que carries over: le contenu API encore renvoie the editorial metadata vous typed into Ghost’s editor — meta_title, meta_description, og_title, og_description, og_image, twitter_title, twitter_description, twitter_image, and canonical_url. The données is disponible; rendering it is on vous. Ce is the headless-CMS SEO problem in general, and it’s really a JavaScript SEO problem — si votre frontend defaults to rendu côté client, Googlebot has to queue lune page pour a plus tard render wave. AI-crawler rendering varies by provider, so render on le serveur or at construire temps (SSR/SSG) to maximize coverage.

Gated content and ce que Google peut voir

Ghost supports three visibility levels: public, members-free (email requis), and members-paid (subscription). The crucial point pour le SEO is que gated content is blocked server-side, pas by sniffing the utilisateur agent. As Ghost’s propre team put it: “Google can’t explorer protected content on votre page, parce que that’s seulement ever disponible to logged in members.” Google obtient exactly the même restricted view a logged-out reader obtient.

Two realistic strategies:

  1. Public preview. Montrer an intro / premier few paragraphs publicly and gate the rest. Ghost has a native public-preview fonctionnalité pour ce — the public portion fait the ranking fonctionner.
  2. Metered accès. Third-party implementations autoriser N free articles avant requiring registration.

Si vous do gate content, Google supports paywalled markup — NewsArticle with isAccessibleForFree: false and a hasPart/cssSelector describing the gated region — but Ghost doesn’t generate ce automatically; it’s manual code injection. And the hard rule soit façon: don’t cloak. Showing Googlebot the complet article pendant que readers hit a paywall violates Google’s guidelines and risks a manual action. The honest framing is que public content ranks and gated content converts — don’t expect locked posts to bring search trafic.

Ghost Pro vs self-hosted

The SEO software is identical on les deux — même Ghost, même fonctionnalités. The difference is infrastructure contrôler:

  • Ghost Pro — managed hosting with a built-in CDN, automatic SSL, and backups. The CDN helps TTFB and Core Web Vitals pour distributed audiences. The catch: vous pouvez’t directement override robots.txt — vous have to contact prise en charge. That’s a réel constraint pour headless or private-mode setups.
  • Self-hosted — complet contrôler of le serveur, headers, mise en cache, robots.txt, server-level redirections, and votre propre CDN (Cloudflare is the courant pick). Plus flexibility pour avancé SEO technique, plus to manage.

Neither is “better for SEO” inherently — Ghost Pro buys vous a CDN, self-hosting buys vous contrôler.

Courant pitfalls

  • Thin tag/author archives. Ghost auto-creates /tag/slug/ and /author/slug/ pages. Granular tags or single-post authors generate thin pages — considérer noindexing the low-value ones.
  • Preview-URL indexation. Older Ghost versions pourrait leak draft preview URLs to Googlebot via third-party scripts chargement on preview pages (since fixed in core — voir GitHub problème #9749). Vérifier preview pages aren’t indexé on older installs.
  • /ghost/ accidentally exposed. Confirmer the par défaut robots.txt disallow on the admin chemin hasn’t been overridden.
  • Contenu dupliqué from custom collections. routes.yaml collections peut créer alternate URL paths pour the même content. Ghost canonicalizes its par défaut structure; custom routing peut créer duplicates si vous don’t manage canonicals explicitly.
  • Manquant custom canonical on syndicated/guest posts. Si vous republish content from elsewhere, définir canonical_url per post (editor or API) to point at the original — the fonctionnalité seulement exists since March 2019.
  • Headless pre-launch indexation. A public headless frontend deployed avant launch sans its propre robots.txt peut obtenir indexé prematurely. Ghost’s propre “private” mode sends Disallow: /, but que protects the Ghost instance, pas votre separate frontend.
Evidence for this claim Ghost outputs canonical tags and supports a custom canonical URL for a post or page. Scope: Traditional Ghost and the post/page metadata configuration. Confidence: high · Verified: Ghost: Canonical URLs

Ghost vs WordPress, briefly

Ghost donne vous plus SEO out of the box with zero configuration and is faster by par défaut (Ghost’s propre benchmark claims it’s “up to 1,900% faster than WordPress” — treat que as a vendor figure, but the direction is réel: minimal JS, strong CWV baseline). WordPress’s ceiling is plus élevé with the correct plugins — schema, redirection managers, SEO programmatique — but its plugin-heavy norm souvent hurts performances. Ghost suits publishers who vouloir to écrire sans SEO-plugin overhead; WordPress suits complex sites needing avancé schema or grand integrations. “Faster, therefore ranks meilleur” is an oversimplification — Core Web Vitals is un factor among nombreux, and headless Ghost’s speed dépend entirely on the frontend, pas Ghost.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.