The canonical URL cannot be used
What this check looks for
The page declares a canonical, but the value is not a usable web address, so search engines have nothing to act on.
Why it matters
A malformed canonical is treated as no canonical, while looking to anyone auditing the page as though the work has been done. It is the kind of fault that survives for years.
What it costs your score
When this check fails it removes 10 points from your SEO score, before the status, confidence and repeat multipliers are applied. SEO carries a weight of 5 in the overall score.
It shares the seo.canonical family ceiling of 20 points: however many findings that family produces, together they cannot remove more than that from SEO. One underlying problem showing up in several places is still one problem.
- Severity
- medium
- Default confidence
- confirmed
- Status when triggered
- warn
- Deduction
- 10 points
- Family cap
- seo.canonical · 20
- Category
- SEO
- Module
- Seo audit
- Fix owned by
- user
- In the ruleset since
- 2026.09
How to fix it
Replace the canonical with the page's absolute URL.
A value that does not parse as a URL is discarded, so the declaration has no effect at all.
Check the template for an unsubstituted placeholder — this is the most common cause.
Emit an absolute URL including the scheme and host.
Percent-encode anything that needs it; a raw space or a raw
|makes the value unparseable.Generate the value from the route rather than a configuration string, so it cannot go stale.
How to confirm it worked
curl -sS ‹url› | grep -i 'rel="canonical"' — should show a complete https:// URL
A named slot like ‹domain› — and the braces left in the configuration below — is filled in with your own values when this rule appears on a report.
Technical detail
The declared value was ‹value›, which is ‹problem›. That is the whole of what we determined: the check resolves the value or it does not, and it does not diagnose *why*.
A canonical must resolve to an absolute http: or https: URL. The values that fail in practice are: an unresolved template placeholder that was never substituted, a scheme-relative or protocol-less string, a path with spaces or unencoded characters, and a URL with a scheme search engines do not crawl.
Generating the canonical from the page's own routing rather than from a configured string removes the whole class of fault: the value cannot be stale, and it cannot be left as a placeholder.
Standards and references
Test this on your domain
Run the check that produces this finding, on its own, against any domain.
Other seo audit checks
- The page declares more than one canonical URL
- The page declares no canonical URL
- The canonical URL points at a different page
- The page has no h1 heading
- The heading levels skip a level
- The page has more than one h1
- An hreflang annotation is not valid
- The hreflang set does not include this page
- The page's declared language is not a well-formed language tag
- The page does not declare what language it is written in
- Images on the page have no alt attribute
- robots.txt blocks this page from being crawled