Canonical Tags in WordPress
How WordPress core handles canonicals on singular content, what it leaves out, and how to add or override them with or without a plugin.
Ghost gets self-referencing canonicals right out of the box; the Canonical URL field handles everything else.
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.
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.
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.
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.
{{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.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.
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.
Yes. The Ghost Admin API exposes a canonical_url field on the post and page resource, which can be set programmatically.
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.
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.
How WordPress core handles canonicals on singular content, what it leaves out, and how to add or override them with or without a plugin.
How Yoast SEO adds self-referencing canonicals across your whole WordPress site, where to override them, and how to fix a wrong canonical.
How Wix sets a default canonical for every page, how to override it, and the sitemap side effect you need to watch for.