International SEO completion/verification pass, per docs/MULTILINGUAL.md §6 (#134, PRs #149/#154). Runs after localized content exists — depends on #150 (foundation) and #151 (Dutch Phase 1 pages).
Boundary with #150
#150 builds the locale-aware metadata plumbing (canonical, alternates.languages seam, og:locale) as infrastructure. This issue owns the SEO completion and verification — nothing here is duplicated acceptance criteria.
Scope
app/sitemap.ts: emit alternates.languages per entry for localized routes only; no lastModified regression.
- Full reciprocal
hreflang verification on every localized page, including x-default → English unprefixed URL.
- JSON-LD:
inLanguage on BreadcrumbList/FAQPage/Course on localized pages; single business @id — no per-locale duplicate entities.
- Localized written titles/descriptions and
og:locale (nl_NL) verified end-to-end.
public/llms.txt: add the one-line Dutch-availability note; still points at canonical English URLs. No llms.nl.txt.
- Final localized SEO validation + Search Console international/hreflang coverage notes for the owner.
Acceptance
- Reciprocal hreflang verified on every localized page including
x-default.
- Sitemap emits correct alternates; no duplicate/conflicting entities.
- English pages' metadata and URLs unchanged.
International SEO completion/verification pass, per docs/MULTILINGUAL.md §6 (#134, PRs #149/#154). Runs after localized content exists — depends on #150 (foundation) and #151 (Dutch Phase 1 pages).
Boundary with #150
#150 builds the locale-aware metadata plumbing (canonical,
alternates.languagesseam,og:locale) as infrastructure. This issue owns the SEO completion and verification — nothing here is duplicated acceptance criteria.Scope
app/sitemap.ts: emitalternates.languagesper entry for localized routes only; nolastModifiedregression.hreflangverification on every localized page, includingx-default→ English unprefixed URL.inLanguageonBreadcrumbList/FAQPage/Courseon localized pages; single business@id— no per-locale duplicate entities.og:locale(nl_NL) verified end-to-end.public/llms.txt: add the one-line Dutch-availability note; still points at canonical English URLs. Nollms.nl.txt.Acceptance
x-default.