⚠️ Breaking changes
- Schema.org support now requires
spatie/schema-org^5.0, which needs PHP 8.4. Composer no longer installs Kirby SEO next to older versions of the package.
✨ Enhancements
- List each indexable translation as its own sitemap entry, with the same
hreflangalternates on every entry - Leave out translations with
noindexfromhreflangtags - Use the Interactions API for the Gemini provider
- Update the default AI Assist models to Claude Haiku 5.5 (Anthropic), GPT-6 Luna (OpenAI and OpenRouter) and Gemini 3.5 Flash-Lite (Gemini). Models set in your config stay unchanged.
🐛 Bug fixes
- Generate a valid IndexNow key. The key was always empty, and search engines could not verify submissions.
- Keep the Search Console OAuth state in the session and only redirect back to Panel URLs
- Build the Search Console connect URL from the site URL, which fixes sites installed in a subfolder
- Send Anthropic system messages as the top-level
systemparameter - Escape
&in sitemap URLs, write URL elements in schema order and link sitemap index entries without a language prefix - Accept an int timestamp in
SitemapUrl::lastmod() - Fix errors in debug mode on pages that use
metaDefaults - Find anchors with numeric IDs such as
#2024in the link audit - Build pagination links in the link audit from the checked page instead of the Panel API URL
- Return the updated row after saving a page with a numeric ID in the SEO overview
- Show the inherited value in empty "Crop OG Image" fields. The site field is now a select like the page field.
- Return Markdown for paginated pages such as
notes.md/page:2 - Reject HTML tags in SEO writer fields edited through Kirby Agents
The first link check after the update checks all links again.
📖 Documentation
- Add a guide for upgrading from Kirby SEO 1.x
- Add pages for the SEO overview and background processing
- Fix outdated statements across the docs, e.g. for robots.txt, the Search Console setup and custom AI providers
Full Changelog: 2.0.0-rc.1...2.0.0-rc.2