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

SurfaceBehavior
sitemap.xmlCanonical pages only: default locale, default API version, minus anything de-indexed. Requires siteUrl
robots.txtAllows everything except /api/ and your noindex prefixes; links the sitemap
Page metadataTitle template, descriptions, canonical URLs, hreflang alternates
Social cardsPer-page OG images generated from title + description; site-wide image via ogImage
llms.txt / llms-full.txtA machine-readable index and full-content dump for AI tools
Raw markdownEvery 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.
  • .md suffix — append .md to any page URL for its raw markdown (try it on this page). Requests that prefer markdown via the Accept header get it at the bare URL as well.