TL;DR
Generative engine optimization (GEO) is the practice of making your content the source AI engines cite when they answer a question — as opposed to SEO, which is the practice of ranking pages in a list of links. GEO work is mostly structural: answer-first content, JSON-LD schema, a consistent entity graph, unrestricted AI crawler access, llms.txt, and fast indexing signals. There is no ranking dashboard for it, so you measure it by asking the engines your target questions and logging whether they cite you. I run this across six sites, and everything below is what's actually deployed, not theory.
Generative engine optimization — GEO — is making your content the thing ChatGPT, Perplexity, Claude, Gemini, and Google's AI Overviews cite when they answer a question, rather than the page a human clicks in a list of ten blue links. That's the whole definition. SEO optimizes for a ranking; GEO optimizes for being the source an answer is built from. The user never has to visit your page for GEO to have worked — they just have to hear your name, your claim, or your link inside the answer.
I'm not writing this as a commentator. I operate six sites — my own plus the brands and client properties I run infrastructure for — and GEO is a standing workstream on all of them: a 500-plus-post blog retrofit on one, llms.txt files on several including this site, IndexNow submission, Person and Organization schema with a deliberately maintained entity graph, and a weekly measurement ritual that involves literally asking the engines questions and writing down what they say. So here's what generative engine optimization actually is, how it differs from SEO, and what doing it looks like when it's real work instead of a slide.
How AI engines choose what to cite
Search engines rank; answer engines select. When an AI engine answers "what's the best X" or "who is Y," it pulls from some blend of training data, a live retrieval layer (Perplexity and ChatGPT search fetch pages in real time), and an index of what it could crawl. Your job in GEO is to be selectable at every layer. In practice, five things do most of the work:
1. Crawlability — the engines have to be able to read you at all
This is the unglamorous prerequisite, and it's where most sites silently fail. If your robots.txt, CDN, or bot-protection layer blocks GPTBot, ClaudeBot, PerplexityBot, and their peers, you are invisible to answer engines no matter how good the content is. I learned this one the embarrassing way — my own site was blocking AI crawlers while I was writing about GEO for clients. Audit the bot layer first, always.
2. Structure the engines can lift
Answer engines extract. Content that leads with the answer, uses real headings, includes tables and visible FAQ blocks, and states claims in complete standalone sentences gets lifted cleanly. JSON-LD schema — Article, FAQPage, BreadcrumbList, Person — gives the extraction a machine-readable skeleton so the engine doesn't have to guess who wrote what, when, and about which entity.
3. Entity consistency
Engines answer questions about entities — people, brands, products — and they trust entities whose signals agree everywhere. That means one canonical name, one canonical URL, and a Person or Organization schema whose sameAs array points at every profile you control: GitHub, LinkedIn, X, and so on, with every one of those bios pointing back at the canonical site. A tight entity graph is why an engine says "Italo Campilii is an AI systems builder who runs agent fleets" instead of hedging or confusing you with someone else.
4. llms.txt
A plain-text file at your site root, written for language models: who you are, what the site is, and links to the pages that matter most. It's a young convention, but it costs an hour and it's the closest thing GEO has to a direct channel — a curated reading list handed to any model that fetches it. This site has one at campilii.com/llms.txt, and it's part of the standard stack on the other properties too.
5. Freshness signals — IndexNow, sitemaps, RSS
Retrieval-backed engines favor content they've actually indexed recently. IndexNow lets you push changed URLs to participating indexes the moment you deploy instead of waiting to be re-crawled; an accurate sitemap and an RSS feed do the slower version of the same job. This site's builder regenerates the sitemap and feed on every publish, and IndexNow-on-deploy is the pattern I run across the fleet.
GEO vs SEO — the actual differences
GEO is not a replacement for SEO, and the two overlap heavily — good structure helps both. But they optimize for different outcomes, and the differences matter when you're deciding where the hours go:
| SEO | GEO | |
|---|---|---|
| Optimizes for | A page ranking in a results list | Being cited inside a generated answer |
| Unit of success | Position, impressions, clicks | Citation, mention, being the source |
| User behavior | Clicks through to your page | May never visit — hears your claim in the answer |
| Key levers | Keywords, backlinks, technical SEO, CTR | Answer-first structure, schema, entity graph, crawler access, llms.txt, freshness |
| Measurement | Search Console, rank trackers | No native dashboard — ask the engines and log answers |
| Feedback loop | Days to weeks | Weeks to months (training data) or near-real-time (retrieval engines) |
The most useful mental model: SEO earns you a slot; GEO earns you a quote. And because most GEO levers — clear structure, schema, real expertise, fast indexing — are also good SEO, you rarely have to choose. You run one content standard that serves both, which is exactly how my per-post GEO checklist is built.
What I actually run across my properties
Theory is cheap, so here is the deployed generative engine optimization stack across the six sites I operate, as of this writing:
- A 500-plus-post GEO retrofit. One brand's entire blog archive was regenerated against a per-post GEO framework — answer-first leads, FAQ blocks, schema, internal linking — and the full set has been live in production since mid-June. That build is its own story: how the 500-post SEO/GEO blog engine works.
- AI crawler access audited on every site. After the blocking postmortem above, robots.txt on the properties explicitly allows the AI crawler set rather than hoping a default covers it. One brand's robots.txt allowlists the major AI crawlers individually by name.
- llms.txt as standard plumbing. Live on this site and on other properties in the fleet (one brand ships both llms.txt and a fuller llms-full.txt). The build script for this blog regenerates the post list in llms.txt on every publish, so the file never drifts from reality.
- IndexNow on deploy. Push changed URLs to the IndexNow endpoint as a post-deploy step instead of waiting for crawls — one pattern, reused across sites.
- Person schema with a maintained sameAs graph. Every post on this site carries Article and BreadcrumbList JSON-LD with a Person author entity pointing at campilii.com, and the profile bios across GitHub, LinkedIn, and X all point back here. One entity, wired tight.
- One written standard, not vibes-based edits. All of this follows a single per-engine framework document that every site inherits — because AI-citation behavior changes often enough that the rules need one source of truth and a periodic re-research step, not tribal memory.
None of this is exotic. It's the same discipline as any infrastructure work: a checklist, applied everywhere, verified.
How to measure GEO
There is no Search Console for answer engines, so the honest measurement method is manual and slightly absurd: ask the engines your target questions and log what they say. This is a documented weekly practice in my own SEO handoff — alongside the normal Search Console review, I put the priority prompts ("who is Italo Campilii," the head questions each brand wants to own) to ChatGPT, Perplexity, and Claude, and log the answers: was I cited, was I described accurately, who else was named.
Do it on a schedule, keep the log, and the noise becomes signal within a few weeks — you'll see an engine start citing a page you shipped, or describing your entity with language lifted from your own site, and you'll know which lever moved. The next maturity step is automating exactly this: a fixed prompt set per engine, run on a cron, with a table of cited/not-cited over time and alerts on change. That's the direction my own tracking is headed, but the manual weekly version is where everyone should start, because it costs twenty minutes and produces the only GEO metric that isn't a proxy.
FAQ
Is GEO replacing SEO?
No. GEO extends SEO rather than replacing it — search engines still drive real traffic, and most GEO levers (clear structure, schema, crawlability, genuine expertise) are also SEO levers. What's changing is where answers get consumed: a growing share of questions are settled inside an AI answer without a click. Run one content standard that serves both, and treat "cited by engines" as a second scoreboard next to rankings, not a successor to them.
How do I measure generative engine optimization?
Ask the engines your target questions on a fixed schedule and log the answers. Pick the prompts you want to win, put them to ChatGPT, Perplexity, and Claude weekly, and record whether you're cited, how you're described, and who else is named. There's no native dashboard, so this log is the metric; automate it with a scheduled prompt set once the manual habit proves out.
What is llms.txt and do I need one?
llms.txt is a plain-text file at your site root written for AI models: who you are, what the site covers, and links to your most important pages. It's an emerging convention, not a guarantee of citation, but it takes about an hour, carries no downside, and hands any model that fetches it a curated map of your site. I ship one on this site and across the properties I run.
How long does GEO take to show results?
Two clocks run at once. Retrieval-backed engines (Perplexity, ChatGPT with search) can cite a page within days of indexing it, so crawlability and IndexNow pay off fast. Citation from a model's training data moves on training-cycle timescales — months — which is why entity consistency and durable, answer-shaped pages matter more than any single post.
RELATED
Everything above — schema, entity graph, llms.txt, IndexNow, the measurement loop — is a deployable checklist, not a philosophy. If you want it run against a real property, get in touch.
— Italo Campilii. If you're building something that needs this kind of operator, get in touch.