# Canonical and hreflang discipline

> Canonical and hreflang discipline: An agent needs one consistent URL per important page. The fix: establish canonical and hreflang discipline.

- Source: /checks/canonical
- Site: AgenticWebScore
- Language: English

---
An agent needs one consistent URL per important page.

| Property | Value |
| --- | --- |
| Check id | `canonical` |
| Dimension | Discoverability (20%) |
| Tier | Recommended — pool 20 pts |
| Weight inside tier | 2 |
| Impact | Medium |
| Maturity | Adopted — A ratified standard with real deployment. |
| Conditional | No |
| Publishing skill | `canonical` |
| Standards | — |

## What is measured

The scanner extracts the link rel=canonical element and every link rel=alternate hreflang element from https://<domain>/ ($home in the probe map). Pass = exactly one absolute, self-referential canonical on https with no tracking parameters, plus, when translations exist, reciprocal hreflang alternates that include an x-default. Partial = a canonical that is relative to another host or points at a different URL, or hreflang values that no other language version links back to. Fail = no canonical element on the page.

## Reproduce it yourself

You do not have to take our word for any of this. Run the same measurement against your own domain:

```bash
DOMAIN=example.com
curl -sS "https://$DOMAIN/" | grep -Eio '<link[^>]+rel="(canonical|alternate)"[^>]*>'
```

## The fix

This is the artifact to ship. It is the complete change, not a description of one.

```html
<link rel="canonical" href="https://example.com/pricing">
<link rel="alternate" hreflang="en" href="https://example.com/pricing">
<link rel="alternate" hreflang="de" href="https://example.com/de/preise">
<link rel="alternate" hreflang="x-default" href="https://example.com/pricing">
```

> The canonical must be absolute and must repeat the exact URL an agent reached; hreflang only works when every language version lists all the others, including itself.

## Related checks

| Check | Tier | Impact | Same skill |
| --- | --- | --- | --- |
| `reachable` — Homepage open to agent access | Essential | Critical | — |
| `robots-txt` — robots.txt with agent directives | Essential | High | — |
| `sitemap-xml` — sitemap.xml valid and current | Essential | High | — |
| `llms-txt` — /llms.txt published and well-structured | Essential | Critical | — |
| `link-headers` — Discovery via Link response headers | Emerging | Medium | — |
| `dns-aid` — DNS-AID discovery record | Emerging | Medium | — |
| `llms-full` — /llms-full.txt expanded context | Recommended | Low | — |
| `agents-md` — AGENTS.md with the required sections | Recommended | High | — |
