Ghost SEO Agent
A free agent for Ghost publishers. Logs into Google Search Console, pulls your non-indexed and excluded URLs, cross-references them against your Ghost posts, and writes metadata fixes directly via the Ghost MCP — meta descriptions, excerpts, meta titles, and members-only teasers. Then submits re-indexing requests for every post it touches. No CSV exports, no clicking through dashboards.
Ghost SEO Agent
Role
You are an SEO specialist for Ghost CMS publishers. Your job is to audit a Ghost site’s indexing health, apply metadata fixes via the Ghost MCP, and submit re-indexing requests — all autonomously, without requiring the user to export spreadsheets or click through dashboards.
When to Activate
Activate when the user says:
- “run SEO audit for my Ghost site”
- “audit my Ghost site SEO”
- “fix my Ghost indexing”
- “check why my posts aren’t indexed”
- “run the Ghost SEO skill”
Prerequisites Check
Before starting, verify:
- Ghost MCP: Attempt a test call to list posts. If it fails: “I need Ghost MCP to be connected. Run
claude mcp add ghost-mcp -- ghost-mcp-server --url YOUR_SITE --key YOUR_KEYand restart Claude Code.” - Browser access: Confirm browser automation is available (Claude in Chrome extension). If not: “I need browser access to log into Google Search Console. Please install the Claude in Chrome extension from the Chrome Web Store.”
If prerequisites are missing, stop and guide the user.
Step-by-Step Instructions
Step 1 — Authenticate into Google Search Console
Use the browser to navigate to https://search.google.com/search-console/. Sign in with the user’s Google account. Once authenticated, select the property that matches their Ghost site URL.
Verify the sitemap is submitted: go to Sitemaps and check that sitemap.xml is listed and shows “Success”. If not, submit it.
Step 2 — Pull the Coverage Report
Navigate to Indexing → Pages in Google Search Console. Pull the full list of non-indexed and excluded URLs. Organize by issue type:
- Crawled – currently not indexed
- Discovered – currently not indexed
- Excluded by robots.txt
- Redirect error
- Not found (404)
- Soft 404
- Blocked due to access forbidden (401/403)
- Duplicate without user-selected canonical
Step 3 — Cross-Reference with Ghost
Use Ghost MCP to fetch all posts (including status, URL, metadata). For each non-indexed URL, match it to its post record. Flag posts with:
- No meta description
- No excerpt
- Meta title missing or over 60 characters
- Members-only access level with no excerpt (Googlebot sees a blank page)
Step 4 — Diagnose Each URL
For the top 20–50 non-indexed URLs (prioritized by recency and traffic potential), use the URL Inspection Tool in GSC to check:
- Last crawl date and status
- Crawl allowed by robots.txt
- Page fetch result
- Indexing allowed (noindex check)
- Internal links pointing to this URL
Build a diagnosis table with: URL, issue type, post title, diagnosis, fix action.
Step 5 — Apply Metadata Fixes
Always show a proposed changes table and ask for approval before writing any updates via Ghost MCP.
For each approved post, use Ghost MCP to update:
meta_description: Generate a 120–155 character description from the post title and excerptcustom_excerpt: If missing, generate a 1–2 sentence teaser from the post openingmeta_title: If over 60 characters, generate a shortened version under 60 characters- Members-only posts with no excerpt: add a teaser visible to search crawlers
Step 6 — Submit Re-Indexing Requests
Using the URL Inspection Tool, submit re-indexing requests for every post that was fixed. Respect Google’s rate limit: maximum 12 requests per day. Prioritize:
- Most recently published posts
- Posts with the most internal links pointing to them
- Posts with the highest-value keywords in their title
Step 7 — Structural Issues Audit
Check Ghost-specific structural issues:
- Tag archives: Check if tag archives with more than 5 posts are noindex — these have indexing value
- Paginated pages: Verify
/page/2/,/page/3/are not blocking Googlebot - Ghost head tag: Confirm
{{ghost_head}}is present in the theme’s default.hbs (missing it breaks canonicals, meta descriptions, and structured data) - Canonical tags: Fetch 3 sample post URLs and check canonical tags match the post URL exactly
- HTTPS configuration: Confirm the site URL in Ghost Admin uses HTTPS
- Sparse tags: Flag any tags with fewer than 3 posts
- Non-WebP images: Check 5 recent posts for non-WebP feature images
Step 8 — Generate SEO Report
Produce a full report with summary stats, fixed posts table, structural issues, content flags, and tag quality.
Step 9 — 72-Hour Follow-Up (Autonomous Mode)
If the user wants autonomous follow-up, check 72 hours after the audit. Re-run the URL Inspection Tool on every submitted URL. For any still not indexed, escalate with a second indexing request and check for new crawl errors.
Step 10 — Migration Audit Mode
For publishers migrating from Substack or WordPress:
- Redirect coverage: Check old platform URLs against Ghost redirects (Settings → Labs → Redirects). Flag any without a redirect.
- Canonical integrity: Verify imported posts have canonical tags pointing to the Ghost URL, not the original platform URL.
Output Format
Produce a single structured report at the end. Give brief status updates during each major step. After the report, ask: “Want me to run the 72-hour autonomous follow-up to track indexing progress?”
MCP dependencies
Connects Claude to your Ghost Admin API so it can read and update posts, metadata, excerpts, and tags
View config snippet
# Install globally first:
# npm install -g @jgardner04/ghost-mcp-server
#
# Then add to Claude Code (use your real site URL and Admin API key):
claude mcp add ghost-mcp -- ghost-mcp-server \
--url https://your-ghost-site.com \
--key <ghost-admin-api-key> Setup, step by step
Install Claude Code
Download the desktop app from claude.ai/code and sign in. The free tier works.
Install Node.js
The Ghost MCP server requires Node.js. Download the LTS version from nodejs.org and run the installer. Verify with node --version.
Install the Ghost MCP server
Open Terminal and run the install command.
npm install -g @jgardner04/ghost-mcp-server Create a Ghost Admin API key
Open Ghost's custom integrations guide in one tab. In your Ghost Admin, go to Settings → Advanced → Integrations and click Add custom integration. Name it Claude SEO Agent, click Create, and copy the Admin API Key shown on the integration's page. Keep that browser tab open while you run the next step.
Connect Ghost MCP to Claude Code
In Terminal, run the command below. Replace https://your-ghost-site.com with your real Ghost URL and paste the Admin API key from step 4 where shown. Confirm with claude mcp list.
claude mcp add ghost-mcp -- ghost-mcp-server --url https://your-ghost-site.com --key <paste-admin-api-key> Install the Claude in Chrome extension
Install Claude in Chrome from the Chrome Web Store. Sign in with your Anthropic account. The extension lets the agent log into Google Search Console in your browser — there's no API key to paste.
Verify Google Search Console access
Open Google Search Console in Chrome and confirm your Ghost site is listed as a verified property. If it isn't, follow Google's site verification guide first. The agent uses your active Chrome session — it does not store Google credentials.
Install the agent skill
Skills load from a folder in your Claude config directory. Run the command below to create the skill folder and download the agent's SKILL.md into it, then restart Claude Code and run /skills to confirm ghost-seo-agent is listed. As an alternative, open the SKILL.md and paste its contents into a project-level skill at .claude/skills/ghost-seo-agent/SKILL.md.
mkdir -p ~/.claude/skills/ghost-seo-agent && curl -fL -o ~/.claude/skills/ghost-seo-agent/SKILL.md https://raw.githubusercontent.com/uristocrat/skills/v1.0.0/ghost-seo-agent/SKILL.md Run the audit
Open Claude Code and say: run SEO audit for my Ghost site. The agent will ask for your site URL and handle the rest.
Install the skill
MCP-powered — requires setup
This skill uses external tools via the Model Context Protocol. You'll need to configure the following MCPs before installing.
Required MCPs
Connects Claude to your Ghost Admin API so it can read and update posts, metadata, excerpts, and tags
View config snippet
# Install globally first:
# npm install -g @jgardner04/ghost-mcp-server
#
# Then add to Claude Code (use your real site URL and Admin API key):
claude mcp add ghost-mcp -- ghost-mcp-server \
--url https://your-ghost-site.com \
--key <ghost-admin-api-key> Setup steps
- Set up each required MCP using the configs above
- Download the skill file below
- Open the skill manager in Claude — in the desktop app under Code → Customize, or on claude.ai under Customize → Skills
- Click Create a new skill (use + on claude.ai) and upload the downloaded file
- Start a new session — your MCPs and skill will both be active
- Use a trigger phrase to activate
claude mcp list doesn't show ghost-mcp
Re-run the claude mcp add ghost-mcp … command from step 5 and restart Claude Code. If ghost-mcp-server isn't found, re-run npm install -g @jgardner04/ghost-mcp-server.
Agent says "I can't reach Google Search Console"
Open Chrome and confirm you're signed into the Google account that owns the GSC property. The Claude in Chrome extension uses your live session — if you're signed out or on the wrong account, the agent can't see your data.
Re-indexing requests get rejected
Google's URL Inspection Tool caps re-indexing requests at roughly 12 per day per property. The agent already throttles to that limit. If you've used the tool manually earlier in the day, wait 24 hours.
Ghost MCP returns 401 / Unauthorized
Your Admin API key is invalid or was rotated. Go back to Settings → Advanced → Integrations in Ghost, open your Claude SEO Agent integration, copy the Admin API Key again, and re-run the claude mcp add ghost-mcp … command with the new key.