dotvitals

The canonical URL cannot be used

MediumConfirmedQuick winseo.canonical.invalid

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 the whole score is calculated

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.

  1. Check the template for an unsubstituted placeholder — this is the most common cause.

  2. Emit an absolute URL including the scheme and host.

  3. Percent-encode anything that needs it; a raw space or a raw | makes the value unparseable.

  4. 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.

Open the seo audit checker

Other seo audit checks