# seo/canonical

Every page declares an absolute canonical URL. Reglen seo/canonical kører i page-scope med severity 'error' og indgår i teknisk seo-domænet sammen med 23 andre kontrakter i frameworket.

## Hvorfor canonical findes

A self-referencing canonical protects against duplicate-content dilution from URL variants (query params, trailing slashes, http/https). Gold standard: every indexable page has exactly one <link rel="canonical"> with an absolute URL.

## Sådan håndhæves canonical

Reglen canonical evalueres på hver enkelt renderet HTML-side for sig, så et fund altid kan føres tilbage til én konkret side og én konkret rettelse i data eller template. Fejler en side, får agenten en finding, hvor fix-instruktionen for canonical er formuleret som en konkret arbejdsordre med filnavne og målbare krav — aldrig et vagt råd. Severity 'error' betyder at et brud på canonical fejler hele verifikationen med exit-kode 1, så hverken CI eller en agent kan skibe sitet før fundet er rettet.

## Test og fixtures

Som alle kontrakter i frameworket har seo/canonical en mutant-test, der beviser at reglen fejler, når kravet brydes — en regel uden en fejlende test er ikke en regel. Golden-fixturet beviser omvendt, at en fuldt compliant side består canonical sammen med de øvrige 85 regler, og denne demoside er selv underlagt hele kontrakten.

## Relaterede regler

- [seo/single-h1](https://pseo.mikkelkrogsholm.dk/regler/seo/single-h1/)
- [seo/heading-hierarchy](https://pseo.mikkelkrogsholm.dk/regler/seo/heading-hierarchy/)
- [seo/structured-data](https://pseo.mikkelkrogsholm.dk/regler/seo/structured-data/)
