# Getting Cited by AI Search: A GEO Guide for ChatGPT, Gemini and AI Overviews (2026)

> GEO is the work of making your content citable by generative search engines. This guide is not theory: it documents the infrastructure we built on this site, the measurements we took, and the bugs we found.

- Kanonik URL: https://algoritmaajans.com/en/blog/geo-guide-visibility-in-chatgpt-gemini-ai-overviews-2026
- Dil: en
- Kategori: Artificial Intelligence
- Yayın: 2026-08-17
- Güncelleme: 2026-08-27
- Yayıncı: Algoritma Ajans

---

**GEO (Generative Engine Optimization) is the work of making your content citable by generative search engines like ChatGPT, Gemini, Perplexity and Google AI Overviews.** Classic SEO answers "where do I rank in the results page." GEO answers a different question: "when an AI writes an answer, does it cite me?" Neither replaces the other — they stack.

This guide is not theory. It documents the infrastructure we built on this site, the measurements we took, and the mistakes we found.

## Why this matters now

User behaviour shifted quietly. People used to type keywords and pick from ten blue links. Now they ask a question and get one answer. If you are not a link inside that answer, your ranking position is irrelevant — you are invisible.

The Turkish market picture: according to TÜİK's 2025 data, the share of enterprises using AI reached **7.5%**, nearly triple the 2.7% recorded in 2021. Both your customers and your competitors are still learning these tools. The space is not crowded yet, which is exactly why moving early pays.

The content side looks similar. "What is GEO" definition posts have multiplied, but **content that goes into implementation detail and shares real measurements is almost nonexistent.** That is the gap.

## GEO, SEO and AEO are not the same thing

The three terms get used interchangeably. They should not be.

| | Target | Success metric |
|---|---|---|
| **SEO** | Ranking on the search results page | Position, clicks, organic traffic |
| **AEO** | Winning the direct answer / featured snippet | Snippet ownership, zero-click visibility |
| **GEO** | Being cited as a source inside a generated answer | Citation count, AI referral traffic |

In practice all three rest on the same foundation: machine-parsable content that answers clearly and backs claims with data. GEO adds one more thing on top — a **discoverability layer**.

## The three-layer web architecture

The traditional web had one layer: HTML for humans. In 2026 a site is designed as three.

**1. Human layer** — HTML, CSS, JavaScript. The conventional user experience. The performance budget lives here: LCP under 2.5s, INP under 200ms, CLS under 0.1.

**2. Bot layer** — markdown twin, `llms.txt`, schema graph. A clean, parsable secondary surface for AI crawlers that skips navigation chrome, cookie banners and hydration noise.

**3. Discovery layer** — `sitemap.xml`, `robots.txt`, `ai.txt`, `<link rel="alternate">`. The routing tier that makes both surfaces findable.

Most sites have built only the first layer. GEO work is largely the work of building layers two and three.

## The discovery layer: four files

An AI crawler needs four files to find and prioritise your site. Three are familiar, one is new.

### sitemap.xml

Old but still critical. One rule: **only canonical URLs you actually want indexed.** While fixing this site's sitemap we found that every blog post was being published under both locales. Because Turkish and English posts have different slugs, half the generated URLs served content in the wrong language. For 18 posts we were submitting 36 URLs, half of them garbage.

How many URLs are in your sitemap, and how many are genuinely distinct pieces of content? If those two numbers differ, you have index bloat.

### robots.txt

This is where the most common and most expensive mistake happens: **blocking AI crawlers wholesale.**

Until we took it over, this site's `robots.txt` fully blocked `GPTBot`, `Google-Extended` and `CCBot`. The result: ChatGPT and Google's AI summaries could not read the site at all. An agency that positions itself around AI integration had locked AI out.

One distinction matters here: **crawl permission and training-data permission are separate questions.** If you do not want your content used for model training, declare that in `ai.txt`. Closing crawl access does not remove you from training sets — it only removes you from answers.

