Public wikis serve crawlable pages without a separate build or SEO plugin. Private wikis stay hidden from search engines, apart from a page shared through a public link.
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 with the date of the last change. Pages also include a Twitter summary card with title, description and image.
By default, the description comes from the page's lead or, if it has none, its first non-empty block. An agent can set a different one for a page.
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
A page URL has the shape /{owner}/{wiki}/{id}-{slug}. The numeric id 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 engines are told which address is canonical.
JSON-LD: Article, WebSite, BreadcrumbList
The HTML of every public page contains 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.
The structured data, the link preview and <meta name="description"> all use the same description. Google can render the breadcrumbs as hierarchical chips in SERP.