Back to blog
GEOAugust 26, 20269 min read

How to structure a page a generative engine can cite

Four gates decide whether an engine can quote you: access, text, block, attribution. Each one with the test that verifies it and the engine's own documentation.

A generative engine can only cite a page that clears four gates, in this order: its crawler has to get in, the content has to exist as text, there has to be a block that still holds up once you pull it off the page, and that block has to make clear whose claim it is. Fail the first and the other three are moot. Below is each gate, the concrete test that verifies it, and the official documentation from the engine that defines it.

What does a generative engine need before it can cite you?

An engine doesn't hand you a rank. It composes an answer and hangs a handful of sources off it. To be one of them, your page has to solve four separate problems, and each one breaks on its own:

  • Access. The engine's agent can make the HTTP request and receive your HTML.
  • Text. The thing you want quoted is in that HTML — not only after JavaScript runs, and not inside an image.
  • Block. Some passage answers a whole question and still makes sense away from the page.
  • Attribution. That passage names the business instead of saying "we."

Most GEO advice addresses the third. The two we find broken most often on real sites are the first and the second.

Which bots need to be able to reach your page?

Every engine crawls with several agents that do different jobs. Blocking the wrong one is the silent failure we see most:

  • OpenAI documents three: OAI-SearchBot for search, GPTBot for training, and ChatGPT-User for fetches a person triggers. The settings are independent of each other, and OpenAI warns that sites opted out of OAI-SearchBot will not be shown in ChatGPT search answers. It also notes its systems take roughly 24 hours to pick up a robots.txt change.
  • Perplexity documents two: PerplexityBot for indexing and Perplexity-User for what a person asks for in the moment. The second, its docs say, generally ignores robots.txt precisely because a user initiated the request.
  • Anthropic documents three: ClaudeBot for training, Claude-User for user requests, and Claude-SearchBot for search.
  • Google splits two things people constantly conflate. Googlebot governs Search. Google-Extended has no user agent of its own — it's a robots.txt control token that decides whether your content feeds Gemini training and grounding, and Google states plainly that it does not affect your inclusion in Google Search.

That's the trap. Blocking Google-Extended leaves you untouched in Google and removes you from Gemini's grounding. It's a legitimate call. It is almost never a call — it's an inherited line nobody reread.

There's also a layer in front of robots.txt that breaks more sites than it should: the WAF or CDN. Perplexity spends half a page on how to allow its agents through Cloudflare and AWS WAF. Google puts the same point in its own AI-features guidance: make sure crawling is allowed in robots.txt and by any CDN or hosting infrastructure. From the outside, a firewall 403 looks exactly like a page that doesn't exist.

Does your content exist as text, or only after JavaScript runs?

Google documents three phases for a JavaScript app — crawling, rendering, indexing — with rendering sitting in its own queue. Google does run your JavaScript. It just runs it later.

The other engines don't document a rendering phase on their public bot pages. We're not claiming they lack one; we're saying they haven't published one, and undocumented behavior is a poor thing to bet your visibility on. Google's recommendation in that same AI-features doc is explicit: keep important content available in textual form.

The test takes ten seconds:

curl -sL -A "Mozilla/5.0 (compatible; OAI-SearchBot/1.4; +https://openai.com/searchbot)" https://yoursite.com/page | grep -i "your key sentence"

If nothing comes back, that sentence doesn't exist for an engine that doesn't render. Read view-source, not devtools — devtools shows you the executed DOM, which is the exact thing you can't assume.

What does a liftable block actually look like?

Engines don't cite pages, they cite passages. A liftable passage does five things:

  • It stands alone. Cut it out of the page and it's still true and still legible.
  • It names the entity inside itself. "HopperCat returns the diagnosis within 48 business hours" is quotable; "we return it within 48 business hours" isn't, because out of context nobody knows who "we" is.
  • It leads with the answer. First sentence answers, the rest explains.
  • It carries one claim and its source. Two facts braided into one paragraph force the engine to pick which to quote, and often the answer is neither.
  • It runs 40 to 90 words. That's our rule of thumb, not an official figure: shorter says nothing, longer gets split and loses half of itself.

The classic counterexample opens with "as we saw above" or "our process" — both turn a perfectly good paragraph into unusable material the moment it leaves the page.

Does schema markup help you get cited?

This is where we have to be straight with you, because the answer changed this year and a lot of GEO content hasn't caught up.

