Fix Your Sitemap for Ghost

Updated April 2026·By SitemapFixer Team

Ghost generates a sitemap index at /sitemap.xml with separate children for posts, pages, tags, and authors. Each of these sub-sitemaps has its own quirks that can surface thin or duplicate content.

Analyze your Ghost sitemap nowTry Sitemap Fixer Free

Ghost splits its sitemap into sub-files automatically, which is great - you get per-category coverage data in Google Search Console. The flip side: each sub-file is generated without user input, so a stale author or abandoned tag silently ends up in search results. And Ghost won't let you edit the sitemap directly. All fixes happen upstream, in your Ghost Admin dashboard.

Looked at a Ghost newsletter site with 480 posts. The sitemap index showed 480 posts, 14 pages, 312 tags, and 9 authors. Turns out the 312 tags included every guest-post tag the team had ever used (one tag per guest), and only 2 of the 9 authors had published anything in the past year. Cleaning both brought GSC's "crawled, not indexed" bucket down from 38% to 11%.

Common Ghost Sitemap Issues

Tag and author hygiene

Ghost has an underused feature: internal tags. Any tag prefixed with # is internal-only - it doesn't render on the site, doesn't appear in sitemap-tags.xml, and doesn't get its own URL. Use them liberally for editorial categorization that shouldn't produce public pages.

For authors: every staff member with login access gets an author page, whether they've published or not. In Ghost Admin > Staff, remove people who'll never write, or demote them to Contributor and reassign their posts to the owner. The author archive disappears as soon as the account is removed.

AMP cleanup on older installs

Ghost 4.x and earlier shipped AMP output and emitted sitemap-amp.xml. AMP has been deprecated, but the sitemap entry can linger after upgrade. Disable AMP in Settings > Integrations > AMP, then 410 the old paths at the reverse proxy:

# nginx
location ~ /amp/?$ {
  return 410;
}

# Caddy
@amp path_regexp /amp/?$
respond @amp 410

# Also verify
curl -I https://yoursite.com/some-post/amp/
# HTTP/2 410

Members-only posts and canonicals

Posts set to Members or Paid access still render a public teaser and still go into sitemap-posts.xml. That's usually fine - Google indexes the teaser and users click through. But if you have two versions of the same content (a public teaser and a members-only full post at a different URL), set the canonical on both to the same URL so they don't compete. Ghost lets you set a Canonical URL in each post's metadata panel.

Subdirectory installs

If Ghost runs at yourdomain.com/blog/, the sitemap URL is yourdomain.com/blog/sitemap.xml, and every URL inside has the /blog/ prefix. Submit this URL, not the root one. In GSC, if your site uses the root domain as a property, the blog sitemap will show up fine - but make sure your Ghost url config in config.production.json includes the subdirectory, or internal links will be broken.

Step-by-Step Fix Guide

  1. In Ghost Admin > Tags, delete or merge empty and guest-only tags. Prefix internal-only tags with #
  2. Under Staff, remove inactive authors so sitemap-authors.xml lists only real contributors
  3. Disable AMP and 410 the /*/amp paths at the reverse proxy if on Ghost 4 or earlier
  4. Set canonical URLs on members-only posts that duplicate public content
  5. Edit robots.txt via hosting config (Ghost Pro: ask support) to disallow /p/ preview routes
  6. Restart Ghost or wait for cache rebuild, then verify with curl https://yoursite.com/sitemap.xml
  7. Submit each sub-sitemap to Google Search Console to get per-type coverage reports
  8. Monitor the tags and authors sub-sitemaps monthly - they're the ones that rot quietly

Frequently Asked Questions

What are Ghost's default sitemap URLs?
/sitemap.xml is the index, and it references /sitemap-posts.xml, /sitemap-pages.xml, /sitemap-tags.xml, /sitemap-authors.xml, and on older versions /sitemap-amp.xml. Ghost generates all of them automatically - you can't add custom sub-sitemaps.
Can I hide tags from the Ghost sitemap?
Yes. Prefix a tag with # to make it an internal tag - internal tags don't appear in sitemap-tags.xml or anywhere public. Use them for editorial categorization that shouldn't produce a URL.
Does Ghost sitemap work with a subdirectory install?
Yes, but the URL shifts. If Ghost is at /blog/, the sitemap is at yourdomain.com/blog/sitemap.xml and all URLs inside include the /blog/ prefix. Submit that URL to GSC, not the root one.
Analyze your Ghost sitemap
Find all issues in your sitemap - free, no credit card needed
Analyze My Sitemap Free
Other platform guides