Problem
No canonical tags emitted. Risk of duplicate-content treatment when component pages are reachable via search params, trailing slashes, or future i18n routes. Also no `alternates` map.
Goal
Every page emits a canonical URL.
Acceptance criteria
Problem
No canonical tags emitted. Risk of duplicate-content treatment when component pages are reachable via search params, trailing slashes, or future i18n routes. Also no `alternates` map.
Goal
Every page emits a canonical URL.
Acceptance criteria