Last updated July 11, 2026

SEO & Metadata

3 minutes read

folio.md handles the SEO essentials for every page at build time. You don’t need to configure anything for basic SEO to work.

What folio.md does for you

For every page, folio.md automatically generates:

  • Browser tab title: formatted as {page title} | {site name}
  • Search engine description: from your page description, or the site-level fallback from folio.config.ts
  • Canonical URL: built from siteUrl in folio.config.ts; omitted for pages marked noIndex: true
  • Social sharing cards: Open Graph and Twitter card tags so links preview correctly on social platforms
  • Social sharing image: a generated image for every page; see Open Graph images
  • Structured data: JSON-LD to help search engines understand your content; see Structured data
  • Sitemap: /sitemap.xml listing all public pages; see Sitemap
  • Atom feed: /feed.xml listing all public pages; see Atom feed
  • Robots file: /robots.txt controlling crawler access; see Robots.txt
  • Author credit: included in metadata when you add author: to a page
  • Mobile theme color: derived from your configured theme gradient

Customizing SEO per page

Control metadata on individual pages through page settings:

What you wantWhat to set
Description in search snippetsdescription: on the page
Author creditauthor: on the page
Extra search keywordskeywords: on the page
Hide from search engines and the sitemapnoIndex: true on the page

See Page Settings for the full list of per-page options.

To change SEO settings across the whole site, use folio.config.ts. See Configuration for details.

Open Graph images

folio.md generates a social sharing image for every page at build time using Satori (opens in new tab) and Sharp (opens in new tab). Each image is 1200×630 px and includes the page title, description, and site name, styled with your configured gradient colors.

These images appear automatically when someone shares a link to your site on social platforms. You don’t need any extra configuration.

Sitemap

folio.md generates /sitemap.xml at build time, listing every page that doesn’t have noIndex: true. Each entry includes a lastmod date from git history where available.

folio.md links to the sitemap from every page so search engines can discover it automatically.

Atom feed

folio.md generates /feed.xml at build time, listing every page without noIndex: true, sorted by most recently modified. Each entry includes the page title, description, canonical URL, and dates from git history.

folio.md links to the feed from every page so feed readers can discover it automatically.

Robots.txt

folio.md generates /robots.txt at build time. By default, it allows all crawlers to index all pages. To change this, set seo.robots in folio.config.ts. See Configuration for details.

Structured data

folio.md injects JSON-LD structured data into every page:

  • WebSite: site name and URL on every page
  • Article: title, description, author, and dates on every non-noIndex page
  • BreadcrumbList: the sidebar path to the current page, on pages nested at least two levels deep

folio.md generates this automatically from your page settings and folio.config.ts. No configuration needed.