Version 5.0.1
August 28, 2026
Fixed
- The settings screen no longer fatals after saving a sitemap URL. Craft's editable table posts
sitemapUrls[rowId][url], and the rows were stored in that shape rather than as the flat list of strings the setting holds. The next render handed Craft's own table template an array where a string was expected — Array to string conversion, on every request, with no way back into the settings screen to undo the setting that caused it. Rows are now flattened as they arrive, which also repairs a configuration already saved in the broken shape the first time it is read. - Configured sitemap URLs were being silently ignored. Same cause: none of the stored rows was a string, so the sitemap engine skipped every one of them and fell back to guessing.
robots.txtwrote the control panel as an absolute URL.Disallowtakes a path, and a crawler handedhttps://example.com/adminmatches it against the request path literally and therefore never at all — so the line published the control panel without hiding it.
Added
- Sitemap detection. With the sitemap table empty, Sanka now asks SEOmatic where its sitemap
index actually is, per site, before falling back to
/sitemap.xml. SEOmatic's index lives at/sitemaps-<groupId>-sitemap.xmland only redirects from/sitemap.xml, so the old guess sent every IndexNow engine through a hop it did not need and recorded a URL in the ledger that was not the one being read. The settings and submit screens name where the list came from. craft.sanka.robots()takes a hash of sections to leave out —header,crawlers,default,cp,extra,sitemaps,llms. A site whoserobots.txtis already generated by an SEO plugin can now take the AI crawler policy and nothing else, instead of a file that saysAllow: /twice and lists the sitemaps twice. A misspelt section is an error rather than one that quietly stays in.siteIdis a key of the same hash, and is still accepted on its own.- A “Disallow the control panel” setting, defaulting to Automatic: the control panel is
named in
robots.txtonly whencpTriggeris Craft's default. A customised trigger was customised to keep the control panel out of sight, androbots.txtis the most reliably fetched file on the site. Always and Never are there for operators who want the decision made explicitly./cpresources/is written either way; it leaks nothing. The settings screen shows exactly which lines your configuration produces.
Version 5.0.0
August 23, 2026
Initial release. Numbered 5.x to match the Craft version it targets, as the rest of the family is.
Indexing
- Google Indexing API:
URL_UPDATED/URL_DELETED, service-account (RS256 JWT) auth,multipart/mixedbatching up to 100 URLs,urlNotifications/metadatastatus lookups, and quota tracking against Google's 200-per-project-per-day default on a Pacific-midnight reset. - IndexNow: key generation, key file served from a route, per-host batching up to 10,000 URLs, and every documented response code mapped to a meaning rather than logged as a number.
- Sitemap resubmission over IndexNow (Pro).
- One ledger behind all of them: deduplication, cooldown, exponential backoff, retry limits,
retention, and
skippedas a first-class outcome that always says why. - Submit on save, delete, unpublish and restore, driven by per-section rules.
- Dry run, on by default, recording what would have been sent.
GEO (Pro)
llms.txtandllms-full.txt, generated from Craft's content and cached.- A registry of 22 AI agents grouped by what they are actually for, with the cost of blocking each
one stated, rendered to
robots.txt. - An AI crawler visit log, with forward-confirmed reverse DNS verification.
- A 20-check GEO readiness audit across structure, attribution, machine readability and citability.
Everywhere
- Control panel: overview, submit console, submissions log, crawler policy and log, GEO screen, and a panel on the entry edit screen.
- Console commands for submitting, draining, sweeping, auditing, verifying and diagnosing.
craft.sanka.*Twig variable.- 162 integration checks.