The Complete Ghost Blog SEO Checklist
Ghost handles 70% of SEO out of the box. Here are the 18 checkboxes for the other 30% — what you actually have to do yourself.
Ghost handles the basics well. You get a clean sitemap, JSON-LD Article schema, proper canonical tags, and fast page load times without touching a settings panel. That covers roughly 70% of what a well-optimized site needs.
The other 30% requires deliberate action. These 18 checkboxes cover everything Ghost won't do for you.
What Ghost does automatically (skip these)
Before the checklist, it's worth knowing what you don't have to touch:
- sitemap.xml — auto-generated at
/sitemap.xml, split into posts, pages, tags, and authors. Updated whenever you publish or update content. - Canonical tags — Ghost sets the canonical URL to the post's own URL by default. You only need to override it when syndicating.
- JSON-LD Article schema — injected on every post with
headline,author,datePublished,dateModified, andimage. - Meta title and description — pulled from post title and excerpt unless you override them.
- robots meta tag — set to
index, followby default for all public content.
These work correctly out of the box. Don't waste time recreating them.
Site-wide setup (do once)
1. Set your publication title and description
Ghost uses your publication title as the default <title> suffix across the site. Go to Settings → General and fill in both the title and description. The description feeds into the homepage meta description.
Keep the title under 60 characters. The homepage title format is typically Publication Name rather than Homepage Title | Publication Name, so it needs to stand alone.
2. Upload a default OG image
Every post that doesn't have a feature image will fall back to your site-wide OG image for social sharing. Set it in Settings → General → Social accounts → Share image. Use a 1200×630px image with your publication name.
3. Add Google Search Console verification
Go to Settings → Integrations → Google Search Console and paste your verification meta tag. Alternatively, verify via DNS if you have access. Submit your sitemap URL (yourdomain.com/sitemap.xml) after verification.
4. Configure your Twitter card image
Ghost generates twitter:card meta tags automatically, but the card type defaults to summary. If you want large-image Twitter cards (which get significantly more clicks), you need to upload a Twitter image per post, or use a theme that sets twitter:card to summary_large_image by default. Check your theme's {{ghost_head}} output.
5. Audit your tag structure before it grows
Ghost creates a public archive page for every tag. Decide now which tags are topic-focused (worth optimizing) and which are internal/organizational (should be noindexed or converted to internal tags with the # prefix). See the full breakdown in the Ghost tag pages SEO guide.
6. Set up redirects in routes.yaml
If you've imported content from another platform, set up 301 redirects in routes.yaml before submitting to Search Console. Ghost's redirects.yaml (or redirects.json on older versions) handles URL mapping. Do this before you start building links to your new URLs.
7. Check your robots.txt
Ghost's default robots.txt allows all crawlers. If you have staging content, member-only sections, or tag archive pages you don't want indexed, you need to add disallow rules. Ghost lets you override via routes.yaml. Full instructions in the sitemap and robots guide.
Per-post requirements (every post)
8. Write a meta description, not just an excerpt
Ghost uses your post excerpt as the meta description if you don't set a custom one. Excerpts are often written for newsletter preview text, not for search snippets. They're frequently too long, don't include the primary keyword, and don't have a clear call to action.
Set a dedicated meta description in the post settings sidebar under Meta data. Keep it 140–160 characters. Include the primary keyword naturally. Write it as a pitch for the search result, not a summary of the opening paragraph.
9. Set a feature image with descriptive alt text
Ghost uses the feature image for both the article header and the OG/Twitter card images. Set a feature image for every post. Add descriptive alt text — Ghost has an alt text field in the image upload modal.
The image filename also matters. ghost-seo-guide-2024.jpg is better than IMG_4823.jpg for image search indexing.
10. Use one H1 (the title), then a clean heading hierarchy
Ghost automatically makes your post title the H1. Don't add another H1 in the post body. Use H2 for major sections, H3 for subsections. Don't skip heading levels. Don't use headings for stylistic emphasis on non-heading text.
Use RankCrab's heading structure tool to audit your hierarchy before publishing.
11. Include the primary keyword in the first 100 words
Keyword placement in the opening paragraph still signals topical relevance. Don't force it, but it should appear naturally in the introduction. If it feels awkward, your keyword targeting may be off.
12. Set a custom slug
Ghost auto-generates slugs from your post title, which often include stop words and are longer than necessary. Edit the slug in the post settings sidebar. Keep it to 3–5 words, include the primary keyword, use hyphens, drop stop words (the, a, and, for).
Example: ghost-seo-checklist rather than the-complete-guide-to-ghost-blog-seo-in-2024.
13. Add internal links to related posts
Ghost's default theme adds related posts in the footer, but only posts sharing the same primary tag. That's not a substitute for contextual internal links within the post body. Add 2–4 internal links per post to related content. Use descriptive anchor text, not "click here."
See the Ghost internal linking guide for how to build this into a cluster structure.
Content quality checks
14. Verify the post excerpt for newsletter preview
If you send email newsletters, Ghost uses the excerpt as the email preview text. The excerpt also becomes the meta description if you don't set a custom one. These two requirements often conflict. Set a custom meta description separately and optimize the excerpt for email preview.
15. Check word count against search intent
Ghost doesn't enforce minimum word counts. For informational posts targeting competitive keywords, thin content (under 600 words) rarely ranks on its own. Match depth to intent: a quick reference post might be 400 words; a guide for a competitive term might need 2000.
Run a SERP analysis for your target keyword before you publish. Look at the top 5 results. Match their depth and format.
Advanced checks (competitive or syndicated content)
16. Override canonical URL for syndicated posts
If you cross-post content to Medium, DEV, LinkedIn Articles, or any other platform, set the canonical URL in Ghost's Post settings → Meta data → Canonical URL field to point to your Ghost post URL. This prevents the syndication platform from outranking your original.
Full details in the Ghost meta data and canonical guide.
17. Add custom schema for non-article content
Ghost's auto-generated JSON-LD uses the Article schema type. For some content types — recipes, how-tos, FAQs, reviews, events — adding additional schema markup will unlock rich results in Google Search. Ghost's Code Injection (per-post or site-wide in Settings → Code injection) lets you add custom <script type="application/ld+json"> blocks.
Use RankCrab's schema generator to build the markup, then paste it into the post's Code Injection header field.
18. Run an 80-point on-page audit before publishing
Check the full on-page signal set — title tag, meta description, headings, images, internal links, page speed, structured data, keyword usage — before you hit Publish. Ghost's clean output means you'll pass most checks automatically, but the per-post items above are the common failure points.
Quick reference
| Area | Ghost does it | You do it |
|---|---|---|
| sitemap.xml | Yes | — |
| JSON-LD Article schema | Yes | — |
| Canonical tag | Default only | Override for syndicated content |
| Meta title | From post title | Override in Meta data |
| Meta description | From excerpt | Write a dedicated one |
| OG/Twitter image | From feature image | Upload; add alt text |
| Heading hierarchy | H1 from title | Structure H2/H3 in body |
| Internal links | Last-3-tagged | Add contextual links manually |
| Custom schema types | Article only | Add via Code Injection |
| robots.txt rules | Allow all | Override via routes.yaml |
For the full Ghost SEO guide, including how tag pages, newsletters, and internal linking work together, start at the cluster hub.