Your Buyers Ask the AI First
Ranking used to be the finish line. Now the decision happens inside an answer you never see. What SEO, AEO, and GEO each take, what I found when I audited my own site, and how to scale content without getting flagged as spam.
Try this. Open ChatGPT, Claude, or Perplexity and ask the question your best client asked before they found you. “Who can audit an app we built with AI?” “What’s the best commission software for an insurance agency?” Read the answer. Count the companies in it. Then check whether yours is one of them.
For most companies I talk to, it isn’t. Not because they’re bad at what they do. Because the machine answering the question couldn’t find them, couldn’t read them, or couldn’t confirm anything about them.
Search used to end in ten blue links and a click. More and more, it ends in a paragraph. The buyer reads the paragraph and acts on it. If you’re not in the paragraph, you weren’t in the race.
Three Acronyms, One Job
The industry has a new acronym every quarter. Three of them matter, and they describe layers, not rival disciplines:
- SEO, search engine optimization. Can a search engine crawl this page, understand it, and rank it? The foundation everything else stands on.
- AEO, answer engine optimization. Can this page be lifted as the answer? Featured snippets, Google’s AI Overviews, voice assistants. Question-shaped headings and short, direct answers win here.
- GEO, generative engine optimization. Will an AI assistant cite you, or recommend you by name? ChatGPT, Claude, Perplexity, Gemini, and Copilot favor sources they can reach, parse, and corroborate.
People pitch these as replacements for each other. They aren’t. Assistants that answer from the live web still find pages through search indexes and their own crawlers. A page that can’t be crawled and indexed rarely gets cited. GEO without SEO is a beautiful summary on a site nobody indexed.
What the Machines Actually Read
Strip away the jargon and every engine asks the same four questions about your site.
Can I get in? Your robots.txt decides which crawlers are welcome, and your CDN’s bot settings can overrule it. Some CDNs now block AI crawlers by default or with a single toggle. I’ve seen companies flip that switch for “security” and quietly disappear from the assistants their buyers use every day.
Can I tell what this is? A human sees a services page. A machine sees markup. Schema.org structured data, written as JSON-LD, tells it plainly: this is an organization, these are its services, this person wrote this article on this date, these are the questions and answers. Canonical URLs tell it which address is the real one.
Can I quote it? Engines lift answers, not essays. A heading phrased as the question, a first sentence that answers it, then the evidence. The same shape that helps a skimming human helps a model that needs one clean sentence to cite.
Can I confirm it? Assistants are cautious about claims they can only find in one place. If your site, your LinkedIn, your directory listings, and your partners all describe you the same way, the model can corroborate it. If they all say something slightly different, you look like four companies.
Then there’s llms.txt: a Markdown file at the root of your site that tells AI agents who you are and where your important pages live. It’s a proposal, not a standard, and Google doesn’t use it for ranking. Add one anyway. It costs an hour, and any agent that looks for it gets a clean map of what you sell and how to buy it.
Where It Started: My Own Site
When I first realized how much AEO and GEO were going to matter, I didn’t start with a client. I started with georgerios.com, and asked the question I now ask everyone: what does a machine see when it looks at this site? The answer was humbling.
- Structured data on one page. The homepage described me and my company. Every other page had a title, a description, and nothing else. Not one article declared who wrote it or when.
- Canonicals that redirected. The canonical URLs I did have pointed at addresses ending in
.html, which redirected. I was telling Google the real page was one that sent you to the real page. - No llms.txt. An agent asking what I did got a 404.
- A missing article. One published post wasn’t in the sitemap at all.
- Crawlers allowed. robots.txt let everyone in, though it said nothing specific about AI crawlers.
None of it was visible to a human visitor. All of it was visible to a machine. That was the moment the gap between how a site looks and how it reads stopped being theoretical for me.
Fixing it took an afternoon. I wrote a small script that generates each page’s metadata from the page itself: title, description, headline, publish date, hero image, and FAQ. The structured data can’t drift from what the page says, because it’s derived from it. The same script rebuilds the sitemap using the URLs that actually return a 200. Then I wrote an llms.txt that outlines every service, linked it from every footer, named the AI crawlers in robots.txt, and added a visible FAQ to my services page that doubles as FAQPage markup. It’s all still there; view the source of any page on this site to check my work.
Since then, measurement has been the habit that matters: Google Search Console, Bing Webmaster Tools, and the same set of buyer questions asked of each assistant on a schedule. Discoverability you don’t measure is just a feeling.
Scale Without Spam
The fastest way to show up for more questions is to have more pages that answer them. That’s the promise of programmatic SEO. It’s also how a lot of sites got wrecked.
The classic pSEO play is a template and a spreadsheet: “Plumber in [city]” times four hundred cities. Same page, different noun. Google’s scaled content abuse policy exists to bury exactly that, and it does.
I built contento.sh to do it the other way. It’s a local CLI. You bring your own AI keys, any OpenAI-compatible provider. You pick niches that carry real context (the audience, their pain points, the subtopics they search for) and a content schema: an idea list, a checklist, a how-to guide, a comparison, an FAQ, a glossary, a tool page. The model fills a strict JSON structure instead of writing into a blank page, and every result is validated against the schema. Pages that fail are rejected, not published. Titles come from deterministic patterns, never from the model.
The output is static HTML on your own domain, wrapped in your site’s header, footer, and CSS, with canonicals, JSON-LD, Open Graph tags, internal links, and a sitemap on every build. You publish in batches, connect Search Console, and prune the pages that never earn a click. It has a --json mode and an MCP server, so Claude Code or another agent can run the whole pipeline.
What it doesn’t promise matters as much as what it does. It can’t give you first-hand expertise you don’t have, and AI output still needs a human to check the facts. That’s why, when I run it for a client, nothing ships without review.
Where to Start This Week
- Ask the assistants. Put five real buyer questions to ChatGPT, Claude, Perplexity, and Gemini. Write down who gets named. That’s your baseline.
- Check the door. Read your robots.txt and your CDN’s bot settings. Make sure the crawlers you want aren’t blocked.
- Fix canonicals and the sitemap. Every URL in both should be the one that returns a 200.
- Describe yourself in JSON-LD. Organization, services, people, articles, FAQs. Validate it.
- Write an llms.txt. One page: who you are, what you sell, how to engage.
- Answer the questions. An FAQ with real buyer questions as headings and a direct first sentence for each.
- Say the same thing everywhere. One name and one-line description on your site, LinkedIn, and every directory.
- Submit your sitemap to Google Search Console and Bing Webmaster Tools, then measure monthly.
None of this is magic, and none of it is guaranteed. Search engines and assistants decide what to show. What is guaranteed is the opposite: if the machines can’t find you, read you, and trust you, you won’t be in the answer.
I take companies through all of this as a service: see AI Discoverability. contento.sh is at contento.sh, and the CLI is free.