Google says in plain language that you don't need to create machine-readable files, AI text files, or new markup to appear in AI Overviews or AI Mode, and that there's no special structured data to add. And in May 2026 it retired the FAQ rich result — the FAQPage documentation now redirects to that notice.

That doesn't make schema useless, it demotes it. It stops being a visibility tactic and settles into being entity hygiene: Organization still describes unambiguously who you are, and Google's policy still requires that structured data match the visible text on the page.

We still mark up FAQPage on this blog, and the reason is no longer the rich result. It's that writing a question section forces you to produce self-contained blocks, which is the part that actually moves.

What about the llms.txt file?

llms.txt is a proposal, currently at version 2 — not a standard the engines have adopted. Google states in that same guide that you don't need AI text files. OpenAI, on the other hand, publishes one for its own documentation.

Our position, unvarnished: it costs twenty minutes, it does no harm, and don't count it as strategy. If your llms.txt is the most citable thing you own, the problem is in the pages.

How do you verify an engine can read your page?

Four tests, from quickest to slowest:

  • curl with the engine's user agent and grep for your sentence, as above. Catches WAF blocks and content that only exists after JavaScript.
  • Read your robots.txt line by line against the agent names above. Google's robots guide covers how overlapping groups resolve.
  • URL Inspection in Search Console to see the HTML Googlebot actually received rather than the one you see. The tool is documented here.
  • Grep your server logs for OAI-SearchBot, PerplexityBot and Claude-SearchBot. If thirty days turn up none of them, you don't have a content problem.

Which structural mistakes keep you out of answers?

The ones we hit most, in order of frequency:

  • The fact you want quoted lives behind a tab or an accordion filled in by JavaScript.
  • The key figure exists only inside an image or a PDF.
  • H2s are labels ("Services", "Our method") instead of questions, so no heading matches anything a person types.
  • The copy runs on pronouns — three paragraphs of "we do this," "this lets you," "the process."
  • The same spec has different values on different pages. This one happened to us: in August 2026 we found our own free diagnosis published with three incompatible specs across three surfaces of the site. An engine can't confidently quote a number that has three values, so it quotes someone else's.

That last one is the one almost nobody audits, because each page passes review on its own. You have to check the surfaces against each other, not just against the checklist.

Where should you start?

Run the curl above against your three most important pages. If your sentence doesn't show up, you know which gate you're stuck at, and nothing else matters until it's fixed.

Some context for why this matters: in the first four months of 2026, 68.01% of US Google searches ended without a single click, up from 60.45% in 2024. The answer gets consumed where it's generated, and few sources fit inside it.

If you'd rather we looked at it, the free diagnosis scores your site against 42 points in five sections and hands back the failures ranked by cost to fix — within 48 business hours, no mandatory call.

Frequently asked questions

Which crawlers do I need to allow to appear in AI answers?

At minimum the search-facing agents each engine documents: OAI-SearchBot for ChatGPT search, PerplexityBot for Perplexity, Claude-SearchBot for Claude, and Googlebot for Google. Training crawlers such as GPTBot and ClaudeBot are separate settings you can decide independently.

Does blocking Google-Extended remove me from Google Search?

No. Google documents Google-Extended as a robots.txt control token with no user agent of its own, governing whether content is used for Gemini training and grounding. Google states it does not affect a site's inclusion in Google Search.

Do I need schema markup to be cited by AI engines?

Google states you don't need new markup or special schema.org structured data to appear in AI Overviews or AI Mode, and it retired the FAQ rich result in May 2026. Schema is still worth keeping as entity hygiene, and Google's policy requires structured data to match the page's visible text.

Is llms.txt a standard?

No. llms.txt is a proposal, currently at version 2, that the engines have not adopted as a requirement. It takes about twenty minutes to add and does no harm, but it is not a substitute for pages an engine can quote.

How do I test whether an engine can read my page?

Fetch the page with curl using the engine's user agent string and grep for the sentence you want quoted. If it doesn't appear, the content is either blocked before it reaches the crawler or exists only after JavaScript runs.

How long should a quotable block be?

Roughly 40 to 90 words that answer one whole question, name the business rather than saying 'we', and still make sense when pulled off the page.

About the author

Diego CaballeroFounder of HopperCat. Builds AI-first systems for Spanish-speaking businesses.