GEO

Search Console rankings do not predict citation in ChatGPT, Perplexity, or Google AI Overviews. The signals that matter are different. Here is the audit we run on every site, including our own.

You can rank on page one of Google and still get zero citations in ChatGPT. The shape of the answer is different. The signals that decide it are different. The crawlers that gather them are different. Most SEO playbooks were built for a ten-blue-links world. That world still exists, but a growing share of queries never reach it.

Generative Engine Optimisation — GEO — is the discipline of making your content retrievable, parseable, and citable by AI answer engines. It overlaps with technical SEO in places and diverges from it in ways that matter. This post covers the divergence: the six retrievability signals AI crawlers actually check, the schema mistakes that appear valid but fail in production, and the five-step fix we apply to every site we audit.

The test that matters has changed

For twenty years, the test was: does Google rank this page? Rank in position one and you win the traffic. That metric still matters. But it no longer predicts whether an AI engine cites you. ChatGPT synthesises answers from a retrieved passage pool — a short list of text fragments scored on authority, structure, and topical fit. Whether your page enters that pool depends on signals that Google's PageRank algorithm never measured.

Consider a concrete case: a dentist in London ranks position one in Google for "teeth whitening dentist London." That ranking is real and drives real bookings through organic search. Ask Perplexity the same query and the dentist does not appear. Perplexity cites three competitors — none of them ranking above position four in Google — because their pages have server-rendered content, valid LocalBusiness schema with sameAs links, and FAQ markup answering "how long does teeth whitening last?" The top-ranked site has none of these.

The test has changed. "Do you rank?" is still worth asking. "Does an AI engine name you?" is the test that closes the gap your rank does not fill.

What AI crawlers actually read

GPTBot, ClaudeBot, and PerplexityBot all operate on the same constraint: they are HTTP clients, not browser engines. They send a GET request and read the HTML response. Anything that requires JavaScript execution to appear in the DOM is invisible to them. This is the single most common retrievability failure we find in audits.

Beyond JavaScript rendering, six signals determine whether an AI crawler can read and index your content. Each is binary — the crawler either succeeds or moves on to the next URL in its queue.

  • Server-side rendering: the full page content must be present in the initial HTML response. Client-side rendering via React or Vue without SSR produces an empty shell that AI crawlers read as a blank page.
  • robots.txt permissions: GPTBot, ClaudeBot, and PerplexityBot must be explicitly allowed — or at minimum not blocked. Many sites block all unknown bots with a wildcard Disallow rule that was never intended to catch AI crawlers.
  • llms.txt presence: the emerging /llms.txt standard lists every page and service you want AI engines to index. Sites without it rely entirely on the crawler's own discovery logic.
  • Sitemap freshness: a sitemap.xml with accurate lastmod dates signals to crawlers which pages changed recently. Stale sitemaps or missing sitemaps result in slower re-indexing after you update content.
  • CDN bot-blocking rules: Cloudflare's challenge modes — including JS Challenge and Managed Challenge — present CAPTCHA-equivalent barriers to AI crawlers. A crawler that receives a 403 or a challenge page marks the URL as inaccessible and skips it.
  • Page speed: pages that time out (504) on first crawl are skipped and may not be retried for weeks. AI crawler queues are competitive; a slow cold-start loses the slot.

Fixing retrievability is pre-requisite work. Schema and entity signals only matter if the crawler reaches the page. Start here.

The schema layer — what validates vs. what merely exists

Most sites have schema. We have audited over fifty sites and found schema markup present on nearly all of them. We have also found that the majority of that schema fails in at least one way that prevents AI engines from trusting it. Presence is not correctness.

Three failures appear in almost every audit. First: JSON-LD injected by JavaScript after page load. A crawler reads the HTML before any script executes, so it receives an empty script tag or a placeholder object. The schema appears to exist in the browser's DevTools inspector — which runs JavaScript — but not in the raw HTML response. Second: schema with an incorrect @type. A law firm with @type set to "Organization" instead of "LegalService" or "LawFirm" is valid JSON-LD but semantically wrong. AI engines use @type to classify the entity; an incorrect type produces incorrect classification. Third: FAQPage applied to headings that are not actual Q&A pairs. A section titled "Our services" followed by paragraph descriptions is not an FAQ. Marking it as FAQPage violates the schema specification and may cause the entire schema block to be discarded by a strict parser.

A correct LocalBusiness schema block, rendered in the initial HTML response, looks like this:

The @id field is the persistent identifier for the entity. The sameAs array is how AI engines cross-reference the entity against external authority sources. Both fields are mandatory for disambiguation. Both are absent from the majority of schema blocks we audit.

Entity disambiguation — the signal most sites are missing

AI engines do not trust a business simply because its website claims to exist. They cross-reference. When ChatGPT or Perplexity encounter an unfamiliar business name, they check whether that name, address, and phone number appear consistently across multiple authoritative sources: Google Maps, LinkedIn, Yelp, Wikidata, and the business's own About page. Consistent data across three or more sources passes the disambiguation test. Inconsistent data fails it.