Crawlers worth allowing: `GPTBot`, `OAI-SearchBot`, `ChatGPT-User`, `ClaudeBot`, `PerplexityBot`, `Perplexity-User`, `Google-Extended`, `Applebot-Extended`, `Bingbot`.

### llms.txt

The AI equivalent of a sitemap, written in markdown so humans can read it too. It states what the site is in one paragraph, then lists the most important pages under headings.

Critical detail: **heading grouping is a priority signal.** Sections higher up are read as more important. Anything you place under an "Optional" heading is read as low priority.

### ai.txt

`robots.txt` governs "may you crawl this." `ai.txt` governs "what may you use it for." You can permit search and answering (inference) while requiring permission for model training. Our choice on this site: inference open with attribution expected, training by permission.

## The markdown twin: the biggest gap we measured

To read your HTML page, an AI crawler has to download the navigation menu, the footer, the cookie banner and JavaScript hydration payload as well. The actual content is buried in that noise.

The fix is a markdown twin of every page. On this site, appending `.md` to a URL returns clean content.

Our own measurement, same blog post:

| Format | Size |
|---|---|
| HTML | 139 KB |
| Markdown twin | 8.5 KB |

**Roughly a 16× difference.** On the crawler side that translates directly into token cost and parsing success. When 8.5 KB of clean text enters a model's context window instead of 139 KB of HTML, the odds of your content being understood rise sharply.

Two implementation notes:

1. **Content negotiation or URL suffix routing.** We rewrite requests ending in `.md` to a route handler at the proxy layer, so the public URL keeps its `.md` extension.
2. **An `X-Robots-Tag: noindex` header** on the markdown endpoint, so classic search engines do not treat it as duplicate content.

Also leave a discovery signal in the HTML head:

```
<link rel="alternate" type="text/markdown" href="/en/blog/example-post.md">
```

## Schema graph: connected data, not flat data

An `Article` schema on its own is not enough. AI engines derive meaning from entity relationships. If the article exists but has no author, and the author is not connected to anything, that content stays "text of unclear origin."

The correct shape is a connected graph:

```
Article
 ├── author            → Person or Organization
 ├── publisher         → Organization
 ├── image             → ImageObject
 ├── breadcrumb        → BreadcrumbList
 └── mainEntityOfPage  → WebPage
```

Build it inside a single `@graph` with `@id` references. Standalone entities sitting side by side do not produce connected knowledge.

While doing this we caught another bug: FAQ records were stored in the database with `{q, a}` fields, but the schema-generating code was reading `{question, answer}`. Eight posts were publishing `FAQPage` schema full of `undefined` values — invalid structured data you would never notice without running Rich Results Test.

## Six common mistakes

**1. CSR-only architecture.** If content arrives via JavaScript, what the crawler sees is an empty `div`. Server-rendered HTML is mandatory.

**2. Blocking AI crawlers.** Covered above. The most frequent and most costly error.

**3. Ambiguous locale routing.** If the same content is published under two locales, the crawler cannot tell which to cite. On this site every post returned 200 under both locales; we fixed it by adding a language filter.

**4. Getting hreflang wrong.** Pointing hreflang at a translation that does not exist is worse than omitting it — if Google cannot find reciprocity it ignores the entire cluster. Do not publish hreflang on posts without a real translation.

**5. Content without data.** AI engines look for numbers, measurements and sources backing a claim. Write "from 139 KB to 8.5 KB," not "much faster."

**6. Not measuring.** If you are not tracking citations, you do not know whether your GEO work is doing anything.

## Writing content that gets cited

Infrastructure is necessary but not sufficient. Even once the crawler is inside your site, content that is not written to be citable will not appear in answers. Four writing rules make the difference.

### Answer in the first two sentences

When a generative engine composes an answer, it looks at where in the page it found the match. If your answer sits three screens down after two paragraphs of preamble, the model may not treat that section as relevant.

Wrong: "In today's rapidly digitalising world, businesses face many new concepts. One of these is GEO, a term we have been hearing frequently. So what is GEO?"

