# AEO Adoption Scan, 2026

> What 93 pages ranking for AEO and GEO queries actually ship: llms.txt, JSON-LD, FAQPage, markdown variants and AI-bot blocks, measured August 2026.

**Canonical:** https://alexturik.com/aeo/research-2026

Seven queries, 93 pages, nine signals, one day in August 2026. The method, the full results, and what the numbers cannot tell you — so the articles that quote them do not each carry their own copy.

Three articles on this site quote numbers from one scan. This is the scan: what was collected, how each signal was defined, what came out, and what the numbers cannot tell you. If you want to cite a figure, cite this page — the articles link here rather than repeating the method.

## What was measured

On 9 August 2026 I pulled the top 20 United States, English-language Google organic results for seven queries, using the DataForSEO SERP API:

`llms.txt` · `answer engine optimization` · `generative engine optimization` · `how to get cited by ai` · `geo vs seo` · `aeo vs seo` · `ai visibility checker`

That returned 123 URLs. 117 answered with a `200`. After dropping platform domains — YouTube, Reddit, LinkedIn, Instagram, Medium, Wikipedia and X, none of which control their own head markup in a way that means anything here — **93 pages across 78 domains** remained. Every number below is out of those 93 unless it says otherwise.

These are pages that already rank for the queries where AEO is discussed. That makes them a useful sample of what the field practises, and a poor sample of the web at large.

## How each signal was defined

A number is only as good as the check behind it, so here are the checks.

| Signal | Counted when |
|---|---|
| `llms_txt` | `GET /llms.txt` returns 200 with a non-HTML content type |
| `ai_bot_blocked` | robots.txt has a named group for the bot containing `Disallow: /` |
| `faqpage` | `@type FAQPage` appears in any JSON-LD block on the ranking URL |
| `md_variant` | `GET <url>.md` returns 200 with a markdown content type |
| `question_heading` | an `h2` or `h3` whose text ends with `?` |

Everything else is a plain presence check on the fetched HTML: a JSON-LD block, a `dateModified` field, an `author` field, a `<table>`.

## Results

| Signal | Pages | Share |
|---|---|---|
| JSON-LD of any type | 76 / 93 | 81.7% |
| `dateModified` present | 55 / 93 | 59.1% |
| `author` in JSON-LD | 58 / 93 | 62.4% |
| At least one question heading | 69 / 93 | 74.2% |
| `llms.txt` served | 49 / 93 | 52.7% |
| At least one comparison table | 34 / 93 | 36.6% |
| `FAQPage` markup | 24 / 93 | 25.8% |
| Markdown variant of the page | 8 / 93 | 8.6% |
| Blocks at least one AI bot | 8 / 93 | 8.6% |
| `HowTo` markup | 3 / 93 | 3.2% |

Two figures are not page counts. Across all 2,195 headings in the sample, **410 end in a question mark — 18.7%**. And the **median page runs 2,511 words**.

The shape of that table is the finding. The signals that a CMS or an SEO plugin emits without being asked — JSON-LD, `dateModified`, an author field — clear 59%. The signals that require someone to decide something — a markdown variant, `HowTo`, a comparison table — sit under 37%. `llms.txt` is the interesting middle at 52.7%, and the next section is why that number is softer than it looks.

## The llms.txt number has a footnote

41 of the 78 domains serve a working file. The sizes are not comparable to each other in any useful way:

| | Bytes | Domain |
|---|---|---|
| Smallest | 648 | llmstxt.org — the site that publishes the specification |
| Median | 8,072 | — |
| Largest | 2,500,078 | coursera.org |

A 2.5 MB file is not a curated index. It is an export, and an agent reading it will truncate long before the end.

More to the point: **5 of the 41 domains, 12.2%, got the file from an SEO plugin update rather than a decision.**

| Domain | Plugin |
|---|---|
| aioseo.com | All in One SEO Pro v5 |
| visiblefactors.com | All in One SEO Pro v5 |
| www.fasturtle.com | All in One SEO v5 |
| www.boralagency.com | Yoast SEO v27 |
| www.yoghurtdigital.com | Yoast SEO v27 |

Those five sites did not choose a curation strategy. Their plugin shipped a feature. They are in every llms.txt adoption statistic published after that release, including this one.

## Who blocks AI bots

Eight of 93 pages sit on a domain that blocks at least one AI crawler outright. Six of them are worth naming, because what they block is informative:

| Domain | Ranks for | Blocks |
|---|---|---|
| forbes.com | answer engine optimization (#4) | GPTBot, ClaudeBot, PerplexityBot, CCBot, Bytespider, Applebot-Extended, anthropic-ai, meta-externalagent |
| builtin.com | generative engine optimization (#19) | GPTBot, ChatGPT-User, OAI-SearchBot, PerplexityBot |
| lib.guides.umd.edu | how to get cited by ai (#8) | GPTBot, ChatGPT-User, CCBot, Bytespider, Google-Extended, Applebot-Extended |
| libguides.brown.edu | how to get cited by ai (#16) | GPTBot, ChatGPT-User, CCBot, Bytespider, Google-Extended, Applebot-Extended |
| llmclicks.ai | ai visibility checker (#19) | CCBot, Bytespider, meta-externalagent |
| coursera.org | answer engine optimization (#6) | meta-externalagent |

Two university library guides ranking for "how to get cited by ai" block the crawlers that would cite them. Forbes blocks `anthropic-ai`, a token Anthropic has retired, which tells you when that file was last opened.

## What this does not show

- **It measures presence, not effect.** Nothing here says a page with `llms.txt` gets cited more often. Testing that needs citation data these checks do not collect.
- **The sample is self-selected.** Pages that rank for "answer engine optimization" are written by people who think about AEO. Treat every number as an upper bound for the wider web.
- **One country, one language, one day.** US, English, 9 August 2026. Google results move.
- **Presence is not correctness.** A `FAQPage` block counts here whether or not its answers match the visible text. So does an `llms.txt` that lists dead URLs.
- **93 is small.** A five-point difference between two signals in this sample is noise.

## The baseline: this site, on the day of the scan

The same run measured alexturik.com, which is how the gaps got prioritised. This is the state on 9 August 2026, before any of it was addressed:

| | This site, 2026-08-09 | Sample median or share |
|---|---|---|
| Median words per post | 1,383 | 2,511 |
| Question headings | 7 / 130 (5.4%) | 18.7% |
| Pages with `FAQPage` | 3 / 22 (all under /plugins, none in the blog) | 25.8% |
| Markdown variants | 15 pages | 8.6% of the sample had any |
| AI bots blocked | 0 | 8.6% blocked at least one |
| `llms.txt` | 10,750 bytes | median 8,072 |

Those figures are deliberately frozen at the scan date and are no longer current — the blog now runs FAQ markup and question headings throughout, and every page has a markdown twin. Rerunning the scan is the only honest way to update them, which is the point of writing the method down.

## How to cite this

> Turovskyi, O. (2026). *AEO Adoption Scan, 2026: 93 pages ranking for AEO and GEO queries.* alexturik.com/aeo/research-2026. Measured 9 August 2026.

The raw dataset is in the repository as `docs/reports/aeo-adoption-dataset-2026-08-09.json`. If you rerun the same seven queries, I would like to see the numbers.
