Coding AI integrations
Back to blog

09 October 2026

AI integrations SEO GEO

Introducing SEO & GEO: One Statamic Addon for Search and AI Visibility

Our GEO audits kept finding the same thing: Statamic sites running three or four SEO addons that didn't know about each other, and nobody able to say whether AI assistants were reading the site at all. So we built one addon that does it all. It's open source.

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.

Written by

"If your spreadsheet has more logic than your software, we should talk."

About Bert

Got thoughts on this?

If this piece sparked an idea, a question, or a hard disagreement, we'd genuinely like to hear it. A short conversation is often the fastest way to figure out whether there's something worth building, buying, or simply leaving alone.
We use cookies and similar technologies to enhance your browsing experience, analyze site traffic, and personalize content. You can customize your preferences at any time.
Manage your cookie consent preferences.

These cookies are essential for the proper functioning of our website. They enable core functionality such as page navigation, access to secure areas, and basic user interface features.

These cookies enable the website to provide enhanced functionality and personalization. They may be set by us or by third-party providers whose services we have added to our pages.

These cookies allow us to count visits and traffic sources so we can measure and improve the performance of our site. They help us to know which pages are the most and least popular and see how visitors move around the site.

These cookies are used to deliver advertisements that are more relevant to you and your interests. They are also used to limit the number of times you see an advertisement and help measure the effectiveness of advertising campaigns.