Meta & Open Graph
Titles, descriptions and social cards per entry, with smart fallbacks pulled from your content.
Everything search engines need, managed from the admin and rendered by your themes through filters. One source of truth for meta, sitemaps, canonical URLs, structured data and redirects.
Every capability integrates with permissions, validation, migrations and the headless API. Nothing bolted on the side.
Titles, descriptions and social cards per entry, with smart fallbacks pulled from your content.
A sitemap.xml that stays current as you publish. Multi-sitemap support for large sites, zero configuration.
Manage redirects in the admin or import them in bulk. Changed slugs are captured automatically so old links never break.
JSON-LD for articles, products and breadcrumbs out of the box, extendable per collection.
Canonical URLs and index controls, set per entry or as a collection default.
The same meta renders in PHP themes through filters, from one definition in the admin.
Enabling the module adds an SEO panel to every collection. In a theme, a single helper renders the full head, complete with fallbacks and structured data.
Override any tag on any entry; otherwise inherit sensible defaults.
Meta written once is available to themes and the API together.
Lengths and formats are checked before anything is saved.
<head>
<title><?= e(apply_filters('seo_meta_title', $post['title'], $post)) ?></title>
<meta name="description" content="<?= e(apply_filters('seo_meta_description', '', $post)) ?>">
</head>
// with the SEO module active, these filters supply
// the resolved title and description for this entry<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://acme.eu/journal/field-notes</loc>
<lastmod>2026-03-12</lastmod>
</url>
</urlset>Added to every collection, with live previews of the search and social snippet.
Automatic, paginated, and pinged to search engines on publish.
Wildcards, import/export and automatic slug-change capture.
JSON-LD generators for common types, extendable in code.
Full documentation. Installation, configuration, every option and the API reference live in the SEO module docs. Building your own instead? Read building a module.
Drop it in public/modules, activate it in the admin Modules screen, and its migrations run on activation. Reviewed, supported, and free to self-host.