The expert's paradox
I advise businesses on revenue growth through AI. At some point I noticed something awkward: when I asked ChatGPT, Perplexity, Gemini, or Yandex Neuro "who is Roman Denisov?", they didn't surface my site. At best, a namesake. At worst, nothing.
It was doubly awkward. I'm not just a marketer — I'm a fractional AI consultant who designs AI systems for other people's businesses, with an MBA and 17 years in marketing and sales. And yet my own site was invisible to the very AI engines I tune for clients. The classic cobbler with no shoes.
Technically the site worked. It opened in a browser, it looked clean. But for AI-driven search engines, it might as well not have existed. More and more people skip the "ten blue links" and ask an AI directly. The AI gives one answer — and either cites you, or it doesn't. If it doesn't, you don't exist for that audience. I broke my own site apart and rebuilt it so AI could read it. Here is what I did, in plain language.
What is GEO, and why is it not SEO?
GEO (generative engine optimization) is the practice of optimizing a site for the answers of AI search engines — ChatGPT, Perplexity, Gemini, Yandex Neuro. The goal of GEO is not a position in a list of links, but inclusion in the AI's generated answer itself, as a cited source.
GEO differs from classical SEO in three ways:
| SEO | GEO | |
|---|---|---|
| Goal | A spot in the "ten blue links" | To be the source the AI cites in its answer |
| Signals | Keywords and backlinks | Machine-readable structure, bot access, unambiguous facts |
| Content format | Prose optimized for clicks and engagement | Direct definitions, lists, question-and-answer blocks |
SEO and GEO don't compete — they complement each other. But the old SEO toolkit covers only half of what AI needs.
Diagnosis: why AI couldn't see the site
Before changing anything, I ran a GEO audit — about thirty checks of how visible a site is to generative search. The starting score was low: there was almost no foundation for AI search. The barriers came down to three.
Content was being assembled inside the visitor's browser.
This is the standard architecture for most modern sites: the server sends an almost-empty page, and JavaScript fills in the text in the browser. A human doesn't notice — the page opens instantly. An AI bot does notice: it often doesn't run JavaScript and receives an empty shell with no content.
AI bots were blocked at the server level.
Crawlers from OpenAI, Anthropic, Perplexity, Google, and Yandex were refused before they reached anything. Not on purpose — that's how default hosting settings and anti-scraping protection behave. As a result, the very bots that could bring me into AI answers never reached the content.
No machine-readable description.
Nowhere did the site tell AI, in plain and formal terms: "this is the author, these are the services, here are answers to common questions." AI had to guess the meaning from the markup — and it guesses poorly and reluctantly.
What I did — six layers of a GEO foundation
1. Made content visible to crawlers
Pre-rendering means generating the finished HTML page on the server before a bot or browser requests it. I moved the site from client-side rendering to pre-rendering: every page now ships with its full text instead of assembling it in the browser.
Why it matters: an AI bot lands on a page and immediately receives all the content — headings, paragraphs, answers. It doesn't need to run JavaScript and wait for something to "fill in." It can read the text, cite it, and use it in an answer to a user.
This is the single most important step of the six. Without it, the other five are window dressing: there's no point opening the door to bots or marking up structure if the page is still empty for them.
2. Opened the door to AI bots
In robots.txt I added explicit allowances for five key AI crawlers:
- GPTBot — OpenAI's crawler (ChatGPT);
- ClaudeBot — Anthropic's crawler (Claude);
- PerplexityBot — Perplexity's crawler;
- Google-Extended — Google's AI crawler (Gemini, AI Overviews);
- YandexGPT — Yandex's AI crawler (Neuro).
In parallel, I tuned server rules so these bots don't get caught by anti-scraping protection. Allowances in robots.txt are useless if the firewall cuts the bot off at the server level.
This is a strategic decision, not just a technical one. I want AI engines to cite my site, so I opened the door. Not everyone wants that: some companies and experts deliberately block AI crawlers to keep their content out of model training. I chose visibility.
3. Added a machine-readable structure
Schema.org is a markup standard that describes a page's content in a language machines read unambiguously. I marked up the site with four core types:
- Person — who Roman Denisov is, what he does, where he is based;
- Service — what services exist, for whom, in what format;
- FAQPage — frequently asked questions and answers;
- Article — blog posts, including this one.
On top of the markup I added a separate llms.txt file. llms.txt is an emerging standard — essentially a "table of contents for large language models": briefly and in a structured way, it states what the site is about, who the author is, and which pages are worth reading first.
What it produces: AI no longer guesses meaning from the markup. It gets the facts explicitly — and understands more precisely who to cite, and for what.
4. Built proper bilingual handling
The site runs in two languages: EN (primary) and RU. Previously the two versions tangled in the index — search engines and AI treated them as duplicates of each other and couldn't tell which to show.
hreflang is markup that tells a search engine what language a page is in and which language versions exist. I set up hreflang for the en/ru pair, added browser-based language detection, and canonical links that point to the canonical version of each page.
As a result, AI now understands these are not two competing duplicate sites but two versions of the same content. It shows a Russian-speaking user the Russian page, an English-speaking user the English one.
5. Sped up load time
Page speed affects both classical ranking and whether a page gets pulled into an AI answer: bots skip slow pages to save their crawl budget. So speed isn't cosmetics — it's a visibility factor.
What I optimized: converted images to WebP and enabled lazy loading, trimmed excess JavaScript, turned on HTTP/2 and static caching. Core Web Vitals are a set of Google metrics measuring a page's loading speed and stability — render speed, responsiveness, and the absence of layout "jumps." On Core Web Vitals the site moved from the amber zone into green. I'll add the exact before/after figures after a re-measure — no invented numbers.
6. Set up instant pings to search engines
IndexNow is a protocol by which a site instantly notifies search engines of every update itself. Instead of waiting for a bot to wander in by chance, the site pings the engines: "here's a new page, come grab it."
I wired up IndexNow and submitted the site to three webmaster tools: Google Search Console, Yandex Webmaster, and Bing Webmaster Tools. I also loaded sitemap.xml — a map of all the site's pages.
What it produces: without IndexNow, a new page appears in the index in weeks; with it, in minutes. This is the nervous system of GEO — it closes the loop of "published → engine knows → AI can cite."
Results — honestly, without invented numbers
Two key barriers are gone, and that can be stated firmly:
- AI bots now physically receive the site's content (pre-rendering);
- they have explicit permission to read it (robots.txt + server rules).
The technical GEO foundation is fully in place: rendering, bot access, machine-readable structure, bilingual handling, speed, and instant indexing. Indexing has started.
I'm deliberately not posting "citation rate up N×" or "GEO score moved from X to Y" here. On launch day those numbers simply don't exist — they'll come after a re-audit in about two weeks. Then I'll update this article with real metrics: citation rate, before/after GEO score, exact Core Web Vitals. Inventing before/after figures on launch day is marketing, not a case study — and a case study is only worth anything if it's honest.
Two weeks later: the GEO score rose from 25 to 64 out of 100
I promised to come back with real numbers — here they are. Two weeks after launch and the rollout, I ran a repeat GEO audit using the same methodology: six dimensions and live checks via curl with the User-Agent of every key AI crawler — not "from memory," but against the live site. The result: the overall GEO score climbed from 25 to about 64 out of 100 (+39). All three fatal barriers from the first audit are gone — the site is no longer invisible to AI.
| Before · May 25 | After · June 8 | |
|---|---|---|
| Overall GEO score | 25 / 100 — "critical" | ~64 / 100 — "good" |
| AI bot access | 7 of 9 bots = blocked (403) | 10 of 10 = HTTP 200 |
| Machine-readable markup (Schema) | 5 / 100 — almost none | ~85 / 100 |
| Technical foundation (rendering, sitemap, robots) | 40 / 100 | ~82 / 100 |
| Content & expertise (E-E-A-T) | 50 / 100 | ~70 / 100 |
| AI-platform visibility | 17 / 100 | ~69 / 100 |
The per-platform picture is the same. Estimated visibility in Google AI Overviews rose from 32 to ~80, in ChatGPT from 10 to ~70, in Perplexity from 8 to ~60, in Gemini from 12 to ~65, and in Bing Copilot from 25 to ~70. The key change under the hood: AI crawlers now receive the full content on every route (pre-rendering) and have explicit permission to read it (robots.txt + server rules), and the site itself is described by a rich Schema.org package — Person, Service, FAQPage, Article, and more.
Why 64 and not higher? The technical and on-page side of GEO is essentially done — from here I'm up against what can't be fixed in code: external authority (media mentions, guest publications, a Wikidata entity to resolve the namesake confusion) and reviews with Review markup. That accumulates over weeks and months, not in a single sprint. And that's the honest ceiling of this case: 64 now, 70–80 once external authority builds up. I'll take the next measurement after the first external mentions and a Wikidata entity.
GEO is the new SEO
Ten years ago you could afford to ignore Google optimization — today you can't afford to ignore optimization for AI search. More and more users ask an AI directly and read a single generated answer instead of a list of links. If a brand isn't in that answer, then for a growing share of the audience it doesn't exist at all.
GEO (generative engine optimization) is not "SEO with a new label." It is a different signal set: machine-readable structure, bot access, correct rendering, authoritative citations, and FAQ formats. The old SEO toolkit covers only half of it.
The same approach I applied to my own site works for any business — from a private clinic to a B2B service. The details change, but the six foundation layers stay the same.
Case 1 of 2: The Site as Proof of Concept — building brand and code in one AI conversation →Want to check your site?
I run GEO diagnostics — a short PDF report with the three biggest visibility barriers in your site and a prioritized improvement list. The first diagnostic is free.
