Skip to content

Basics / 09

SEO & AEO

Meta tags, structured data, sitemaps, RSS, and llms.txt are built in. Here's what's included and what to fill in.

Browse the docs

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.title and seo.description: defaults for pages that don’t set their own
  • seo.sameAs: your social profiles, used in structured data
  • seo.twitterHandle, seo.ogImage
  • aeo.summary, aeo.knowsAbout, aeo.servicesOffered: what llms.txt says about you. Leave servicesOffered empty ([]) on a site that doesn’t sell services, and the ProfessionalService data is left out
  • aeo.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 otherwise
  • aeo.allowAiCrawlers: set false to 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

  1. Set site in astro.config.mjs to your real domain.
  2. Run npm run build and fix any warnings.
  3. Check /sitemap-index.xml, /robots.txt, /rss.xml, and /llms.txt on the live site.
  4. Submit the sitemap to Google Search Console and Bing Webmaster Tools.
  5. Optional: add an INDEXNOW_KEY to your host’s environment so Bing and Yandex hear about changes immediately.