GEO AI-Readiness Audit — A Knowledge Site's Own GEO Walkthrough
The best way to explain GEO is to do it.
So we took the microscope off theory and pointed it at our own site — a static knowledge base.
Over the course of a week we shipped AI discovery files, instrumented AI crawler logging, tightened structured data, cleaned up brand signals, and fixed a hidden header that was quietly breaking scripts.
This article walks through every step, the reasoning behind it, and the GEO principle each one maps to.
I. Step One: Make the Site Discoverable by AI
The first lesson of GEO is not "how to get recommended" — it is "how does AI find you at all."
Traditional SEO waits for a search-engine crawler to follow links. AI answer engines today come through different doors, and you need to open each one:
- llms.txt: a plain-text orientation file that tells an LLM what the site covers and which pages matter most.
.well-known/ai.txt/ai.json: dedicated "nameplate" endpoints for AI crawlers..well-known/mcp(SEP-1960 manifest): a formal statement that this is a static knowledge site exposing no MCP tools, resources or prompts — setting clear expectations about how the site should be treated.
After shipping all of these, the site changed from "web pages for people" to "a knowledge base for machines." That is the first fork between SEO and GEO: the audience changed.
II. Step Two: Instrument the AI Crawlers Before Optimizing
Too many GEO programs are driven by feelings — "I think we should add an llms.txt, done." We went further and put a crawler logger in front of the site: a Cloudflare Worker classifies each request by User-Agent (GPTBot, ClaudeBot, PerplexityBot, Google-Extended and 25+ more) and writes one row per HTML request into a database.
After a few days, the data spoke: which crawler hit which path, how often, and where it stopped. That leads to the measurement principle at the heart of GEO:
An optimization that cannot be measured is not an optimization.
Your content can be a perfect "answer" — but if AI does not crawl it, read it, or cite it, it is worth zero. And you can only reason about "crawled / not crawled" once you can see it. For a full metrics view, see the GEO core metrics framework.
III. Step Three: Make It Machine-Readable — Structured Data
At the same time, we added datePublished / dateModified to the Article schema on every glossary page and the overview page.
Schema is often dismissed as an SEO ritual, but it is closer to a factory specification for AI. When a model needs to decide "is this answer outdated?" or "is this source trustworthy?", it leans on explicitly declared fields like these. Adding a date field looks trivial — yet it is a direct signal for answer freshness.
Two practical rules we held to:
- JSON-LD belongs in the
<head>, never at the bottom of<body>. - Ship
Organization+Article+BreadcrumbListacross the site — the skeleton of entity recognition.
This is what the Schema Markup guide calls "structured data completeness" — the machine-readable spine AI needs to recognize you as an entity.
IV. Step Four: Earn Trust — E-E-A-T Is Not a Slogan
We also unified the site's brand identity to English (GEO Encyclopedia), completed About / Contact pages, and de-indexed stale redirect pages that were creating duplicate signals.
Every one of those maps to E-E-A-T:
- Consistent brand identity → AI and humans perceive one unambiguous entity.
- Real About / Contact → concrete grounding for "authoritative and trustworthy."
- No duplicate pages → avoids splitting one topic across two entities and diluting authority.
AI-generated answers prefer to cite sources that are clear, authoritative, and internally consistent. If you cannot state who you are, why would a model recommend you? This is the trust mechanism in action.
V. Step Five: Fix the Hidden Outage — Sandbox CSP Header
GEO has one of the most common, most invisible failure classes: "the site looks fine, but everything AI-related is silently broken."
When we switched the origin to raw.githubusercontent.com, we discovered it attaches a sandboxing header — Content-Security-Policy: default-src 'none'; sandbox — to every HTML response. In a browser that header disables all page scripts: the sidebar can no longer collapse, and analytics no longer loads. The fix: strip both Content-Security-Policy and X-Frame-Options on the way through the Worker.
The takeaway is broader than this one bug:
GEO is a three-layer game — content, technical, and measurement — and all three must be healthy.
"The page looks normal" and "everything underneath works" are two different facts. This is why the tech stack and monitoring matter as much as the copy.
VI. Step Six: Canonicalize — Stop Manufacturing Duplicates
AI answers hate the same content on two URLs. We added a www.geo010.com → geo010.com 301 redirect in the Worker so the whole site collapses onto one canonical host, and we made sure stale redirect pages were noindex.
In GEO terms this is canonical normalization + knowledge entropy: duplicate URLs dilute entity density and subtract from the chance AI chooses to cite you. For the deeper version, see advanced robots/llms.txt configuration.
VII. The Loop Behind This Case: GEO's Five-Step Cycle
| Stage | What we shipped | GEO principle |
|---|---|---|
| 1. Discoverable | llms.txt, ai.txt, MCP manifest | AI can find you |
| 2. Measurable | Crawler logging Worker + stats endpoint | Optimization is data-driven |
| 3. Understandable | JSON-LD with dates, head placement | AI can read you |
| 4. Trustworthy | Brand unification, About/Contact, noindex cleanup | AI wants to cite you |
| 5. Direct & canonical | www redirect, single identity | AI recommends you cleanly |
Every optimization answered the same question: when an AI answers a user, is there a reason it should mention us?
You do not need to do it all at once. We started with "make AI find us, then measure what happens," and stacked entry points, readability, trust and canonicalization on top. GEO is a process of small additions and careful removals — a 90-day roadmap is the practical version, and this week was its shortest form.
The simplest GEO project is the one you finish. This audit took one week; the compounding started the day the first crawler logged.