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.txt wrote the control panel as an absolute URL. Disallow takes a path, and a crawler handed https://example.com/admin matches 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.xml and 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 outheader, crawlers, default, cp, extra, sitemaps, llms. A site whose robots.txt is already generated by an SEO plugin can now take the AI crawler policy and nothing else, instead of a file that says Allow: / twice and lists the sitemaps twice. A misspelt section is an error rather than one that quietly stays in. siteId is 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.txt only when cpTrigger is Craft's default. A customised trigger was customised to keep the control panel out of sight, and robots.txt is 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/mixed batching up to 100 URLs, urlNotifications/metadata status 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 skipped as 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.txt and llms-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.