
What we'd tell anyone evaluating their CMS for "AEO" right now
Hey folks, wanted to write this, because we get this question come up enough, that we wanted to try and answer it in a very opinionated way.
With every Sanity, Contentful and WordPress (migration) project we've scoped this year, somebody asks the same thing in the first call: what do we actually need to do about AEO? The vast majority of answers on LinkedIn are course-selling. A meager few are useful.
Instead, I'd like to give you a first-hand account of what we shipped on our own site this year (and a little bit in 2025), what moved in the logs after, and the bits we'd quietly skip.
The SEO half hasn't changed
We've always had clean titles. Real backlinks. JSON-LD derived from our fields, and only once a long time ago, spammed a bit of programmatic content. Everybody was doing it, give us a rest.
However, this part of the site, is a baseline and the big thing I would advise looking at before you touch anything ahead.
The new bit: content negotiation
Agents are a new visitor class. ChatGPT, Claude, Perplexity, every coding agent crawling for context. They mostly can't render JavaScript reliably, although this is changing. Their context windows are small enough that wasted tokens cost real money.
The fix has been in the HTTP spec since 1996. When the Accept header asks for text/markdown, serve markdown. When it asks for HTML, serve HTML.
The markdown twin of any page on our site is roughly 94% smaller than the HTML version. No fonts or analytics, just the actual content. Most headless CMSs let you wire this up in a route handler or middleware in an afternoon. WordPress is harder but doable via a plugin or a reverse proxy.
There's a great article about it here
Worth doing
- Publish an
llms.txtat the root, and asitemap.mdalongside your XML sitemap. Anthropic's fetcher and Perplexity's crawler both consume them. It costs nothing. - Make sure you connect a
publishedAtandupdatedAtvisibly on every blog post, and wire both intoBlogPostingJSON-LD. Recency is a heavy citation signal in AI answers right now. - Let GPTBot, ClaudeBot and PerplexityBot in via
robots.txt. Block scrapers that take your content without attribution. (Side note: GPTBot hit us at 17K requests in one hour the week after we shipped llms.txt. They read it.)
Skip
- Tools promising guaranteed citation in ChatGPT. Nobody on earth can promise that.
- Loading up your pages with every Schema.org type you can find. You need three or four. The rest is noise that confuses the parsers.
- Programmatic content/social tooling. You can streamline a lot of these with internal agents, but ultimately you want a human touch or you content will sound like ass.
We wrote a post about this if you want the long version.
Happy to get into specifics for any CMS in the comments. The patterns port pretty cleanly across the headless ones. WordPress I can vent about...