Documentation
Docs
Introduction
Getting Started
Tutorial: build an app
Core Concepts
Routing
Server-Side Rendering
Mimir, state management
Pages & Layouts
API Routes
Styling & Theming
Building & Deploying
API Reference
Guides
Recipes
FAQ (use cases)
SEO
Because rune renders real HTML on the server, SEO works without tricks: crawlers and link unfurlers see your
content and your meta tags. ekko:rune/seo's createSEO() generates those tags, <title>, description,
Open Graph, Twitter cards, canonical, favicons, robots, and sitemaps, from a single config plus per-page
overrides.
Set up once
Inject the tags into <head>
seo.headTags(overrides?) returns the <title>, <meta>, and <link> markup. Build your head string at
startup and pass it to every page (most tags are site-wide):
Per-page meta
Override per page by passing fields to headTags:
headTags(overrides) merges the overrides onto the site defaults, so you only specify what differs for this
page.
What headTags emits
A typical output (abridged):
robots.txt and sitemap.xml
createSEO can also produce a robots file and a sitemap. Serve them from API routes:
For a sitemap whose routes are data-driven (e.g. one entry per doc/post), pass sitemap.dynamicRoutes a
function that returns the list, the same data you used to register the routes.
Structured data (JSON-LD)
For rich results, emit JSON-LD and add it to a page's head:
Checklist
- [ ]
createSEOconfigured withsite.url, a defaultdescription, OG image, Twitter card. - [ ]
head(withseo.headTags()) passed to every route. - [ ] Per-page
titleand, where useful,description/og.imageoverrides. - [ ]
robots.txtandsitemap.xmlAPI routes. - [ ] Canonical URLs for pages reachable by multiple paths.
That completes the SSR chapter. Next, the heart of rune's state model, Mimir.