SEO
Sitemaps, robots, de-indexing, social cards, and AI-readable output — mostly automatic.
SEO
Most search plumbing is automatic. Set siteUrl and you get a correct
sitemap, robots.txt, canonical metadata, per-page social images, and
AI-ready markdown endpoints with no further work.
What you get automatically
| Surface | Behavior |
|---|---|
sitemap.xml | Canonical pages only: default locale, default API version, minus anything de-indexed. Requires siteUrl |
robots.txt | Allows everything except /api/ and your noindex prefixes; links the sitemap |
| Page metadata | Title template, descriptions, canonical URLs, hreflang alternates |
| Social cards | Per-page OG images generated from title + description; site-wide image via ogImage |
llms.txt / llms-full.txt | A machine-readable index and full-content dump for AI tools |
| Raw markdown | Every page serves its markdown source at the same URL with .md appended |
De-indexing
One setting covers all three enforcement points (sitemap, robots, page metadata):
{ "seo": { "noindex": ["/internal", "/es"] } }Prefixes match on path boundaries — /es de-indexes the Spanish locale
without touching /essentials. For a single page, use frontmatter instead:
---
title: Internal runbook
noindex: true
---Structured data
Every indexable page emits JSON-LD (schema.org) that search engines use for
rich results — an Organization, WebSite, WebPage, BreadcrumbList, and
a TechArticle (or APIReference for endpoints), all linked in one @graph.
Noindexed pages emit none. Identify your organization once:
{
"seo": {
"organization": {
"name": "Acme",
"url": "https://acme.com",
"logo": "/logo/wordmark.svg"
}
}
}Global meta tags
seo.metatags injects arbitrary <meta> tags on every page — verification
tokens, a theme color, Twitter handle, locale:
{
"seo": {
"metatags": {
"theme-color": "#6C63FF",
"google-site-verification": "…",
"twitter:site": "@acme",
"og:locale": "en_US"
}
}
}Per-page SEO
Frontmatter overrides on any page:
---
title: Authentication
keywords: [oauth, api keys, tokens]
canonical: https://acme.com/docs/auth
ogImage: /og/auth.png
---keywords sets the meta keywords, canonical overrides the auto-built
canonical URL, and ogImage replaces the generated social image for that page
(it also becomes the Twitter card image).
Including hidden pages
By default the sitemap lists only navigable, indexable pages. To list
everything — including noindex pages — set:
{ "seo": { "indexing": "all" } }AI-readable docs
Language models are readers too. Out of the box:
/llms.txt— an index of every canonical page with title and description, the emerging standard for pointing AI tools at your docs./llms-full.txt— the entire corpus as one markdown document..mdsuffix — append.mdto any page URL for its raw markdown (try it on this page). Requests that prefer markdown via theAcceptheader get it at the bare URL as well.