feat(seo): optimize page titles and meta descriptions#115
Conversation
Add deliberate, keyword-targeted titles and meta descriptions across the public surface, backed by a shared site config used by the rest of the SEO work. - Add src/lib/site.ts as the single source of truth for product name, canonical URL, description, keywords, contact and social profiles. - Add NEXT_PUBLIC_SITE_URL (defaults to the production domain) to env. - Root layout: metadataBase, title template, default keyword-targeted title/description, authors/creator/publisher. - Home: explicit unique title + description + canonical. - Auth pages (login/register/forgot-password): unique titles and descriptions, canonicals, and noindex,follow for thin utility pages. Refs #105
|
Claude finished @prudentbird's task —— View job Code Review Complete ✅Review Checklist:
Review SummaryThis PR implements a solid foundation for SEO optimization. The implementation follows good architectural patterns and addresses the stated requirements effectively. ✅ StrengthsArchitecture & Code Quality:
SEO Implementation:
Environment Configuration:
|
Summary
Gives every public page a deliberate, keyword-targeted
<title>and meta description, and lays the shared foundation the rest of the SEO stack builds on.src/lib/site.ts— single source of truth for product name, legal name, canonical URL, description, keyword targets, contact email, and social profiles. Reused by Open Graph, robots, sitemap, JSON-LD, and llms.txt in the following PRs.NEXT_PUBLIC_SITE_URLadded toenv.ts, defaulting tohttps://retailytics.ajared.ng.metadataBase, title template (%s · Retailytics), keyword-targeted default title/description,authors/creator/publisher.Retailytics — Turn Local Data into Market Intelligence, 54 chars) + description (145 chars) + canonical.noindex,followso thin utility pages don't dilute the index.Done when (issue #105)
<title>under 60 chars and a unique meta description (120–155 chars) with a soft CTA.Validation
npm run typecheck✅npm run build✅npm run lintfails on a pre-existing toolchain incompatibility (eslint-plugin-react 7.37.5 vs ESLint 10), unrelated to this change.Notes
First in a stack of SEO PRs (#105 → #106 → #112 → #107 → #108 → #109 → #110 → #111). Targets
dev.Closes #105