AEO for Umbraco: Your Next Visitor Is an AI

Automation Umbraco

July 16, 2026

We built a free Umbraco extension that makes your site readable to ChatGPT, Claude, Perplexity and the other answer engines, and shows you exactly which AI crawlers are already visiting. Here's why Answer Engine Optimization matters now, and what happened when we switched it on for our own site.

Search traffic is turning into answer traffic

For twenty years, being findable meant one thing: rank in Google, earn the click. That model is eroding fast. A growing share of questions never reach a search results page at all. They're asked directly in ChatGPT, Claude, Perplexity or Copilot, and answered in place. The user gets a synthesised answer with a handful of cited sources, and those citations are the new page one.

This is what Answer Engine Optimization (AEO) is about: making sure that when an AI assistant answers a question your business could answer, your content is what it draws on, and your name is what it cites.

The good news is that AEO is not a dark art. Unlike classic SEO, where you reverse-engineer a ranking algorithm, answer engines have fairly clear preferences:

  • They prefer clean, structured text over rendered HTML. Navigation, cookie banners, script tags and styling are noise that wastes their context window.
  • They read Markdown natively. Emerging conventions like llms.txt exist precisely so AI crawlers can discover and ingest a site efficiently.
  • They trust verified, structured identity. Organization and article markup (JSON-LD) tells an engine who is speaking, not just what is said.

The bad news: almost no CMS produces any of this out of the box. That's the gap we decided to close for Umbraco.

Introducing AEO for Umbraco, free on the Umbraco Marketplace

We've released AEO for Umbraco, a free extension that makes an Umbraco site answer-engine-ready the moment it's installed. No editor work, no content changes, no templates to edit:

dotnet add package Flowcourier.Umbraco.AEO

That's the whole setup. The package self-registers, and on the next run your site gains three new surfaces, all generated live from your published content so they're never stale:

/llms.txt - a curated index of your site following the llms.txt standard: title, summary, and a grouped list of every indexable page, each linking to its Markdown version. Think of it as a sitemap written for language models.

/llms-full.txt - your entire site rendered to Markdown in a single document. Ideal when someone (or something) wants to feed your whole site into a model's context or a RAG pipeline in one request.

Any page as Markdown - append .md to any URL (/products/widget.md) and you get a clean Markdown rendering of that page instead of HTML. Rich text, Block List and Block Grid content are all converted; layout, theme and system properties are stripped out so the output is pure content.

Everything respects your existing content model: no-indexed pages stay out, sitemap exclusions are honoured, and multilingual sites get per-culture output that follows the same domain configuration Umbraco itself uses for routing.

All behaviour is configured in appsettings.json, with sensible defaults, and the backoffice shows a read-only view of the settings active on your site:

Read-only preview of the active AEO settings in the Umbraco backoffice

The part most AEO tooling forgets: discovery

Generating Markdown is only half the job. A crawler that lands on your HTML page needs to find out the Markdown version exists. The extension makes every rendered page self-describing:

  • Each HTML page carries a Link: <…/page.md>; rel="alternate"; type="text/markdown" response header and a matching <link> tag in <head>.
  • A client can skip the .md suffix entirely and request the normal page URL with Accept: text/markdown, and content negotiation returns the Markdown representation directly.
  • All AEO responses support proper HTTP caching (ETag, Last-Modified, 304 Not Modified), so aggressive AI crawlers revalidate cheaply instead of re-downloading your site.
  • Optionally, the package adds discovery lines to your robots.txt pointing at the llms.txt files.

Does discovery actually work? Within days of installing it on flowcourier.com, we watched Amazon's crawler request an HTML page, notice the Markdown alternate, and come back for the .md version instead. The mechanism isn't theoretical: the crawlers are already using it.

Structured data, without the templates

The extension also injects a schema.org JSON-LD graph into every rendered page: WebSite and Organization markup on the homepage, WebPage or Article nodes on every page (with published dates and authors resolved from your content), breadcrumbs, and FAQ markup wherever question/answer pairs are found in your content.

The one thing it never does is guess your identity. Organization details (name, legal name, logo, official profiles) are the core trust signal AI engines use to verify who's behind a site, so editors fill them in once on a dashboard in the backoffice. Two minutes of work, and every page on the site carries verified identity markup.

The Structured Data dashboard in the Umbraco backoffice where editors fill in the organization identity

See who's crawling you: the AEO Dashboard

Here's the part that surprised us most. The extension includes an AEO Dashboard in the Umbraco backoffice (under Settings) that recognises the user agents of 20+ AI crawlers (OpenAI, Anthropic, Perplexity, Google, Meta, Apple, Amazon, ByteDance and more) and records every visit.

The AEO Dashboard in Umbraco showing AI crawler traffic, traffic share and recent visits

We installed it on our own site a few days ago. The very first full day: 136 hits from AI crawlers. Not humans, not Googlebot. AI systems, reading our content.

The breakdown was even more interesting than the volume:

  • ByteDance's Bytespider was the most active crawler on our site, ahead of Anthropic, OpenAI and Amazon.
  • Most traffic was training crawlers: models ingesting content for future training runs.
  • A meaningful share was AI search: engines fetching pages to answer a live query.
  • Around 8% were live assistant fetches: a real person, in a real conversation with an AI, whose assistant went and read our site to answer them.

That last number is the one to watch. Every one of those fetches is a moment where your content either answers a prospect's question, or a competitor's content does.

The dashboard shows hits per crawler with operator and purpose (training, AI search, or live assistant), the HTML-vs-Markdown ratio (is your AEO surface actually being used?), top pages, and a recent-visits log, over 7-day and 30-day views.

And because we're an EU company building for EU businesses, analytics is GDPR-safe by design: no IP addresses, no raw user-agent strings, no query strings are ever stored, just which bot, which path, and what was served. There is no personal data to worry about, no consent banner implications, nothing to add to your processing records.

What this means in practice

If you run a business on Umbraco, here's the honest summary:

  1. AI crawlers are already on your site today. You just can't see them, and they're reading your slowest, noisiest format.
  2. Making your content answer-ready is now a one-package install. What used to require custom middleware, converters and schema templates is dotnet add package and a deploy.
  3. You can finally measure it. AEO without analytics is faith-based marketing. The dashboard turns "are AI engines reading us?" into a number you can track month over month.

One honest caveat: the extension is built for sites where Umbraco renders the front end (MVC/Razor). If you run a fully headless setup with a separate front-end host, the discovery headers and injected markup never reach your public site, so it's not a fit there.

What's next

This free release is the foundation: make the content readable, make it discoverable, measure who's reading it. The next layer we're exploring goes further: analysing your content the way an answer engine does, and suggesting how to restructure it around the questions people actually ask. Closer to what enterprise platforms are starting to do for AEO, but native to Umbraco.

The dashboard also opens the door to acting on crawler data, for example reviewing which bots you welcome and rate-limiting or blocking the ones you don't. If that's something your organisation needs, we'd like to hear about it.

Get started

Want help making your Umbraco platform visible to the AI era, or curious what the crawler data would show for your site? Get in touch and we'll take a look together.