How to Improve AI Readiness on Ghost
Modern publishing platform with clean markup and developer-friendly APIs. Follow these 7 steps to dramatically improve how AI agents discover and understand your Ghost site.
Expected Score Improvement
Before
After
Estimated improvement based on implementing all steps in this guide. Actual results vary depending on existing site configuration and content quality.
Step-by-Step Instructions
Add Schema Markup via Code Injection
Ghost supports site-wide and per-post code injection. Use this to add Organization, WebSite, and page-specific JSON-LD schema.
<!-- Ghost Admin → Settings → Code Injection → Site Header -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"name": "Your Publication Name",
"url": "https://www.yoursite.com",
"logo": "https://www.yoursite.com/content/images/logo.png",
"description": "Your publication description",
"sameAs": [
"https://twitter.com/yourhandle",
"https://linkedin.com/company/yourcompany"
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "Your Publication Name",
"url": "https://www.yoursite.com",
"potentialAction": {
"@type": "SearchAction",
"target": "https://www.yoursite.com/?s={search_term}",
"query-input": "required name=search_term"
}
}
</script>Leverage Ghost's Built-In Structured Data
Ghost automatically generates Article schema for posts. Verify and enhance it by customizing your theme's post template.
{{!-- Ghost already generates Article schema via ghost-head --}}
{{!-- Verify in your theme's default.hbs: --}}
<head>
{{!-- This helper outputs all built-in meta tags and schema --}}
{{ghost_head}}
{{!-- Add custom schema after ghost_head --}}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{ "@type": "ListItem", "position": 1, "name": "Home", "item": "{{@site.url}}" },
{{#is "post"}}
{ "@type": "ListItem", "position": 2, "name": "{{primary_tag.name}}", "item": "{{primary_tag.url}}" },
{ "@type": "ListItem", "position": 3, "name": "{{title}}" }
{{/is}}
]
}
</script>
</head>Create llms.txt via Custom Integration
Use Ghost's routes.yaml or a custom integration to serve llms.txt from your domain root.
# Method 1: Custom route in routes.yaml
# Edit your routes.yaml (Ghost Admin → Labs → Routes):
routes:
/llms.txt/:
template: llms-txt
content_type: text/plain
# Then create: content/themes/your-theme/llms-txt.hbs
{{!-- No layout --}}
# {{@site.title}}
# {{@site.description}}
## Recent Posts
{{#get "posts" limit="20"}}
{{#foreach posts}}
- {{url}}: {{title}}
{{/foreach}}
{{/get}}
## Pages
{{#get "pages" limit="all"}}
{{#foreach pages}}
- {{url}}: {{title}}
{{/foreach}}
{{/get}}
## Tags
{{#get "tags" limit="all"}}
{{#foreach tags}}
- {{url}}: {{name}}
{{/foreach}}
{{/get}}
## RSS
- /rss/: Full content feedConfigure robots.txt
Ghost auto-generates robots.txt. You can customize it by editing your Ghost configuration or using a reverse proxy.
# Ghost's default robots.txt is minimal.
# To customize, edit your Ghost config:
# config.production.json (or config.development.json):
{
"url": "https://www.yoursite.com",
"server": {
"port": 2368,
"host": "0.0.0.0"
}
}
# For custom robots.txt, use your reverse proxy (Nginx):
# nginx.conf:
location = /robots.txt {
return 200 "User-agent: *
Allow: /
User-agent: GPTBot
Allow: /
User-agent: ClaudeBot
Allow: /
User-agent: PerplexityBot
Allow: /
Sitemap: https://www.yoursite.com/sitemap.xml
";
add_header Content-Type text/plain;
}Optimize Meta Tags via Ghost Admin
Set meta titles and descriptions for every post and page. Ghost provides these fields in the post editor's Settings panel.
# For each post/page in Ghost Admin:
# 1. Open the post editor
# 2. Click the Settings gear (top right)
# 3. Scroll to "Meta data" section
# 4. Set:
# - Meta title: Under 60 chars, keyword-first
# - Meta description: 140-160 chars
# - Canonical URL: (if needed for syndicated content)
# 5. Set "Twitter card" and "Facebook card" images
# For tag pages:
# Ghost Admin → Tags → Select tag → expand "Meta data"
# Set unique title and description for each tag archive
# For the homepage:
# Settings → General → Meta data
# Set publication meta title and descriptionAdd FAQ Schema to Posts
Use Ghost's per-post code injection to add FAQ schema to posts that contain question-and-answer content.
<!-- In Ghost Editor → Post Settings → Code injection → Post Header -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Your first question?",
"acceptedAnswer": {
"@type": "Answer",
"text": "The detailed answer to the first question."
}
},
{
"@type": "Question",
"name": "Your second question?",
"acceptedAnswer": {
"@type": "Answer",
"text": "The detailed answer to the second question."
}
}
]
}
</script>Verify and Submit Sitemap
Ghost auto-generates an XML sitemap. Verify it includes all your content and submit it to search engines.
# Ghost generates sitemaps at:
# https://www.yoursite.com/sitemap.xml
# https://www.yoursite.com/sitemap-posts.xml
# https://www.yoursite.com/sitemap-pages.xml
# https://www.yoursite.com/sitemap-tags.xml
# https://www.yoursite.com/sitemap-authors.xml
# Verify:
# 1. Visit each sitemap URL
# 2. Check all published posts and pages are included
# 3. Ensure draft/scheduled posts are excluded
# Submit to Google Search Console:
# Search Console → Sitemaps → Add: sitemap.xml
# Ghost also generates RSS at:
# https://www.yoursite.com/rss/
# Some AI agents use RSS feeds for content discoveryRecommended Tools for Ghost
- Ghost Admin Code Injection
- Ghost Content API
- Ghost Handlebars Themes
- Google Search Console
Frequently Asked Questions
Does Ghost include structured data by default?
Yes. Ghost automatically generates Article schema for blog posts and WebSite schema for the homepage via the {{ghost_head}} helper. However, this doesn't include FAQ, Organization with sameAs links, or BreadcrumbList schema, which you should add manually.
How do I add llms.txt to my Ghost site?
The most reliable method is to define a custom route in routes.yaml that points to a Handlebars template rendering plain text. This lets you use Ghost's data helpers to dynamically list posts, pages, and tags in the llms.txt file.
Can I customize Ghost's robots.txt?
Ghost doesn't expose robots.txt for direct editing. If you're self-hosting, you can customize it through your reverse proxy (Nginx or Caddy). If you're on Ghost(Pro), you can request changes through their support.
Ghost Benchmark Data
See how Ghost sites score compared to other platforms, with protocol adoption rates and top-performing sites.
View Ghost AI Readiness BenchmarkGuides for Other Platforms
Ready to Check Your Ghost Site?
Run a free AI readiness scan to see your current score and get personalized recommendations for your Ghost site.
Scan Your Ghost Site