> [Maxim](https://wikilayer.org/smee-again) / [Wikilayer authoring guide](https://wikilayer.org/smee-again/wikilayer-howto) / SEO out of the box

# SEO out of the box

**Contents:**

- [Server-rendered HTML](#server-rendered-html)
- [Open Graph and Twitter cards](#open-graph-and-twitter-cards)
- [Sitemap and robots.txt](#sitemap-and-robots-txt)
- [Slugged URLs and 301 redirects](#slugged-urls-and-301-redirects)
- [JSON-LD: Article, WebSite, BreadcrumbList](#json-ld-article-website-breadcrumblist)

Every public wiki is discoverable and crawlable by default: no author configuration, no separate static-site build step. The features below ship with the engine. (Private and self-hosted wikis are not indexed; this applies to [public](page:3112) visibility.)

## Server-rendered HTML

Pages render to plain HTML on the server, no SPA shell. `curl`, screen readers, and search engine bots see the content directly; no JavaScript needed for the first paint.

## Open Graph and Twitter cards

Every public page emits the full Open Graph set (`og:site_name`, `og:title`, `og:description`, `og:url`, `og:type`, `og:image`, `og:locale`) plus `article:modified_time` for freshness. Twitter ships the `summary` card variant with title, description, image.

Description comes from the first non-empty block by default; agents can override per page through the `set_page_seo` [MCP](page:4409) tool when the auto-summary catches a quote, callout, or list instead of a topic sentence.

## Sitemap and robots.txt

`/sitemap.xml` is a sitemap index that points at one `/sitemap-wiki:N.xml` per public wiki. Each per-wiki sitemap lists the home plus every page, with the row's `updated_at` as `<lastmod>`. Private and archived wikis are filtered out before the index is generated.

`/robots.txt` is served at the root, references the sitemap inline, allows `/`, and disallows the auth, MCP, manage, and history routes.

## Slugged URLs and 301 redirects

URLs follow the shape `/{owner}-{slug}/{wiki}-{slug}/{page}-{slug}`. The numeric ID at the front stays stable across renames; the slug is for humans. A request to a stale slug 301s to the canonical URL, so external links keep working and search-engine link equity transfers.

## JSON-LD: Article, WebSite, BreadcrumbList

Every public render emits a `<script type="application/ld+json">` block. Pages get an `Article` schema (`headline`, `dateModified`, `author`, `url`, `inLanguage`, `isPartOf`) plus a `BreadcrumbList` walking owner → wiki → page. Wiki home gets `WebSite` plus a two-step `BreadcrumbList`.

Description flows from the same `set_page_seo` override so structured data, unfurl preview, and `<meta name="description">` all agree. Google can render the breadcrumbs as hierarchical chips in SERP.
