Skip to content

seo: add canonical URLs + alternates to per-page generateMetadata #237

@bntvllnt

Description

@bntvllnt

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

  • `lib/og.ts` (or new `lib/seo.ts`) exposes `canonical(path)` helper using `metadataBase`.
  • Each `generateMetadata` adds `alternates: { canonical: canonical(path) }`:
    • `app/page.tsx` → `/`
    • `app/components/page.tsx` → `/components`
    • `app/components/[slug]/page.tsx` → `/components/{slug}`
    • `app/docs/page.tsx` → `/docs`
    • `app/philosophy/page.tsx` → `/philosophy`
  • Verify via `curl -s https://ui.vllnt.ai/components/button | grep canonical` after deploy.

Metadata

Metadata

Assignees

Labels

enhancementNew feature or requestgood first issueGood for newcomersseoSearch engine optimization

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions