Atris
BlogEnter

How We Improved Our Own AEO: We Ran Our AI-Readiness Scanner on Ourselves

Keshav Rao–July 1, 2026

AEO is AI Engine Optimization: getting read, cited, and used by AI answer engines like ChatGPT, Claude, Gemini, and Perplexity, instead of ranked by Google. Unlike SEO, which optimizes for a crawler that indexes links, AEO optimizes for a model that reads your page and answers a buyer's question from it. We build an AEO product. So we did the honest thing and pointed it at ourselves.

The result was uncomfortable and useful: several of our own most important pages were close to invisible to AI. This post is the before, the after, and the single root cause behind most of it.

What we measured

Our scanner scores a page on two dimensions. Agent experience asks whether the page ships a machine-readable surface. Answer readiness asks whether an AI can actually answer buyer questions from the page's text. We ran it across atris.ai. Here is the starting line.

PageAnswer readiness (before)Readable text an AI saw
/aeo837,777 characters
/what-is-atris795,528
/audit472,605
Home413,405
/pricing41994
/about41811
/enterprise018

Our dedicated answer pages scored fine. Our money pages, the ones a real buyer's AI checks first, did not. The enterprise page served eighteen characters of readable text.

Why our enterprise page shipped 18 characters

The enterprise page was a client component that returned nothing until the browser mounted:

'use client'
export default function EnterprisePage() {
  const [mounted, setMounted] = useState(false)
  useEffect(() => setMounted(true), [])
  if (!mounted) return null   // <- the server ships an empty page
  return ( /* the whole page */ )
}

A human with a browser sees a full page, because their browser runs the JavaScript and mounts the component. An AI answer engine and most crawlers do not. They read the initial HTML, and the initial HTML was empty. Every claim about our enterprise offering existed only after JavaScript ran, so to the systems that increasingly decide what a buyer reads, the page said nothing.

This was the pattern almost everywhere we scored low. It was not missing content. It was content that never reached the server response. The real enemy of AEO is client-only rendering, not thin copy.

The fix

The fix is boring, which is the point. Render the answer in the HTML.

For each weak page we added a server-rendered answer layer: a canonical one-sentence definition, direct answers to the questions buyers actually ask an AI, a short comparison so the model can place us in a category, a visible last-updated date, and JSON-LD so the same facts are available as structured data. We kept the existing interactive hero on every page. We only stopped hiding the words.

Every claim is grounded in what we already publish at atris.ai/llms.txt. We did not invent certifications or prices to win points. Where we could not source a claim, we did not make it.

Before and after

We re-scored each page with the same engine after shipping the fix.

PageAnswer readiness beforeAfter
/enterprise0100
Home41100
/pricing41100
/about41100

The score is not the goal. The score is a proxy for a real question: if a buyer asks an AI "what does Atris cost" or "how is Atris different from a chatbot," can the AI answer from our page? Before, on our pricing page, it could not read a single price. Now the prices are in the HTML.

We did it to our own CLI too

Atris ships a command-line tool that we want AI coding agents to adopt. We scored its repository surface the same way and it came back at 20 out of 100 on agent experience. It had a workflow, but no machine-readable entrypoint and no structured action contract, the two things an agent needs to use a tool without guessing.

So we shipped two files to the repo: an llms.txt that is the machine-readable agent entrypoint, and an agent.json tool manifest that lists each command's inputs and outputs plus the schema of the receipt the CLI returns. Re-scored on the same engine, the repository went from 20 to 100. An agent landing on it now finds the entrypoint, loads the contract, follows the workflow, and verifies completion against a receipt, instead of scraping prose and hoping.

How to check your own site

You do not need our product to start. Open your most important page, view source, and search the raw HTML for the sentence that says what you do. If it is not there, an AI cannot read it either, no matter how good the page looks in a browser. The most common cause is a component that renders only on the client. Move the answer into the server response and you have done most of the work.

What is still open

We are honest about the ones we have not finished. Our /audit tool page is still a client-rendered form, and the same fix applies. We are shipping it next, along with a command that generates and verifies this kind of agent surface for any repository, so every workspace gets an AI-readable surface by default.

We build AEO. The fastest way to trust a tool is to watch the people who make it use it on themselves. This is us doing that, numbers and all.

Source: atris.ai/llms.txt. Last updated July 1, 2026.

© 2026 Atris Labs

Back to Blog
Atris Labs

San Francisco, CA

Product
Workspace
Company
AboutBlogCareers
Legal
PrivacyTerms
© 2026 Atris LabsSan Francisco, CA