Schema + AI-SEO
The AI/SEO pillar — four invisible Astro components that emit valid JSON-LD, plus an llms.txt front door for AI engines.
src/components/growth/schema/*.astro · public/llms.txt
Golden rule: only emit structured data for content that is actually visible on the page. Google requires the on-page text to mirror the markup; fabricated FAQs/ratings risk a manual action.
Each component is safe-by-default (renders nothing when required props are missing) and pulls defaults from brand.json via loadBrand().
FaqSchema → FAQPage
Section titled “FaqSchema → FAQPage”<FaqSchema items={page.faq?.items ?? []} />| Prop | Type | Description |
|---|---|---|
items | { question, answer }[] | Invalid entries are stripped. |
ServiceSchema → Service
Section titled “ServiceSchema → Service”<ServiceSchema name={page.title} serviceType={page.serviceType} url={`/${page.slug}`} description={page.metaDescription} />name required; description / areaServed / providerName default from brand.json; provider auto-built from brand.business.
BreadcrumbSchema → BreadcrumbList
Section titled “BreadcrumbSchema → BreadcrumbList”<BreadcrumbSchema crumbs={[ { name: 'Home', url: '/' }, { name: page.title, url: `/${page.slug}` },]} />URLs resolve absolute against brand.business.url.
ReviewSchema → AggregateRating / Review
Section titled “ReviewSchema → AggregateRating / Review”<ReviewSchema ratingValue={4.9} reviewCount={37} reviews={[...]} />Emit only ratings/reviews genuinely shown on the page.
llms.txt
Section titled “llms.txt”Served at /llms.txt — H1 brand name + summary + link sections, positioning-correct (website + job-management system for service businesses). The front door for AI search engines.