CanonicalTag.com logoCanonicalTag.comThe canonical tag & URL canonicalization
CMS PlatformCMS & Website Platforms

Canonical Tags in Ghost

Ghost gets self-referencing canonicals right out of the box; the Canonical URL field handles everything else.

Does Ghost add canonical tags automatically?

Yes. Ghost automatically applies a self-referencing rel="canonical" tag to posts and pages by default, pointing each piece of content at its own URL. This is rendered through the theme's {{ghost_head}} helper, which Ghost's default themes, including Casper, include in the <head>. Because the canonical tag is injected by {{ghost_head}}, any theme that correctly includes that helper gets correct self-referencing canonicals with no additional configuration required.

The flip side is worth stating plainly: if a theme omits {{ghost_head}}, it loses canonical output along with the rest of Ghost's automatic head-level SEO, including sitemaps, structured data, and Open Graph and Twitter tags. That single helper is doing a lot of quiet, load-bearing work, so when a canonical tag goes missing or looks wrong on a Ghost site, the theme's inclusion of {{ghost_head}} is one of the first things worth checking.

The per-post Canonical URL field

Ghost added a custom Canonical URL feature back in March 2019. It exposes a Canonical URL field inside each post's or page's settings, in the meta and SEO settings panel of the editor. Setting a value there overrides the default self-referencing canonical, so the rendered tag points at whatever URL you specify instead of the post's own address.

The primary use case is syndication and republishing: if you republish a guest post, or content that originally appeared somewhere else, you set the Canonical URL field back to the original source so search engines credit and rank the original rather than treating your republished copy as a competing duplicate. It's also used for multiple versions of similar content, such as A-B or tracking variants, where you point every variant at the preferred version, and for curated link collections, where a theme can surface the field to build lists that link out while attributing SEO value to the right source.

The field is also settable programmatically, through the Ghost Admin API's canonical_url field on the post or page resource. In current Ghost this is a standard, shipped feature. It was described around its original launch as new and somewhat experimental, but that framing no longer applies to current versions; only hedge lightly, and mainly when discussing very old Ghost installs.

How the canonical renders in your theme

By default, {{ghost_head}} outputs the <link rel="canonical" href="..."> tag automatically, self-referencing unless a custom canonical URL has been set on that post, in which case it outputs the custom value instead. Theme developers who need more direct control can also access the {{canonical_url}} helper, described in Ghost's own documentation as the custom canonical URL set for the post, alongside related helpers like {{meta_title}} and {{meta_description}}, for explicit rendering in a template.

Ghost also supports code injection, either per-post or site-wide, for adding arbitrary head markup. It's tempting to use code injection to hand-roll a canonical tag, but doing so risks duplicating the one {{ghost_head}} already emits, producing two canonical links on the same page. The Canonical URL field in post settings is the intended mechanism for controlling canonicals; code injection generally should not be used for this purpose.

Using canonicals for republished content

The clearest, best-documented use of Ghost's Canonical URL field is cross-posting and syndication. If you're republishing a piece that first ran on another site, whether it's a guest contribution you're hosting, or your own content that was originally published elsewhere and you're bringing a copy onto your Ghost site, setting the Canonical URL field to the original source tells search engines that the original is the version they should index and rank, while your republished copy remains visible to readers without competing against the source for rankings.

This matters because, without that signal, two live copies of essentially the same content look like ordinary duplicate content to a search engine, which then has to guess which version to treat as authoritative, a guess that won't always favor the party you'd prefer. The same mechanism supports curated link collections, where a theme surfaces {{canonical_url}} to build a list of posts that link out to external originals while still attributing SEO value correctly to those originals rather than to the listing page.

Common Ghost canonical mistakes

  • Using a theme that's missing {{ghost_head}}, or running an outdated theme built against an old API version, either of which drops or breaks canonical output; several historical GitHub issues, including #10367, #10769, #10978, and #12007, trace back to exactly this kind of outdated theme or API mismatch rather than a core defect.
  • Adding a manual canonical tag through code injection on top of the automatic one, producing two conflicting canonical links.
  • Misunderstanding the self-referencing default as a bug; it's correct behavior for original content, and a custom canonical should only be set for genuinely syndicated or republished material.
  • Setting the custom Canonical URL field to a source URL that later changes or disappears, and leaving it stale instead of updating it.

Frequently Asked Questions

Do I need to manually add a canonical tag to my Ghost posts?

No. Ghost automatically applies a self-referencing canonical tag to posts and pages by default through the theme's {{ghost_head}} helper, as long as your theme includes that helper.

How do I set a canonical URL for a post I've republished from elsewhere?

Open the post's settings panel in the editor, find the Canonical URL field in the meta and SEO settings, and enter the original source URL. This overrides the default self-referencing canonical so search engines credit the original.

Can I set the canonical URL through the Ghost API instead of the editor?

Yes. The Ghost Admin API exposes a canonical_url field on the post and page resource, which can be set programmatically.

Why isn't my custom canonical URL showing up on the page?

This is most often traced to an outdated theme that's missing the {{ghost_head}} helper or built against an old Ghost API version. Historical reports of canonical URLs "not working" have generally been theme or API-version issues rather than defects in current Ghost.

What happens if I add a canonical tag through code injection in Ghost?

You risk duplicating the canonical tag that {{ghost_head}} already outputs automatically, resulting in two conflicting canonical links on the same page. Use the post's Canonical URL field instead.