The failure mode is more specific than most people expect. It is not about having wrong information somewhere — it is about having different information in different places. A business whose LinkedIn profile reads "Nawab Islam Consulting" and whose website reads "Atellius" fails entity disambiguation even if both pages have perfect technical execution. The AI engine cannot confidently merge these into a single entity. It treats them as two separate, low-authority signals.

Entity disambiguation is the finding we classify as Critical most often. It appears in approximately 70% of audits. The fix is not technical — it is editorial. Every place your business name appears online must use the same string, the same address format, and the same phone number format. Then the schema sameAs links connect those sources, and an AI engine can traverse the graph from your website to your LinkedIn to your Google Maps listing and confirm the entity is real.

Entity disambiguation is a trust graph problem, not a content problem. An AI engine traverses the graph from your website outward. If the nodes do not match, the graph breaks.

Content extractability — what makes a paragraph citable

AI engines quote passages, not pages. When Perplexity cites a source, it extracts a paragraph — typically 60 to 150 words — and renders it verbatim or near-verbatim in the answer. The question for every paragraph on your site is: can this be quoted without the surrounding context and still make sense?

Passage-extractable content has three properties. It opens with a direct answer. Not "In this article, we will explore..." but the answer itself, stated in the first sentence. It is self-contained. No pronouns that reference the previous paragraph, no "as mentioned above," no "this approach." A reader who encounters the paragraph cold, without having read anything before it, can understand it completely. And it fits the window: 60 to 150 words. Shorter paragraphs lack enough context to be useful citations. Longer paragraphs exceed the extraction window and get truncated in ways the engine cannot predict.

Most marketing copy fails this test on all three dimensions. It starts with a framing sentence, refers back to a previous claim, and runs long. Rewriting for extractability does not mean making your content worse — it means making every paragraph carry its own weight. The discipline of writing self-contained paragraphs is the same discipline that makes content clear to human readers.

A practical check: paste any paragraph from your site into a blank document, strip all surrounding context, and read it aloud. If it makes a complete, standalone point, it is extractable. If it requires the previous paragraph to make sense, it will not be cited.

What we found when we audited atellius.com

We ran our own scanner against atellius.com on the day we launched. Auditing yourself first is not modesty — it is the only honest way to sell an audit service. If our own site fails the test, we have no credibility selling the fix.

The initial score broke down as follows. Retrievability scored high: the site is Next.js with server-side rendering, Cloudflare Workers deployment with no JS challenge rules, and GPTBot explicitly allowed in robots.txt. Schema structure scored high: JSON-LD blocks are injected in the document head at render time, not client-side. Entity authority scored mid: Atellius is a new brand with limited external mentions, no Wikidata entry, and sameAs links that were present in schema but not yet confirmed by the linked pages. Content structure scored mid. Platform-specific signals — llms.txt and FAQ markup — scored low: /llms.txt did not exist, and no service page had FAQPage schema.

If we cannot get our own site scored above 90 within a month of launch, we have no business selling the service.

The fix took one afternoon. We shipped /llms.txt listing every page and service. We added FAQPage schema to the three service pages that had genuine question-and-answer content. We confirmed the sameAs LinkedIn URL resolved correctly. The score moved 28 points. Entity authority will continue to improve as the brand accrues external mentions — that signal takes months, not an afternoon. Everything else is already in place.

The five-step fix, in order of impact

These five steps cover the majority of GEO failures we find across audits. Apply them in order — each one is a dependency for the next.

  • 1. Allow AI bots in robots.txt. Add explicit Allow directives for GPTBot, ClaudeBot, and PerplexityBot. A wildcard Disallow for unknown bots blocks all three. Check your Cloudflare security rules at the same time — JS Challenge mode blocks AI crawlers at the CDN layer before robots.txt is even read.
  • 2. Ship /llms.txt. The file is plain text. List every service page, every blog post, every page you want cited. Include a one-sentence description of each. The format is emerging but already read by Perplexity and several GPT plugins. The cost is one afternoon; the insurance value compounds.
  • 3. Add FAQPage schema to pages with real Q&A content. Only mark up headings that are genuine questions with genuine answers in the body text below them. Validate with the Google Rich Results Test, then confirm by curling the raw HTML and checking the script tag is present — not just visible in DevTools.
  • 4. Fix entity disambiguation. Audit every platform where your business name appears: Google My Business, LinkedIn, Yelp, Clutch, any directory listings. Make the name, address, and phone number identical across all of them. Then add sameAs links in your LocalBusiness schema pointing to the canonical URLs on each platform.
  • 5. Audit schema with the Google Rich Results Test AND a live curl. The validator runs against rendered HTML — it will pass schema that is injected by JavaScript. The curl command shows you what the AI crawler actually receives. Both checks are necessary. Neither alone is sufficient.

GEO is not a one-time fix. AI crawler behaviour is changing faster than Google's algorithm did in 2012. The sites that stay cited are the ones that treat retrievability, schema validity, and entity authority as recurring maintenance tasks — not one-time launches.

If you want the audit on your own site, the GEO portal at geo.atellius.com runs the same six-dimension scanner we use internally. Every finding includes a proof link and a severity classification. We use the same scanner on this site, every week.

Next read

The case for hand-built primitives in 2026.

Have a project that
fits this thinking?

Start a project