Answer Engine Optimization: What I Did to Get Cited by ChatGPT and Perplexity
Traditional SEO gets you found on Google. Answer Engine Optimization gets you quoted by ChatGPT, Perplexity, Claude, and Google’s AI Overviews. The tactics overlap, but the goal is different: instead of a ranked list of links, you’re competing to be the source a language model cites in its generated answer.
This is the running build log for this site. I’ve rewritten it as the work has continued, because the first version was incomplete in an important way — I had the schema right and the rendering wrong. Here is the whole stack, in the order it actually matters.
0. Server-side rendering, or none of the rest counts
The site originally shipped as a client-rendered React single-page app. Every URL returned the same near-empty HTML shell with one generic title, and the content only appeared after JavaScript ran. Google can usually handle that. Most AI crawlers cannot — they fetch HTML and read what’s there.
So I migrated the whole site to server-side rendering. Now every route returns fully-formed HTML with its own title, description, Open Graph tags, and JSON-LD already in the markup. This was the single highest-impact change, and it’s the one most AEO advice skips because it isn’t a tactic — it’s infrastructure.
If a crawler has to run your JavaScript to see your content, you have not done AEO. You have done SEO theater.
The five-second version of the test: curl your page and search the output for your headline. If it isn’t there, nothing below will help you.
1. One canonical author entity
AI engines resolve content to entities. Scattered variations of a name resolve to nothing. I standardized on Alexander Rublowsky — the form the press uses — with “Alex Rublowsky” as an alternateName, and moved the whole Person object into a single module with one stable @id.
Every place the author appears now points at that same @id: the author on every Article, the founder on the Organization, and the mainEntity of the About page. One node, referenced everywhere, instead of five lookalike people the model has to guess about.
The sameAs array does the corroboration work: LinkedIn plus an independent MarTech Series interview about the ControlUp turnaround. Third-party sources that confirm the same claims are what turn a self-description into something a model is willing to repeat.
2. An About page — the page answer engines most want to cite
The site had no canonical home for me as a person. Every story implied a narrator with nowhere to point. I built /about as that home: bio, track record with links to each transformation story, external profiles, and ProfilePage + Person + Speakable markup.
When someone asks an answer engine “who is Alexander Rublowsky,” there is now exactly one page built to be the answer — and every other page on the domain feeds authority into it.
3. Visible bylines, not just metadata
Author schema in the markup is necessary but not sufficient. Answer engines cross-check structured data against what a human reader would see. So every post and story now carries a visible byline — “By Alexander Rublowsky” — linked with rel="author" to the About page. The machine-readable and human-readable claims agree, which is the whole point.
4. HowTo schema on procedural posts
Google deprecated HowTo rich results in 2023, so most SEO advice has moved on. But LLM-based answer engines still parse structured data to identify step-by-step procedures they can quote. HowTo schema is now more valuable for AEO than it ever was for classical SEO.
I added HowTo schema to the procedural posts — the “build a site for $50” walkthrough and the “$0 marketing videos” guide — with named steps, estimated cost, and total time. When someone asks Perplexity how to build a marketing site cheaply, the model has a structured recipe to cite, not just prose to summarize.
5. Speakable schema for voice and audio
SpeakableSpecification tells assistants which parts of a page are safe to read aloud. I marked the H1, lead paragraph, and section headings across every post and the About page. As voice-based AI interfaces grow, this is the difference between being read out loud and being skipped.
6. Per-page Open Graph images
The site ran one generic OG image everywhere, which meant every shared link and every AI-surfaced card looked the same. Each transformation story now serves its own company logo as og:image and twitter:image, generated at the route level with an absolute URL. Everything else falls back to the site image. Distinct pages should look distinct wherever they surface.
7. robots.txt with the crawler names that actually exist
My original file welcomed Anthropic-AI and Claude-Web. Both are deprecated. The current Anthropic agents are ClaudeBot, Claude-User, and Claude-SearchBot, and OpenAI’s search crawler OAI-SearchBot is separate from GPTBot. I also added Perplexity-User, Applebot-Extended, meta-externalagent, and Bytespider.
A blanket User-agent: * Allow: / already covered them, so nothing was ever blocked. But if the file’s job is an explicit welcome, it should use names that resolve. A stale robots.txt is a signal about how current the rest of the site is.
8. Honest sitemap lastmod dates
A sitemap that claims a page changed months ago when you edited it today tells crawlers not to bother re-fetching, and engines keep serving the old version. Every lastmod now reflects the real date of the last substantive edit — not the build time, and not a blanket refresh of every URL.
9. llms-full.txt — a content dump for AI crawlers
llms.txt is an emerging convention (think robots.txt for LLMs) that gives AI crawlers a curated index of your most important pages. llms-full.txt is the extended version — a single markdown document with the full canonical content you want AI engines to ingest and cite from.
Mine covers the 40/40 framework, the Buyer Intelligence Accelerator, the three transformation stories, the author bio, and a FAQ. It sits alongside robots.txt and sitemap.xml at the root and is linked from robots.txt so crawlers find it.
10. Article completeness and basic trust signals
Small but non-negotiable: publisher with a logo ImageObject and mainEntityOfPage on every Article, real Privacy and Terms pages instead of dead footer links, and the obsolete meta keywords tag removed. None of these wins a citation on its own. Collectively they’re the difference between a site that reads as maintained and one that reads as abandoned.
Why this stack together
Any one of these is a marginal improvement. Together they create something different — a site an AI engine can actually fetch, where it can identify who is speaking, what they know, who else confirms it, which steps they recommend, and which passages are safe to quote. That’s the whole AEO game: make the machine’s job easy.
How to measure it
Measurement is still early, so use a three-layer check. First, mechanical: curl each URL and confirm the real title, description, and JSON-LD are in the raw HTML. Second, validation: run your key pages through Google’s Rich Results Test to confirm the schema parses. Third, outcome: ask ChatGPT, Perplexity, and Google AI Overviews the questions your content should answer and record whether you’re cited. Set that baseline now and re-run it quarterly.
What’s next
Two things. Off-domain corroboration — the entity work only pays off fully when independent sources repeat the same claims, so earned coverage and interviews are now an AEO tactic, not just a PR one. And competitor gap analysis: figuring out which prompts competitors already win in ChatGPT and Perplexity, and building the content and schema to displace them. Same competitive dynamic as classical SEO, different judge.
If you want the exact schema code, everything is in the site source, and this post is marked up with the same patterns. Fair game to copy.
Questions & Answers
The questions people ask most about this story.
- What is Answer Engine Optimization (AEO)?
- AEO is the practice of structuring a website so AI answer engines like ChatGPT, Perplexity, Claude, and Google's AI Overviews can cite it directly. It builds on traditional SEO but adds server-rendered HTML, structured data (Schema.org), a single disambiguated author entity, and LLM-friendly content dumps so machines can extract and quote your answers verbatim.
- Does a client-side React site get cited by AI engines?
- Usually not. Most AI crawlers fetch HTML and do not execute JavaScript. A client-rendered single-page app returns an empty shell with one generic title, so there is nothing to quote and every page looks identical. Server-side rendering was the single highest-impact AEO fix on this site — it is the prerequisite for everything else.
- Why does an About page matter for AEO?
- Answer engines cite entities, not URLs. Without one canonical page describing the author as a person, mentions of a name scatter and resolve to nothing. An About page carrying Person and ProfilePage schema, with sameAs links to independent profiles, gives the model a single node to attach expertise to — and it is the page an answer engine most wants to cite for who-is questions.
- How is AEO different from SEO?
- SEO optimizes for a ranked list of blue links. AEO optimizes to be the source an AI cites in a generated answer. SEO cares about position; AEO cares about being quotable and attributable. Sites that do well at AEO publish clear, self-contained answers, mark them up with FAQ, HowTo, and Speakable schema, and tie every page back to a named, verifiable author.
- What is llms.txt and llms-full.txt?
- llms.txt is an emerging convention (like robots.txt) that gives AI crawlers a curated index of your most important pages in plain markdown. llms-full.txt is the extended version — a single markdown document containing the full canonical content you want AI engines to ingest and cite from.
- Which AI crawler user agents should robots.txt name in 2026?
- The current names are ClaudeBot, Claude-User, and Claude-SearchBot for Anthropic; GPTBot and OAI-SearchBot for OpenAI; PerplexityBot and Perplexity-User; Google-Extended; Applebot-Extended; meta-externalagent; and Bytespider. Anthropic-AI and Claude-Web are deprecated and naming them signals a stale file.
- How do I know if AEO is working?
- Ask ChatGPT, Perplexity, and Google AI Overviews the questions your content should answer and see whether your site is cited. Confirm the schema actually renders using Google's Rich Results Test, and check that a plain curl of each URL returns your real title, description, and JSON-LD. Tools like Profound, Otterly, and Semrush's AI Overviews tracking measure citation share the way classical tools measure rankings.
