Every page gets search and social meta tags, linked structured data, and a place in the sitemap automatically. Your job is to write good titles and descriptions and fill in a few settings.
What’s included
| Feature | Where |
|---|---|
| Title, description, canonical, Open Graph, Twitter cards | Every page, via BaseLayout |
| Structured data (JSON-LD) | WebSite, Person, WebPage, breadcrumbs, BlogPosting, plus ProfessionalService and FAQ when you fill in their settings |
| Sitemap with last-modified dates from Git | /sitemap-index.xml |
| robots.txt | /robots.txt |
| RSS | /rss.xml |
| llms.txt for AI assistants | /llms.txt |
| Schema map | /schemamap.xml and /schema/*.json |
| Social card images | public/og.png, generated on build |
AEO (answer-engine optimization) means making your site easy for AI assistants to understand and cite. llms.txt, FAQ structured data, and the aeo settings handle that.
Settings
In src/config/integrations.ts:
seo.titleandseo.description: defaults for pages that don’t set their ownseo.sameAs: your social profiles, used in structured dataseo.twitterHandle,seo.ogImageaeo.summary,aeo.knowsAbout,aeo.servicesOffered: whatllms.txtsays about you. LeaveservicesOfferedempty ([]) on a site that doesn’t sell services, and theProfessionalServicedata is left outaeo.faq: questions and answers, published as FAQ structured data on the home and contact pages. Only list questions that appear on the page; leave it empty otherwiseaeo.allowAiCrawlers: setfalseto block GPTBot and ClaudeBot
Per-page titles
Built-in pages take their title and description from src/config/pages.ts. Blog posts use their frontmatter, with optional seo overrides. Aim for titles under 65 characters and descriptions between 70 and 160.
The build check
After every build, scripts/check-seo.mjs scans the output and warns about missing or overlong titles and descriptions, duplicate titles, pages with zero or several h1s, and images without alt text.
Before launch
- Set
siteinastro.config.mjsto your real domain. - Run
npm run buildand fix any warnings. - Check
/sitemap-index.xml,/robots.txt,/rss.xml, and/llms.txton the live site. - Submit the sitemap to Google Search Console and Bing Webmaster Tools.
- Optional: add an
INDEXNOW_KEYto your host’s environment so Bing and Yandex hear about changes immediately.