Summary
Our SEO foundation is already strong (canonical URLs, Open Graph, Twitter Cards, sitemap, RSS, manifest, centralized site configuration). The remaining work is to improve machine readability for search engines and AI systems by introducing a reusable SEO module and Schema.org support.
The goal is to centralize all SEO generation while avoiding duplication across pages.
Objectives
- Add Schema.org (JSON-LD) support.
- Centralize SEO logic.
- Keep page components simple.
- Generate metadata from a single source of truth ("siteConfig" + page metadata).
- Improve AI discoverability.
Tasks
- Create SEO module
Create:
src/components/seo/
├── Schema.astro
├── schema.ts
├── seo.ts
├── types.ts
└── index.ts
Responsibilities:
-
Schema.astro
- Render JSON-LD only.
- Contain minimal logic.
-
schema.ts
- Generate structured data objects.
-
seo.ts
- Build canonical URLs.
- Generate page titles.
- Resolve Open Graph image.
- Shared SEO helper functions.
-
types.ts
- Add Schema.org support
Support the following schema types:
- Organization
- WebSite
- WebPage
- AboutPage
- CollectionPage
- BlogPosting / Article
Automatically select the appropriate schema based on page type.
- Introduce page type support
Extend page metadata with:
- home
- page
- about
- article
- collection
Allow "BaseHead" to render the appropriate structured data automatically.
- Update BaseHead
Replace inline SEO generation with reusable helpers.
Responsibilities should be limited to rendering:
- Title
- Description
- Canonical
- Open Graph
- Twitter
- Schema component
- Improve site configuration
Extend "siteConfig" with:
- site URL
- logo URL
- optional social profile URLs
Use this as the single source of truth for SEO.
- Fix robots meta tag
Replace:
with:
(or remove the tag if default indexing behavior is desired).
- Improve global description
Replace the generic site description with one that accurately reflects the existing functionality of the site.
- Fix theme-color
Replace the invalid value:
with the site's actual primary color.
- Improve Open Graph metadata
Use the complete page title for:
- "og:title"
- "twitter:title"
instead of only the page title.
Expected Result
- Reusable SEO architecture.
- Automatic Schema.org generation.
- Better search engine understanding.
- Better AI discoverability.
- Minimal maintenance for future pages.
- No duplicated SEO logic across the project.
Acceptance Criteria
Summary
Our SEO foundation is already strong (canonical URLs, Open Graph, Twitter Cards, sitemap, RSS, manifest, centralized site configuration). The remaining work is to improve machine readability for search engines and AI systems by introducing a reusable SEO module and Schema.org support.
The goal is to centralize all SEO generation while avoiding duplication across pages.
Objectives
Tasks
Create:
src/components/seo/
├── Schema.astro
├── schema.ts
├── seo.ts
├── types.ts
└── index.ts
Responsibilities:
Schema.astro
schema.ts
seo.ts
types.ts
Support the following schema types:
Automatically select the appropriate schema based on page type.
Extend page metadata with:
Allow "BaseHead" to render the appropriate structured data automatically.
Replace inline SEO generation with reusable helpers.
Responsibilities should be limited to rendering:
Extend "siteConfig" with:
Use this as the single source of truth for SEO.
Replace:
with:
(or remove the tag if default indexing behavior is desired).
Replace the generic site description with one that accurately reflects the existing functionality of the site.
Replace the invalid value:
with the site's actual primary color.
Use the complete page title for:
instead of only the page title.
Expected Result
Acceptance Criteria