SEO Built In: Meta, Schema, Sitemap and Robots
What the theme prints for search engines and AI agents by default, and the settings that turn each part on or off per page and per collection.
SEO is on by default. Every layout renders through core/components/BaseHead.astro, so a new page gets the same tags as the rest of the site as soon as it passes its head properties.
In the page head
| Output | Source |
|---|---|
title, meta name="description", keywords, author |
Page front matter or the page’s HeadProps |
link rel="canonical" |
Built from info.siteUrl and the page path |
Open Graph (og:title, og:description, og:url, og:type, og:image with width, height and alt) and article: dates |
Page meta and the hero image |
twitter:card (summary_large_image) and title, description, image |
Same meta |
meta name="robots" |
index, follow or noindex, nofollow, set by the page’s index flag; printed in production only |
rel="prev" and rel="next" |
PaginationSeo.astro on paginated lists |
Icons, web manifest, color-scheme, referrer policy, sitemap link |
BaseHead.astro |
The image for social previews comes from the hero image meta (see Feature image workflow). A page without one falls back to siteImages.image.
Structured data
core/components/schema/Schema.astro prints JSON-LD for the page type: WebPage, Article, VideoObject, AudioObject, Person, credentials, ItemList for listings and ImageObject for the images registered by ResponsiveImage. FaqList adds FAQPage, Breadcrumb adds BreadcrumbList, and SchemaLocalBusiness and SchemaSiteNavigation cover business and navigation data. Business details come from src/site/config/local-business.mjs and info.mjs.
Generated files
| URL | Route | Notes |
|---|---|---|
/sitemap.xml |
src/pages/sitemap.xml.ts |
Each collection’s sitemap flag in pages.mjs controls inclusion; info.sitemap controls the link rel="sitemap" in the head |
/robots.txt |
src/pages/robots.txt.ts |
Disallows paths such as /api/; blocks everything outside production (blockAllInNonProd); blockAICrawlers can add AI bot rules |
/rss.xml and collection feeds |
rss.xml.ts |
Combined and per-collection |
/llms.txt and per-collection llms.txt |
llms.txt.ts |
Plain-text exports for AI agents |
Read more in llms.txt and RSS outputs.
Where to control it
- Per page:
index,sitemap,rss,searchandllmsfront matter fields. - Per collection:
src/site/config/pages.mjs(index,sitemap,sitemapMinPosts). - Per site:
info.mjs(name, URL, keywords,sitemap),local-business.mjs,functions.mjs(robots rules). - IndexNow: helper scripts live in
core/scripts/prepare-indexnow.mjsandsubmit-indexnow.mjs.
Check it
- Build the site and open a page source: canonical, one description, Open Graph image with dimensions, JSON-LD.
- Open
/sitemap.xml,/robots.txtand/llms.txt. - Validate the JSON-LD with a structured data testing tool.
- Use
docs/seo-image-checklist.mdto confirm every page has its own hero image and alt text.