Right: "GEO is the work of making your content citable by generative engines like ChatGPT and Gemini."

The second version is a definition sentence a model can quote directly. The first contains nothing quotable.

### Support claims with numbers

AI engines prefer content carrying verifiable data. "Markdown is much lighter" does not get cited; "the same post is 139 KB as HTML and 8.5 KB as markdown" does.

If you cannot find a number, measure it yourself. Most of the data in this guide comes from measurements taken on our own site — that is precisely the content nobody else has.

### Write what nobody else has

General knowledge is already inside the model; it has no reason to cite you for it. A model cites a source for something it does not already contain: original measurement, field experience, a postmortem, local market data.

This is why a "what is GEO" post alone does not work, while "here are the nine pages where we found this bug while implementing GEO" does.

### Make the structure machine-readable

Keep heading hierarchy consistent, put comparisons in tables, turn step-by-step explanations into numbered lists, add a question-and-answer section. These are not decoration — they are the structural signals that let a model segment your content and find the relevant part.

## What changes by sector

The same principles apply, but the priority order shifts.

**Service businesses (agency, consultancy, clinic).** The critical layer is schema graph and author identity. When a user asks "a reliable X service in Istanbul," the model is deciding who to trust; if your organization and person entities are not connected, you are filtered out. Priority: schema graph → llms.txt → content depth.

**E-commerce.** Accuracy of product data matters above all. Price, stock, shipping and return terms must be unambiguous in structured data; the model uses this information directly in answers. Priority: product schema → price/stock consistency → category page indexation.

**Local business.** Location and opening-hours signals are decisive. The information on your site must match your Google Business Profile exactly; where they contradict, the model treats both as unreliable. Priority: NAP consistency → LocalBusiness schema → review signals.

**Software / SaaS.** Documentation is your most valuable asset. If the answers to technical questions live in your docs and are crawlable, you get cited repeatedly in developer queries. Priority: open, crawlable documentation → markdown twin → llms.txt.

## How to measure

GEO measurement differs from classic SEO and has not standardised yet. Four practical methods:

**Manual sample queries.** Once a month, record how ChatGPT, Perplexity and Google AI Overviews answer ten questions relevant to your sector. Does your brand appear? Is it cited? Tedious, but the most direct signal available.

**Referral traffic.** Segment visits originating from `chatgpt.com`, `perplexity.ai` and `gemini.google.com` in your analytics. This traffic is usually small but converts well — someone arriving from an answer already has intent.

**Server log analysis.** Look at which pages `GPTBot`, `ClaudeBot` and `PerplexityBot` fetch, and how often. A page no crawler visits will never appear in an answer.

**Structured data validity rate.** What share of your pages pass Rich Results Test cleanly? Keep it at 100%.

## A 30-day implementation plan

**Week 1 — baseline audit.** Are AI crawlers blocked in `robots.txt`? How many URLs are in the sitemap and how many are real content? Is the same content published at multiple URLs? Are your pages server-rendered?

**Week 2 — discovery layer.** Create `llms.txt` and `ai.txt`. Open `robots.txt` to AI crawlers. Reduce the sitemap to canonical URLs.

**Week 3 — bot layer.** Move schema into a single `@graph`, connect author and organization entities, validate with Rich Results Test. Add markdown twins for your ten highest-traffic pages.

**Week 4 — measurement and content.** Set up the referral segment. Run the ten-question citation check and record it in a table. Revise the opening paragraphs of your content so they answer directly.

The order is deliberate. Optimising upper layers while the foundation is broken is wasted effort: building a markdown twin while blocking the crawler achieves nothing.

## Where to start

If you do exactly one thing, open your `robots.txt` and look for a `Disallow` line under `GPTBot` or `Google-Extended`. If it is there, you have found why you do not appear in AI search — and it is a ten-minute fix.

Second step is `llms.txt`. Half an hour of work, lasting benefit.

Everything after that is content quality and consistency — which is what SEO has always asked for anyway.
