Why we built it
Over the past year we've audited a fair number of websites for search and AI readiness. When the site ran on Statamic, the findings were remarkably consistent.
The SEO setup was rarely one thing. It was a meta tag addon, a separate sitemap addon, a redirect package, sometimes a hand-rolled JSON-LD partial in the layout, and occasionally a GEO addon on top. Each had its own settings screen and its own idea of what the page title should be. When two of them disagreed, the page shipped both answers.
And there was one question almost nobody could answer: are AI assistants actually reading this site? Plenty of sites had added an llms.txt file. Very few had any way of knowing whether ChatGPT, Claude or Perplexity had ever requested it.
So we built one addon that replaces that stack. It's called SEO & GEO, it's open source under the MIT license, and it's available now on Packagist and GitHub.
What it does
The addon covers everything a Statamic site needs to be found, with one set of settings, one section in the control panel, and one template tag. Here's what that includes, grouped by who benefits.
For editors
Live previews. Every SEO tab starts with a preview of the Google result and the social card, updated as the editor types. Titles and descriptions are truncated by measured pixel width, which is how Google actually cuts them, rather than by character count. The preview warns when a description is missing, when a title runs too long, or when the page is hidden from search.
One small detail we're fond of: the Google preview deliberately shows no image. Google picks its thumbnail from the page content, not from the sharing image, and pretending otherwise would mislead the editor.
Meta tags. Title, description, canonical, robots, Open Graph, Twitter cards, hreflang and search console verification, all from one tag. Page-level fields override site-wide defaults, and on a multisite install each site can override those defaults again.
For search engines
Sitemap. Served at /sitemap.xml, built from published, routable entries. Pages or whole collections can be excluded. On multisite installs it adds hreflang alternates, and it switches to a sitemap index automatically once the URLs no longer fit in a single file.
Redirects. Exact, wildcard and regex rules (301, 302, 410), scoped per site, with query string support for legacy URLs like /index.php?id=42. Redirects are only checked when a URL would otherwise return a 404, so normal page loads pay nothing for them.
More importantly: when a page's URL changes, a renamed slug, a move in the structure, a changed date, a redirect is created automatically. This is the failure we saw most often in audits. Someone tidies up a slug, the old URL starts returning 404, and months of accumulated search value quietly disappear.
404 log. Every miss is logged per site, with hit counts and referrers. Any entry can be turned into a redirect with one click.
For AI assistants
Structured data. Organization or LocalBusiness, WebSite and BreadcrumbList site-wide, plus a per-page FAQ, Article, Service, Person, Product or Event node. A raw JSON-LD field covers anything else. Coordinates are geocoded from the business address through OpenStreetMap and cached.
llms.txt. Served at /llms.txt, describing the site and its pages for AI assistants, with an editable summary.
robots.txt with an AI crawler policy. Allow all AI crawlers, block all of them, or pick individually, managed from the control panel.
AI crawler log. This is the feature we'd point to first. The addon records which assistants, ChatGPT, Claude, Perplexity, Gemini and others, actually request the site, and surfaces that activity in a dashboard widget alongside recent 404s.
What it doesn't do
It's worth being clear about this, because the GEO space is already full of overpromising.
No addon can get your site cited by an AI assistant. Structured data and an llms.txt file make a site easier for AI systems to understand. Whether a given assistant then mentions your business in a given answer is decided elsewhere, by processes nobody outside those companies controls. llms.txt in particular is a proposed convention, not an established standard, and there's no solid evidence yet that it drives citations on its own.
That's exactly why the crawler log matters to us. It doesn't promise an outcome. It replaces guesswork with observation: you can see which assistants visit, how often, and whether that changes after you improve your content. Readiness and measurement are what can honestly be delivered. The addon is built around those two things.
A few technical choices, for developers
It follows the site's storage. Flat file by default: settings and redirects in YAML under version control, logs in storage. If the project uses statamic/eloquent-driver, everything the addon owns moves to the database too, without configuration. Commands exist to move data in either direction.
Migration is built in. php please vulpo:seo:migrate --dry-run shows what would change when coming from SEO Pro or our own earlier vulpo/geo addon. Until you migrate, legacy field handles are still read at render time, so swapping addons doesn't break anything on the spot. Redirects can also be bulk-imported from CSV.
The control panel script is buildless. It registers through the globals Statamic already exposes, so there's no npm dependency, no Vite config, and nothing to rebuild when Statamic ships a new minor version. The CP screens use Statamic's own UI components, so they look like the rest of the control panel.
Sensible caching. /sitemap.xml, /robots.txt and /llms.txt send Cache-Control headers with stale-while-revalidate, so a CDN never makes a crawler wait for a rebuild. Entries that only redirect are left out of the sitemap and llms.txt, so you never advertise another page's URL as your own.
It requires PHP 8.3 and Statamic 6. Installation takes two commands:
composer require vulpo/seo-and-geo
php please vulpo:seo:index-uris
Then add {{ vulpo_seo }} to your layout's <head>. Settings live under Tools → SEO. The README documents the rest, including the honest list of known limits.
What this means if you run a Statamic site
If you're not a developer, the short version is this: your website probably relies on several separate tools to be visible in search, and those tools don't always agree with each other. Replacing them with one addon means fewer places where things can silently go wrong, like a renamed page that stops being findable, or two conflicting titles in your search results.
It also means you can finally see whether AI assistants are paying attention to your site. That won't tell you whether they'll recommend you. It will tell you whether they're reading.
Try it, or let us look at your site
The addon is free and open source. Developers can find it on GitHub and Packagist, issues and pull requests are welcome.
If you'd rather know where your site stands before changing anything, our free GEO audit checks your structured data, meta tags and AI readiness, and shows what would actually make a difference.