Generative engine optimization (GEO) is the work of making your pages easy for AI engines to find, quote and cite. ChatGPT, Perplexity, Gemini and Google's AI features all answer questions the same way: they retrieve passages from the web and write a response on top of them. If your page cannot be fetched, cannot be understood in isolation or is not trusted, it does not make it into the answer.
Most advice on this topic is either hype or a single trick. This generative engine optimization guide is neither. We separate what the vendors document from what nobody has proven, then walk through the changes in access, content, structure and measurement that we apply on WordPress, Shopify and Webflow sites.
One honest limit before we start: nobody can guarantee a citation. What you can do is remove every reason an engine would have to skip you, and put better evidence on the page than the competitor next to you.
Key takeaways
- Generative engine optimization is SEO fundamentals plus content that can be lifted out of the page as a clear, self-contained passage.
- AI crawlers must be allowed on purpose, because training bots, search bots and user-triggered bots are different and each needs its own decision in robots.txt.
- Direct answers, named entities, original data with a stated method and visible authorship raise your odds of being cited.
- Measure with a fixed prompt set, a GA4 referral segment and server logs, and accept that part of the effect stays invisible.
- No tactic, including llms.txt or schema markup, is a documented guarantee of citations.
Generative engine optimization: what it is and how it works
GEO is a layer on top of SEO, not a replacement for it. The term comes from the research paper GEO: Generative Engine Optimization by Aggarwal and co-authors. They built a benchmark of queries and tested content edits to see which ones made a source more visible in generated answers. Adding citations, quotations and statistics helped in their tests, and keyword stuffing helped little. It is a research benchmark, not a promise for your market.
GEO vs SEO: what changes and what does not
The goal changes. In classic search you compete for a position and a click. In AI search you compete to be one of a few sources the model quotes, often with no click at all. The unit changes too: a search engine ranks a page, but an AI engine cites a passage.
Classic SEO
Rank the page
- Goal: a high position and a click
- Unit: the page
- Success: rankings, impressions, organic sessions
- Levers: crawlability, links, relevance, speed
Our pick for this case
Add GEO on top
- Goal: be quoted or linked inside the answer
- Unit: the passage
- Success: citations, mentions, AI referral sessions
- Levers: all of SEO, plus extractable text, entities and evidence
The overlap is large. Google's documentation on AI features and your website says there are no special requirements to appear in AI Overviews or AI Mode beyond SEO fundamentals: the page is indexed, eligible to show a snippet and genuinely helpful. It also says you need no special schema. If your technical base is weak, fix that first, starting with our guide to Core Web Vitals for B2B websites.
How AI engines pick and cite sources
Each engine differs in detail, but the pipeline is similar. The engine splits the prompt into several narrower searches (Google's documentation calls this query fan-out). It retrieves candidates from its own index or a live search, selects the passages that answer each sub-question, and writes a synthesis with links. At each stage there is one lever you control.
AI answer pipeline
- 01Prompt split into sub-queriesLever: crawler access
- 02Retrieval from indexLever: indexable pages
- 03Passage selectionLever: extractable passages
- 04Synthesis with citationsLever: trust signals
Flow of how an AI answer is built, with the site lever at each stage: access, indexing, extractable passages, trust signals
Notice what gets selected: passages, not pages. A page with a clear two-sentence answer under a matching heading gives the model something to lift. A page that buries the answer under 600 words of preamble gives it nothing.
Let AI crawlers reach your site
Access comes before content. If a bot cannot fetch your page, nothing else in this article matters. Blocks are often accidental: a robots.txt copied from a staging site, a security plugin with aggressive defaults, or a CDN rule that treats unknown bots as threats.
Training bots vs search bots
Vendors run different crawlers for different jobs, and blocking one does not block the others. OpenAI documents three in its crawler documentation:
- GPTBot collects content that may be used to train generative models.
- OAI-SearchBot indexes pages so they can appear in ChatGPT search results.
- ChatGPT-User fetches a page when a person asks ChatGPT to visit it.
Other vendors follow the same logic. Perplexity publishes PerplexityBot, Anthropic publishes ClaudeBot, and Google offers the Google-Extended token to opt out of Gemini training and grounding without touching Googlebot. These lists change, so reread the vendor documentation a couple of times a year.
The trade-off is a business decision, not a technical one. Blocking training bots keeps your content out of future models. Blocking search bots removes you from that engine's answers. A B2B site that wants inbound leads usually wants the search bots in.
A robots.txt example with intent
The file below makes each choice explicit and explains it in comments. It allows search and user-triggered bots, opts out of training crawlers and keeps private paths closed for everyone. Treat it as one possible policy, not a default to paste.
# Search and user-triggered bots: allowed on purpose.
# OAI-SearchBot indexes pages for ChatGPT search results.
User-agent: OAI-SearchBot
Disallow: /cart/
Disallow: /account/
User-agent: ChatGPT-User
Disallow: /cart/
Disallow: /account/
User-agent: PerplexityBot
Disallow: /cart/
Disallow: /account/
# Training crawlers: opted out as a business decision.
# GPTBot is training, OAI-SearchBot is search (see OpenAI's bots documentation).
User-agent: GPTBot
Disallow: /
User-agent: ClaudeBot
Disallow: /
# Google-Extended controls Gemini training and grounding, not Google Search.
User-agent: Google-Extended
Disallow: /
# Everyone else
User-agent: *
Disallow: /cart/
Disallow: /account/
Sitemap: https://example.com/sitemap.xml
A named group replaces the wildcard group for that bot, which is why the private paths repeat in each group. Also remember that robots.txt is a request, not enforcement. Reputable bots follow it, others do not.
Decide per bot
Blocking Google-Extended does not remove you from Google Search or AI Overviews. Blocking a search bot such as OAI-SearchBot removes you from that engine's answers. Write down the reason for each rule.
Check your CDN and logs
A correct robots.txt means nothing if the edge returns a 403. Cloudflare, Sucuri, Wordfence and similar tools can challenge unknown bots by default. Request a page with the bot's user agent from outside your network and read the status code.
# Expect HTTP 200. A 403 or a challenge page means a firewall rule is blocking the bot.
curl -I -A "OAI-SearchBot" https://example.com/
This test only checks user agent rules, not IP verification. Then open your server logs and confirm the bots you allowed receive 200 responses on the pages you want cited.
Rewrite content so it can be cited
Engines quote passages. Your job is to make each important passage correct, self-contained and attributable. Four changes do most of the work.
Lead with the answer
Put the answer in the first one or two sentences under each heading, then add context. A passage that opens with "It depends on several factors" is hard to cite. A passage that opens with "A WooCommerce store needs a staging site before any plugin update that touches checkout" is easy to cite.
Write each section so it still makes sense when lifted out of the page. No "as we said above", no pronouns that point to an earlier paragraph.
Name entities and define terms
Models connect text to entities: products, companies, standards, people and places. Name them in full the first time and keep the same name afterwards: "Shopify Plus", not "the enterprise plan". Define terms the way a glossary would, for example "Largest Contentful Paint (LCP)", then LCP.
State plainly who you are: company name, what you sell, who it is for, where you operate. Repeat the same facts on your About page, your footer, your LinkedIn page and your Organization markup. Inconsistent facts make a source harder to trust.
Publish original data and clear authorship
The edits that worked best in the GEO paper added evidence: statistics, quotations and cited sources. Original data goes further because nobody else has it. A benchmark from your own projects, a customer survey or a dated pricing table all qualify. State the method, the sample and the date, and if you cannot back a number, do not print it.
Authorship is the other half. Show a byline with a real person, a short bio with credentials, the published date and the last-updated date, and link your sources. These are the same signals a human reviewer looks for.
- Answer in the first two sentences under every heading
- One question or topic per heading, with no skipped levels
- Terms defined once and entities named in full
- Original data with date, sample and method
- Named author with bio and credentials
- Published and last-updated dates visible on the page
- Claims linked to primary sources
Structure pages for machines and people
Structure does not make weak content citable. It makes strong content easier to find and unambiguous to read. Keep the claims modest and the markup honest.
Headings that match questions
Write H2 and H3 headings as the question or topic a buyer would type. "How long does a Shopify migration take?" beats "Timeline considerations". Use one H1 per page, one idea per section and no skipped levels.
Use lists for parallel items, numbered lists for sequences and tables for comparisons with three or more attributes. A table with clear column headers is easy to extract. Keep paragraphs short.
FAQ and schema markup in JSON-LD
FAQ blocks work because they pair a question with a short, self-contained answer, which is the shape of a citation. Mark them up with JSON-LD so the structure is explicit. Be clear about what schema does: Google says no special markup is needed for its AI features, and we know of no vendor documentation that promises more citations from schema.
It still earns its place. It makes author, dates and organization explicit and feeds classic rich results. Since 2023 Google shows FAQ rich results in classic search for only a narrow set of sites, so do not expect a visual change.
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Article",
"headline": "How long does a store migration take?",
"author": {
"@type": "Person",
"name": "Author Name",
"url": "https://example.com/team/author-name"
},
"publisher": { "@type": "Organization", "name": "Example Co" },
"datePublished": "2025-03-04",
"dateModified": "2025-06-18"
},
{
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "How long does a store migration take?",
"acceptedAnswer": {
"@type": "Answer",
"text": "The same answer text that appears in the visible FAQ on the page."
}
}
]
}
]
}
</script>
The markup must match what a visitor sees. Invented or mismatched markup is a spam risk and a trust problem.
Where llms.txt fits
The llms.txt proposal describes a Markdown file at /llms.txt with a short summary and curated links, so a model can find your best pages quickly. As of writing, we have no confirmation that the major engines use it for retrieval or citations, so treat its impact as unproven. We cover the format in detail in our post on why llms.txt matters. Here is the minimal version.
# Example Co
> Example Co sells industrial label printers to manufacturers in the United States and Spain, with installation and support.
## Guides
- [Choosing a label printer](https://example.com/guides/choosing-a-label-printer): criteria, volumes and total cost
- [Installation checklist](https://example.com/guides/installation): what to prepare before delivery
## Products
- [Printer range](https://example.com/products): specifications and pricing
## Optional
- [About us](https://example.com/about): company, team and contact
Publish it if the cost is an hour of work. Do not report it as a result.
Generative engine optimization on WordPress, Shopify and Webflow
The principles are identical across platforms. What differs is where you edit robots.txt, how you add schema and how you model authors and facts.
WordPress
WordPress generates a virtual robots.txt unless a physical file exists. SEO plugins such as Yoast and Rank Math expose an editor for it. If you prefer rules under version control, use the robots_txt filter.
<?php
// Append search-bot rules to the virtual robots.txt that WordPress generates.
add_filter( 'robots_txt', function ( $output, $is_public ) {
if ( ! $is_public ) {
return $output;
}
$rules = array(
'',
'# Search and user-triggered bots: allowed on purpose.',
'User-agent: OAI-SearchBot',
'Disallow: /wp-admin/',
'',
'User-agent: PerplexityBot',
'Disallow: /wp-admin/',
'',
'# GPTBot is training, OAI-SearchBot is search.',
'User-agent: GPTBot',
'Disallow: /',
);
return $output . implode( PHP_EOL, $rules ) . PHP_EOL;
}, 10, 2 );
A physical robots.txt in the web root overrides this filter, so remove it first. For schema, use your SEO plugin's Article and author settings and check the output in Google's Rich Results Test. In Gutenberg, build FAQ sections from real headings and paragraphs. Our WordPress development work starts with this check when a team asks for AI visibility: plugin stack, robots rules, schema output and heading structure.
Shopify
Shopify lets you customize robots.txt through a robots.txt.liquid template in your theme (Online Store, Themes, Edit code, then add a template). The template renders Shopify's default rules, and you append your own groups after them instead of replacing the defaults, which protect cart and checkout paths.
Most Online Store 2.0 themes output Product JSON-LD. Check that price, availability and review fields are correct and that variants do not create duplicates. For stores, original data lives at product level: specs, size tables, compatibility and comparisons. For example, a store with 2,000 products cannot hand-write every answer, but it can template one: a "compatible with" metafield rendered as a visible sentence at the top of each product page. More on the platform in our Shopify page.
Webflow
Webflow has a robots.txt field in Site settings under SEO. Enter your groups there and publish. JSON-LD goes in custom code in the page or site head. On CMS template pages, use an embed element and insert CMS fields, so each article gets its own headline, dates and author.
Model authors as a reference collection with bio and credential fields, so authorship is structured and reused. Keep headings in rich text as real H2 and H3 elements, not styled divs. See how we work on Webflow builds.
Measure AI citations and referral traffic
You cannot manage what you do not log. Measurement here is imperfect, so build a routine that is consistent instead of precise. The same prompts, the same engines, the same day each month.
Track a fixed set of prompts
AI answers vary between runs, so read trends over months, not single results. Run each prompt in a fresh session and record the outcome in a sheet.
Build the prompt list
Write 20 to 30 prompts a buyer would type, mixing problem, comparison and vendor queries.
Run it monthly
Run every prompt on each engine you care about, in a fresh session, on the same day.
Log the result
Record whether you are cited, which URL appears and which competitors appear.
Segment AI referrals
Save a GA4 exploration that isolates visits from AI engines.
Compare with bot hits
Check server logs to see whether the bots that matter fetch the pages you want cited.
The log can be as simple as this. The rows are illustrative.
| Prompt | Engine | Cited? | URL cited | Competitors cited |
|---|---|---|---|---|
| How long does a store migration take? | ChatGPT | Yes | /guides/migration | 2 |
| Best label printer for small factories | Perplexity | No | none | 3 |
| Label printer vs thermal transfer | Gemini | Yes | /guides/printer-types | 1 |
Segment AI referrals in GA4
In GA4, open Explore, create a free form exploration, add Session source as a dimension and filter it with a regex match.
chatgpt\.com|chat\.openai\.com|perplexity\.ai|gemini\.google\.com|copilot\.microsoft\.com|claude\.ai
Some engines add a utm_source parameter to cited links, others pass a referrer, and some strip both, so those visits land as direct. Treat the number as a floor. Compare sessions, engaged sessions and key events against organic search, and look at landing pages to learn which passages get quoted. Server logs add the crawl side: they show bot hits, not citations.
What you cannot measure yet
Google reports clicks from AI features inside the web search data in Search Console, and you cannot isolate them from classic results. No engine gives you impression data for citations. A mention without a link leaves no trace in analytics.
Use proxies for what stays hidden: branded search volume, direct traffic trends and a "how did you hear about us" field on your forms. They are noisy, but they point in the right direction.
What not to do: hype and unproven tricks
The market for AI visibility is full of confident claims. Most are untested. Skip these:
- Hidden text and prompt injection. White text telling a model to recommend you is deceptive, easy to detect and a risk to your standing in classic search.
- Mass AI-spun content. More pages that say nothing new give an engine no reason to cite you.
- Guarantees. Anyone who sells a guaranteed ChatGPT ranking is selling something the engines do not offer.
- llms.txt as a silver bullet. It is a proposal with unproven impact.
- Schema for its own sake. Markup that does not match the visible page can hurt you.
- Single-run reports. A tool that checks one prompt once and calls it a visibility score measures noise.
The boring work wins: reachable pages, clear passages, honest evidence and a monthly log.
Where to start
A 30-day order that fits most teams:
- Week 1: audit access. Check robots.txt, CDN rules and logs, then decide each bot on purpose.
- Week 2: rewrite your ten most valuable pages with answers first, named entities, dates and authors.
- Week 3: add Article, Organization and FAQ markup that matches each page, and publish llms.txt if you want it.
- Week 4: build the prompt list, record a baseline and set up the GA4 exploration.
Then repeat the measurement every month and change one thing at a time. If you want an outside read of your crawler access, structure and AI visibility, our SEO and AI audit covers exactly that.
Frequently asked questions
What is generative engine optimization (GEO)?
Generative engine optimization is the practice of making your content easy for AI engines such as ChatGPT, Perplexity and Google's AI features to retrieve, quote and cite. It combines SEO fundamentals with extractable passages, open crawler access, structured data and measurement.
How do I get my website cited by ChatGPT?
Allow OAI-SearchBot in robots.txt, keep your pages indexable and fast, and write passages that answer a question in the first sentences with named entities and dated evidence. Nobody can guarantee a citation, so track a fixed set of prompts every month.
Is GEO different from SEO?
Mostly it builds on SEO. Google says AI Overviews and AI Mode need nothing beyond SEO fundamentals. GEO adds a focus on passages, entities, evidence, AI-specific crawlers and AI-specific measurement.
Should I block GPTBot in robots.txt?
GPTBot is OpenAI's training crawler, and blocking it keeps your content out of future model training. It does not remove you from ChatGPT search, which uses OAI-SearchBot. Block GPTBot if training use concerns you, and allow OAI-SearchBot if you want to be cited.
Does llms.txt help me rank in AI search?
Not in a proven way. llms.txt is a proposal, and we have no confirmation that the major engines use it for retrieval or citation. Publish it if it costs little, but do not expect it to move results.
How do I track traffic from ChatGPT and Perplexity in GA4?
Create an exploration with Session source as a dimension and filter it with a regex such as chatgpt\.com|perplexity\.ai|gemini\.google\.com|claude\.ai. Treat the result as a minimum, because some AI visits arrive as direct traffic.
Does schema markup help AI search engines cite my pages?
Google says no special schema is needed for its AI features, and no vendor documents schema as a citation factor. It still makes authors, dates and entities explicit, so we recommend Article, Organization and FAQPage markup that matches the visible page.