Answer engine optimisation for Umbraco
Being on page one of Google is no longer the finish line. Here's what to change in your Umbraco site so ChatGPT and Perplexity can cite it.
What AEO actually is
Search engines used to send you traffic. Answer engines summarise you instead - and either cite you or don't. The mechanics are familiar (clean markup, real structure, credible sourcing) but the target has moved from ranking to being quotable.
A growing share of questions never reach a results page at all. They're asked directly in ChatGPT, Claude, Perplexity or Copilot and answered in place, with a handful of cited sources. Those citations are the new page one, and Answer Engine Optimisation is the work of 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.
If a paragraph can't stand alone as an answer, it won't be used as one.
In Umbraco this is mostly a content-model question. Every block that renders prose should be able to emit its own heading, its own schema, and a short lead the model can lift.
<script type="application/ld+json">
{ "@type": "FAQPage", ... }
</script>
The good news is that answer engines have fairly clear preferences, which makes this more tractable than classic SEO: they prefer clean, structured text over rendered HTML, they read Markdown natively (conventions like llms.txt exist precisely so AI crawlers can discover and ingest a site efficiently), and they trust verified, structured identity. Almost no CMS produces any of this out of the box. That's the gap we closed with AEO for Umbraco, a free Marketplace extension - everything described below ships from a single install:
dotnet add package Flowcourier.Umbraco.AEO
Structured data
Structured data is how an answer engine verifies who is speaking, not just what is said. Every rendered page should carry a schema.org JSON-LD graph: 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.
The one thing tooling should never do is guess your identity. Organisation 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.

Writing for citation
Being quotable is partly editorial - short leads, headings that match real questions, paragraphs that stand alone - and partly technical: serve your prose in the format models actually want to read. Navigation, cookie banners and script tags are noise that wastes a crawler's context window. Your site should offer three clean surfaces, generated live from 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. A sitemap written for language models.
/llms-full.txt - your entire site rendered to Markdown in a single document, ready for a model's context window 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 instead of HTML. Rich text, Block List and Block Grid content are converted; layout, theme and system properties are stripped so the output is pure content.
Discovery matters as much as the format. Each HTML page should carry a Link: rel="alternate"; type="text/markdown" response header and a matching <link> tag in <head>; content negotiation should honour Accept: text/markdown on the normal URL; and all responses should support proper HTTP caching (ETag, Last-Modified, 304 Not Modified) so aggressive AI crawlers revalidate cheaply. This isn't theoretical: within days of switching it on for flowcourier.com we watched Amazon's crawler request an HTML page, notice the Markdown alternate, and come back for the .md version instead.
Measuring it
AEO without analytics is faith-based marketing. The extension's AEO Dashboard in the Umbraco backoffice recognises the user agents of 20+ AI crawlers - OpenAI, Anthropic, Perplexity, Google, Meta, Apple, Amazon, ByteDance and more - and records every visit: which bot, which path, what was served, over 7-day and 30-day views. No IP addresses, no raw user-agent strings, no query strings are ever stored, so it's GDPR-safe by design.

Our own first full day after installing: 136 hits from AI crawlers. ByteDance's Bytespider was the most active, ahead of Anthropic, OpenAI and Amazon. Most traffic was training crawlers, a meaningful share was AI search answering live queries, and around 8% were live assistant fetches - a real person, mid-conversation with an AI, whose assistant went and read our site to answer them. Every one of those fetches is a moment where your content either answers a prospect's question, or a competitor's content does.
If you run a business on Umbraco, the summary is short: AI crawlers are already on your site today; making your content answer-ready is now a one-package install (Umbraco 17.5+, sites where Umbraco renders the front end); and you can finally measure it month over month. The developer guide and configuration reference are at flowcourier.com/docs, and flowcourier.com runs the extension in production - try flowcourier.com/llms.txt or append .md to any page. Curious what the crawler data would show for your site? Get in touch and we'll take a look together.