Enabling and Verifying Ghost CMS's Built-in SEO Meta-Tag Feature
Ghost 4.x and 5.x emit canonical, description and Open Graph tags automatically — but only if the theme's head helper is present. This guide covers site-wide defaults, per-post overrides, and verifying the rendered head with curl and Lighthouse.
11 Nov 2025, 20:20 UTC

The problem: SEO tags that never reach the page
Ghost generates SEO metadata for every post and page, but those tags only appear in the HTML if the active theme asks for them. A custom theme that omits the head helper — the Handlebars template tag that prints the whole block of SEO tags — produces a site that looks fine and ships with no canonical URL, no meta description, and no Open Graph tags. This guide covers how to confirm the feature is working, where the values come from, and how to check the rendered output.
Version assumptions and prerequisites
- Written against Ghost 4.x and 5.x, where SEO output is built in. Ghost 3.x required a separate SEO app. If you run 3.x, or a release newer than 5.x, confirm the behaviour before following along.
- Owner or Administrator access to Ghost Admin.
- Filesystem or theme-upload access if the theme needs editing.
- A terminal with
curl, or a browser's View Source. - Optional: Chrome DevTools with the Lighthouse panel.
Step 1 — Confirm the Ghost version
Run this on the server where Ghost-CLI is installed, as the user that owns the Ghost installation:
ghost version
If Ghost-CLI is not available, the version is also visible in Ghost Admin. Treat anything below 4.x as out of scope for this guide.
Step 2 — Check the site-wide SEO defaults
In Ghost Admin, open Settings → SEO. This screen holds fallback values — site meta title, site meta description, and a default social image — used when a post or page has no value of its own. Filling these in does not enable or disable anything: in 4.x and 5.x there is no module to switch on. Empty fields do not break the tags; they just mean generic fallbacks are used.
Step 3 — Confirm the theme includes the head helper
This is the step that most often explains missing tags. Open the theme's default.hbs (the base template) and look inside <head> for the Ghost head helper. In current themes this is {{ghost_head}}; older themes used {{meta}}. Confirm which one your theme uses against its own documentation before editing, because the naming differs between theme generations.
{{ghost_head}}
The helper emits the canonical link, description, and Open Graph/Twitter tags as one block. If it is absent, add it before </head>, then re-upload or redeploy the theme. Uploading a zip through Settings → Design → Change theme needs no restart; editing files directly on the server does, so run ghost restart afterwards.
Do not add a second head helper if one already exists. Duplicate canonical or description tags are harder to diagnose than missing ones.
Step 4 — Override values per post
Open a post in the editor and open the SEO panel in the post settings sidebar. The fields are:
- Search engine title — replaces the post title in the
<title>andog:titletags. - Search engine description — becomes
<meta name="description">andog:description. - Canonical URL — overrides the auto-generated canonical link. Use it only for genuinely duplicated content.
Leave a field blank to fall back to the post's own title and excerpt, then the site-wide defaults. Update or publish the post to apply the change.
Step 5 — Verify the rendered HTML
Run this against the public URL of a published post:
curl -s https://example.com/my-post/ | grep -Ei 'canonical|og:title|og:description|name="description"'
Expected result: one canonical link, one description, and one og:title/og:description pair. If the command returns nothing, the head helper is missing or the page is being served from a cache. The exact output depends on your theme and content, so read it rather than assuming a fixed result.
For a broader check, open the post in Chrome and run DevTools → Lighthouse → SEO. A failing "Document does not have a meta description" audit points at the same missing helper.
Troubleshooting by symptom
| Symptom | Likely cause | Check |
|---|---|---|
| No meta tags at all | Head helper missing from the theme | Search default.hbs for {{ghost_head}} or {{meta}} |
| Tags present, description empty | No post excerpt and no SEO description | Add one in the post's SEO panel |
| Canonical points somewhere unexpected | Manual canonical override left in place | Clear the Canonical URL field and update |
| Social preview shows old text | Platform-side cache | Re-scrape the URL with that platform's debugger |
Recovery options
If a theme edit breaks the site, re-upload the previous theme zip or restore default.hbs from version control, then run ghost restart if you edited files on the server. Clearing a canonical URL or SEO description is non-destructive: blank the field and update the post. Site-wide SEO settings have no rollback beyond re-entering the previous values, so note them before changing them.
Limits of this check
Rendered tags are not the same as indexed tags. Search engines re-crawl on their own schedule and social platforms cache previews, so a correct page source does not guarantee an immediate change in search results. This guide also assumes a stock Ghost theme structure; heavily customised themes may build the head by hand, in which case helper names and file locations differ. Verify against your theme's documentation, and treat the helper-name detail above as something to confirm on your own installation rather than assume.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.