How to Make Your Website Readable for AI
GEO and agent-ready web: a practical guide
A significant share of visits to vibecoding.cz today are already AI agents — and that number is growing.
This page is for developers building websites, marketers who want AI search to cite them, and content creators planning content today that will be read by LLMs tomorrow.
GEO vs. agent-ready — what's the difference
These two terms get mixed up, but they solve different problems. GEO (Generative Engine Optimization) is optimization for citation in generative search — ChatGPT search, Google AI Overviews, Perplexity. The goal: your content appears in the response the LLM generates.
Agent-ready web is something else. It's about readiness for automated interaction with AI agents — systems that can read your site, find resources on it, and potentially trigger actions via API. The goal: an agent can use your website as a tool.
The overlap is in the quality of structured metadata. The difference: GEO solves content, agent-ready solves protocols. This page covers both.
Google frames this differently — and they're right, just about something else. Google published a guide Optimizing your website for generative AI features on Google Search and explicitly stated that for Google Search you don't need llms.txt. That's true: Google Search works through its own crawler and RAG pipeline; llms.txt means nothing to it. But llms.txt and MCP aren't for Google Search — they're for autonomous agents (Claude, ChatGPT agent, Perplexity Deep Research) that browse the web independently. Google itself in that same document writes about "agentic experiences" and new protocols like UCP, and links to agent-friendly website best practices — which is exactly the agent-ready part of this page.
An important shift in thinking. The goal of GEO is not to bring users to your website. The goal is to appear in the response the LLM generates — users learn about you in ChatGPT, Perplexity, or Google AI Overviews, and the click to your site may never happen at all. The traditional "drive traffic, sell or show ads" model breaks down here. You also need to rethink monetization: the goal is to make users aware of your product or brand, not to drive them to a specific URL. Success is measured not in traffic, but in citability — how often an LLM mentions your brand in response to a relevant query, and in what context.
GEO: For AI search
AI search reads the web differently than a classic crawler. Instead of a list of blue links, it assembles a response from citable passages. What makes content "citable":
Structured data (Schema.org / JSON-LD)
Every article should have Article markup, every organization Organization markup, FAQ lists FAQPage. Both Google AI Overviews and Perplexity prefer structured data over unstructured text. Minimal Article:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Article",
"headline": "Article title",
"author": { "@type": "Person", "name": "Author name" },
"datePublished": "2026-04-26",
"dateModified": "2026-04-26"
}
</script> Validate at: validator.schema.org. Vibecoding.cz has Article markup on every article — see e.g. any article on the Czech site.
llms.txt as a curated index
llms.txt is a markdown file in your site root that tells AI: "if you want to understand this site quickly, read this." It's a curated version of the sitemap with short descriptions.
Example from vibecoding.cz: /llms.txt (curator) + /llms-full.txt (full content for RAG indexing).
Citability — short passages, clear definitions
An LLM will extract a sentence or paragraph from your page. If that sentence doesn't make sense without the context of the previous section, it won't be cited. Practical rules:
- The first sentence of each section is a standalone definition of what the section covers.
- Key claims as individual sentences, not buried in long compound sentences.
- Attribution (source, date, author) near the claim, not in the footer.
E-E-A-T signals
Google's E-E-A-T (Experience, Expertise, Authoritativeness, Trustworthiness) expanded in December 2025 beyond YMYL topics — it now effectively applies to any content competing for citation. Specifically:
- Author with a name, photo, and external profile (LinkedIn, GitHub).
- Publication date and last-updated visible, not buried in the footer.
- Source citations with outbound links, not just "as shown in our documentation."
- Author qualifications relevant to the topic.
What to avoid
- Content cannibalization. One topic = one canonical page. When you have 5 articles about the same thing, AI search doesn't know which one to cite.
- Thin content. Under 600 words for an educational page is a problem.
- Unreviewed AI-generated content. LLMs recognize machine-generated generic text in other LLMs. Current data doesn't penalize this heavily yet, but the direction is clear.
How to measure GEO
Traditional SEO metrics (visits, conversions, bounce rate) don't work directly here — the user reads the LLM's response in ChatGPT; they may never click to your site at all. So you measure citability, not traffic:
- Citations in LLM responses — Ahrefs Brand Radar, Profound, or custom monitoring via API (ChatGPT search, Perplexity, Google AI Overviews). Track: does the LLM mention your brand/product in responses to relevant queries?
- Google Search Console — AI Overviews segment, where Google provides data (selectively for now). Impressions there carry more weight than clicks.
- Server logs — visits from
GPTBot,ClaudeBot,PerplexityBot,Google-Extended. This is not your audience — it's indexing for AI. It measures whether LLMs are reading you at all. On vibecoding.cz we log this to D1 and the chart is below. - Brand search trend — when an LLM cites you, some users will search for you directly. Is branded search growing? That's an indirect but strong signal that GEO is working.
Agent-Ready: For AI agents
Once you're citable for AI search, the next step is being usable by agents — automated systems that browse your site to complete a task. Structured around the 5 categories tested by isitagentready.com.
1. Discoverability — so agents can find what you have
An agent lands on your root and needs to quickly find: where's the sitemap,
where's llms.txt, where's the MCP server, where's the API catalog.
Three places to put this:
robots.txt—Sitemap:directive;llms.txtisn't a standard robots directive but add it as a comment.- HTTP
Linkresponse headers (RFC 8288) — agents find these via a HEAD request without parsing HTML. <link rel="..." href="...">in HTML — fallback for clients that don't check headers.
Example Link header for Cloudflare Pages (public/_headers):
/*
Link: </llms.txt>; rel="llms-txt"
Link: </llms-full.txt>; rel="llms-txt-full"
Link: </sitemap.xml>; rel="sitemap"
Link: </.well-known/api-catalog>; rel="api-catalog"
Vibecoding.cz has all these Link headers globally —
/.well-known/api-catalog is
in application/linkset+json format per RFC 9727.
2. Content Accessibility — so agents can understand your content
HTML with ad banners, cookie pop-ups, and SPA hydration is a nightmare for agents. Three techniques:
-
llms.txtas curator — a markdown index of sections and key pages. An agent reads it in a second instead of crawling the sitemap. -
llms-full.txtas full text — the entire site content as one large markdown for RAG indexing. Watch the size (vibecoding.cz is around 700 KB). - Markdown content negotiation — when an agent sends
Accept: text/markdown, the server returns MD instead of HTML. An advanced technique; most sites don't do this yet, but agents are starting to test it.
3. Bot Access Control — who can read what
Classic robots.txt plus the new Content Signals
(IETF draft). The example below allows crawling by all bots, protects the admin section,
and explicitly names the major AI bots (in case any of them ignore User-agent: *):
# robots.txt
User-agent: *
Allow: /
Disallow: /admin/
# Explicit opt-in for AI indexing and training
User-agent: GPTBot
Allow: /
Disallow: /admin/
User-agent: ClaudeBot
Allow: /
Disallow: /admin/
User-agent: PerplexityBot
Allow: /
Disallow: /admin/
User-agent: Google-Extended
Allow: /
Disallow: /admin/
User-agent: CCBot
Disallow: /
# Content Signals — usage preferences (apply globally)
Content-Signal: search=yes, ai-input=yes, ai-train=yes
Sitemap: https://example.com/sitemap.xml Content-Signal values: search = classic indexing
for search engines; ai-input = use as context for AI responses
(RAG, citations); ai-train = model training. Each value is
yes / no.
Web Bot Auth — authenticating bots via signed HTTP messages (an early draft exists). Practical implementation is premature; watch contentsignals.org for updates.
4. Protocol Discovery — so agents know what you can do
When a site offers actions (order, catalog search, event registration), agents need a machine-readable description of them. Two standards worth implementing today:
-
/.well-known/api-catalog(RFC 9727) — anapplication/linkset+jsonlist of available API endpoints. Vibecoding.cz has this; agents can find the MCP server, RSS feeds, sitemap, llms.txt there. - MCP Server Card (
/.well-known/mcp/server-card.json) — a JSON declaration of what the MCP server can do. An agent sees the available tools without needing an initial handshake. Vibecoding has an MCP server atmcp.vibecoding.czwith a Server Card declaring available tools.
Minimal MCP Server Card (abbreviated — see vibecoding.cz's full version at /.well-known/mcp/server-card.json):
{
"$schema": "https://modelcontextprotocol.io/schemas/server-card/v1",
"serverInfo": {
"name": "vibecoding-events",
"version": "1.0.0",
"description": "MCP server for the Vibecoding.cz event calendar"
},
"transport": {
"type": "streamable-http",
"endpoint": "https://mcp.vibecoding.cz/mcp"
},
"tools": [
{ "name": "list_events", "description": "List upcoming events" },
{ "name": "search_events", "description": "Search by keyword" },
{ "name": "get_event", "description": "Event detail" },
{ "name": "submit_event", "description": "Submit a community event" }
]
} Agent Skills and WebMCP are additional emerging standards (Anthropic Skills, browser-side MCP). They're still too early for most websites.
5. Commerce — agentic payments
Standards x402, MPP, UCP, and ACP handle situations where an agent wants to buy something or pay. x402 is the most mature (HTTP 402 Payment Required + crypto micropayments). For most websites this isn't relevant yet — if your agent doesn't make autonomous payments, monitor the space and revisit in a year.
Evidence: how adoption is growing on vibecoding.cz
This data is from vibecoding.cz real traffic. Adoption is growing. If you don't act now, you'll be catching up later.
Loading data…
Green line: share of agent llms.txt downloads in total traffic (%).
Grey bars: absolute number of /llms.txt + /llms-full.txt downloads (right axis).
Orange line: clicks to vibecoding.cz from AI apps (ChatGPT, Claude.ai, Gemini, Perplexity…) per day — detectable via HTTP Referer (right axis).
What the orange line doesn't count: mobile apps for ChatGPT, Claude, or Gemini (no Referer sent), copy-pasting links into the address bar, opening links via "Open in new tab" in some browsers, and https→http downgrades (which strip the header). The actual number of visits from AI apps is always higher.
Weekly breakdown
| Week | Page views | LLMs.txt | Share |
|---|
Test your website
isitagentready.com is a free testing tool that audits your site across the 5 categories described above. Recommended workflow:
- Enter your site URL.
- Optionally select your site type (e-commerce / blog / SaaS / …) — adjusts the checklist.
- Get the report. Red items = "do this now." Orange = "do this soon."
- Paste the report into Cursor, Claude Code, or another AI agent with the instruction "fix the items in this report." Most issues are simple configuration files in the project root.
Tip: before you hand the report to an agent, make sure you understand what each item means — this page should give you context on all 5 categories.
Quick wins: 5 steps to start with
Ordered from easiest to most involved.
-
Content Signals in
robots.txt5 minutesAdd
Content-Signal: search=yes, ai-input=yes, ai-train=yesto yourrobots.txt. This affects hundreds of AI services that respect the draft and declares how you want your content used. -
Schema.org Article JSON-LD on articles 1 hour
Add a JSON-LD block to the
<head>of every article. Minimum:headline,author,datePublished. Validate at validator.schema.org. -
llms.txtas curator 1 hourCreate
/llms.txtin your root — markdown with H1 (site name), blockquote (short description), link lists to main sections. Spec at llmstxt.org. See vibecoding.cz's /llms.txt as an example. -
Link response headers 30 minutes
In Cloudflare Pages via
public/_headers, in Vercel viavercel.json, elsewhere in your CDN config. Advertise at leastllms-txt,sitemap, and optionallyapi-catalog. -
MCP server half a day
If you have your own backend and want to give agents an interface to actions (search, orders, custom queries), deploy an MCP server. For most content-only sites it's not necessary yet.
Further reading
- isitagentready.com — free agent-readiness testing tool for your website
- agents.cloudflare.com — context on why agents matter
- Google: Optimizing for generative AI features in Search — official GEO guide from Google; note: llms.txt is intentionally absent (concerns Google Search only)
- web.dev: Agent-friendly website best practices — Google's guide for preparing sites for browser agents
- llmstxt.org — the llms.txt specification
- contentsignals.org — Content Signals IETF draft
- modelcontextprotocol.io — MCP specification
- /llms.txt and /.well-known/api-catalog — our own implementation on vibecoding.cz