Ghost blog SEO publishing with Admin API review gates

Ghost already provides a focused editorial and publishing surface. The adapter signs a short-lived Admin API token, looks up a post by slug, and sends reviewed HTML, excerpt, SEO metadata, tags, and feature image through Ghost's supported post endpoints.

Best for: Founder blogs, publications, and SaaS sites whose canonical content already lives in Ghost and should keep using the active Ghost theme and membership stack.

Support status: stable
Publisher: ghost

How the connection works

Authentication

A Ghost Admin API key in id:secret format and the Admin URL. A five-minute JWT is created inside the server-side publishing process for each run.

Server-side variables

  • SEO_BLOG_PUBLISH_TOKEN
  • SEO_BLOG_SITE_SLUG
  • GHOST_ADMIN_URL
  • GHOST_ADMIN_API_KEY
  • GHOST_API_VERSION
  • SEO_BLOG_SITE_ORIGIN

Publishing sequence

01

Create a short-lived signed token for the Ghost Admin API.

02

Look up the existing post using its exact slug and request HTML format.

03

Create a new post or update the existing revision with reviewed fields.

04

Use Ghost's returned post URL as the final publishing result.

No-write payload and mapping preview

SEO_BLOG_PUBLISH_TOKEN='<tenant-token>' \
SEO_BLOG_SITE_SLUG='<slug>' \
GHOST_ADMIN_URL='<ghost-admin-url>' \
GHOST_ADMIN_API_KEY='<ghost-admin-api-key>' \
GHOST_API_VERSION='<ghost-api-version>' \
SEO_BLOG_SITE_ORIGIN='<origin>' \
npx --yes @wotaso/seo-blog-admin-cli publish-cms --cms ghost --site-slug '<slug>' --site-origin '<origin>' --dry-run

For a currently due approved post, --dry-run builds the destination payload without writing to the provider. It does not contact the provider or prove credentials, remote schema compatibility, deployment, or a live page; when no post is due, provider inputs are not exercised.

Scheduled runner health heartbeat

SEO_BLOG_PUBLISH_TOKEN='<tenant-token>' \
SEO_BLOG_SITE_SLUG='<slug>' \
GHOST_ADMIN_URL='<ghost-admin-url>' \
GHOST_ADMIN_API_KEY='<ghost-admin-api-key>' \
GHOST_API_VERSION='<ghost-api-version>' \
SEO_BLOG_SITE_ORIGIN='<origin>' \
SEO_BLOG_SCHEDULED='true' \
npx --yes @wotaso/seo-blog-admin-cli health --config seo-blog.config.json --mode cms --site-slug '<slug>' --site-origin '<origin>'

Run this from the real scheduled runner after seo-blog.config.json contains the selected connector configuration and the listed secrets are loaded. It reports configuration readiness, not a live article. The dashboard expires readiness at the returned deadline, with a 36-hour fallback when no deadline is available.

Fields and data model

  • HTML is submitted through Ghost's source=html flow
  • Meta title, meta description, tags, and feature image are mapped
  • Existing posts include updated_at for safe revision updates

Canonical and route

Ghost and the active theme own the post route, canonical tag, sitemap, structured data, rendering, and public URL. The adapter records the URL returned by Ghost after saving.

Known limits

  • The Admin API key must be the id:secret value, not a Content API key.
  • Custom theme fields outside the post model need a tenant-specific extension.
  • Ghost API version changes should be tested before changing the configured Accept-Version.

Recovery

  • Use draft mode and inspect the Ghost preview before first publication.
  • For authentication failures, verify key format, server time, Admin URL, and API version.
  • On revision conflicts, refetch the post so the next update carries its latest updated_at value.

Integration questions

Where are credentials stored?

The Ghost credentials stay in CI or another server-side secret environment.

Does SEODrafts own the canonical URL?

No. The destination website owns its route, canonical tag, sitemap, rendering, and analytics.

Can the integration be tested before publishing?

Use the no-write payload preview to inspect local mapping, then separately test credentials and the first destination draft before a live run.

Keep the website your team already owns.

Review the opportunity and draft in SEODrafts, then publish approved work through Ghost.

Add my website