Last updated June 23, 2026

SEO & Metadata

2 minutes read

Page metadata

The layout injects the following <head> tags automatically from frontmatter and folio.config.ts:

  • <title>: {page title} | {site name}
  • <meta name="description">: page description or site-level fallback
  • <meta name="author">: from the page author frontmatter field when set
  • Open Graph tags: og:title, og:description, og:image, og:url, og:locale
  • Twitter / X card tags
  • <link rel="canonical"> derived from siteUrl in folio.config.ts
  • <meta name="robots"> set to noindex, nofollow when noIndex: true in frontmatter
  • <meta name="theme-color"> derived from the active theme gradient

Open Graph images

folio.md automatically generates a /og/{slug}.png image for every page at build time using Satori and Sharp. The image includes the page title, description, and site name, styled with the configured gradient colors. No extra configuration required.

folio.md uses the auto-generated image for og:image and twitter:image. No configuration required.

Sitemap

folio.md generates a /sitemap.xml at build time. It includes every page that doesn’t have noIndex: true in its frontmatter, with a <lastmod> date from git history where available.

folio.md also injects a <link rel="sitemap"> tag into every page’s <head> automatically.

Atom feed

folio.md generates an Atom 1.0 feed at /feed.xml at build time. It includes every page that doesn’t have noIndex: true, sorted by most recently modified. Each entry includes the page title, description, canonical URL, and published and updated dates from git history where available.

folio.md also injects a <link rel="alternate"> tag into every page’s <head> so feed readers can discover the feed automatically.

Structured data

folio.md injects JSON-LD structured data into every page’s <head>:

  • WebSite: site name and URL on every page
  • Article: title, description, author, publish date, and last-modified date on non-index pages that don’t have noIndex: true
  • BreadcrumbList: sidebar path to the current page

folio.md generates this automatically from frontmatter and folio.config.ts. No configuration required.