TL;DR
AgentFix runs 34 signals across 7 categories, grades A-F on pass ratio, and generates a fix pack for whatever's missing. This page lists every check with the reason it matters - so long-lived content on our blog, GitHub README, and third-party listings can link here instead of hard-coding a number that changes.
On this page
- Discoverability (5)
- AI Policy (3)
- Content (9)
- Schema (5)
- Agent Protocols (3)
- Browser UX (6)
- AI Visibility (3)
- How we score
- Changelog
Discoverability · 5 signals
The files AI crawlers hit first to figure out what your site is and where the rest of the content lives.
robots_txt_existsrobots.txt file present
robots.txt is the first file AI crawlers request. Missing or empty means every crawler has to guess your policy, which many read as `disallow`.
sitemap_linkedsitemap.xml present and referenced
A sitemap gives agents the full URL list without walking every internal link. Reference it in robots.txt with `Sitemap:` and expose /sitemap.xml.
llms_txt_existsllms.txt file present
llms.txt is the emerging AI equivalent of robots.txt: it tells agents where the human-readable primary content lives, in the order you want them to read it.
llms_full_txt_existsllms-full.txt file present
llms-full.txt is your whole site as clean markdown in a single fetch. Modern LLM context windows fit it easily; agents that can load it skip crawling.
syndication_feedRSS / Atom / JSON Feed declared in <head>
Feed subscribers (Perplexity Pages, Feedly AI, custom GPTs with web access) prefer a feed over re-crawling. Declared via `<link rel="alternate">`.
AI Policy · 3 signals
Explicit signals in robots.txt about which AI crawlers may fetch your content and how it may be used.
content_signals_declaredAI Content Signals in robots.txt
The Cloudflare Content-Signal directive tells AI systems your preferences for search, training, and AI input separately. Skipped = crawler guesses.
gptbot_declaredGPTBot rule in robots.txt
An explicit User-agent block for GPTBot (allow or disallow) is a clear intent signal to OpenAI's crawler. Silence is treated as ambiguous.
claudebot_declaredClaudeBot rule in robots.txt
Same principle for Anthropic: naming ClaudeBot / anthropic-ai explicitly avoids the crawler having to fall back to generic User-agent: * rules.
Content · 9 signals
How your primary content is structured and served - the signals AI agents use to parse and cite it.
markdown_content_negotiationMarkdown content negotiation
Returning `text/markdown` when the client asks for it (via Accept header) lets agents pull clean content without HTML stripping.
semantic_html5Semantic HTML5 structure
`<main>`, `<article>`, `<section>`, `<nav>` help agents identify the primary content region and skip chrome. Divs-only pages force fragile heuristics.
h1_presentSingle H1 heading
A clear single H1 gives agents the primary topic. Multiple or missing H1s confuse outline extractors and citation systems.
meta_descriptionMeta description present
A concrete description helps agents summarize the page without reading full content. Also used for AI-answer snippets.
canonical_urlCanonical URL declared
Canonical tags resolve duplicate-URL ambiguity (trailing slash, www, query params). Without them, AI crawlers may split authority across variants.
ssr_pre_renderedContent visible without JavaScript
Most AI crawlers do not execute JS. Client-side-rendered SPAs look empty to them. SSR / SSG / ISR fixes this in one build-config change.
lang_attribute<html lang> set with a valid BCP 47 code
Agents route users to language-correct answers based on the root `lang` attribute. Missing = fallback to English; wrong = wrong-language served.
heading_hierarchyHeading hierarchy doesn't skip levels
Jumping H1 → H3 breaks outline extraction. Keep heading levels monotonic: descend by one at a time so agents build a valid table of contents.
image_alt_coverageImage alt text coverage ≥ 80%
AI vision models augment classifier output with alt text. Sites with mostly bare `<img>` tags expose only filenames - rarely meaningful to agents.
Schema · 5 signals
Structured data (JSON-LD) that gives agents machine-readable identity, hierarchy, and provenance for your content.
schema_organizationOrganization schema.org markup
Organization JSON-LD tells agents who runs the site, contact info, and social profiles - the identity block behind citations.
schema_websiteWebSite schema.org markup
WebSite JSON-LD signals name, URL, and optional SearchAction. It's the top-level fact agents use to name your site in an answer.
open_graphOpen Graph meta tags
og:title / og:description / og:image drive rich previews and give agents a canonical title / summary pair per URL.
schema_faq_breadcrumbFAQPage or BreadcrumbList schema
FAQPage gets your Q&A cited verbatim in AI Overviews. BreadcrumbList locates the page in your hierarchy so agents can suggest the parent category.
article_metadata_completeArticle schema includes author + datePublished
For pages that declare Article / BlogPosting, AI citation engines need at minimum author + datePublished to attribute the quote. dateModified lifts weight.
Agent Protocols · 3 signals
The new `/.well-known/*` files that let AI agent frameworks discover your site's capabilities directly, without scraping the UI.
mcp_server_cardMCP Server Card (.well-known/mcp/server-card.json)
MCP Server Cards (SEP-2127) let Claude Desktop, Cursor, Windsurf, and other MCP clients discover which capabilities your site exposes.
agent_skills_indexAgent Skills index (.well-known/agent-skills/index.json)
Agent Skills declare what discrete actions an agent can perform on your site - separate from Server Card, focused on invocable operations.
agent_cardAgent Card (.well-known/agent-card.json)
Google's Agent-to-Agent (A2A) protocol advertises your site to cross-platform agent frameworks. Sits alongside MCP; different discovery mesh.
Browser UX · 6 signals
Signals a browser-driving agent (Operator, Claude Computer Use, an internal agent stack) needs to interact with your site reliably.
aria_labelsInteractive elements have ARIA labels
aria-label / aria-labelledby / title / visible text on buttons and inputs - how a browser agent identifies what to click.
tap_targetsTap targets ≥ 24×24px
Small targets cause browser agents to miss or misfire clicks, especially on mobile viewports. 24×24px is the WCAG minimum.
no_blocking_overlaysNo full-screen blocking overlays
Cookie banners and interstitials that cover the viewport on first load stop browser agents from reaching main content until they solve the modal.
low_clsCumulative Layout Shift < 0.1
High CLS causes agents to click wrong elements as the page shifts under them. Stabilize layout with image dimensions and no late-injected chrome.
descriptive_titleDescriptive page title
A unique, descriptive `<title>` helps browser agents disambiguate tabs and reference the page back to the user.
shadow_dom_accessibleContent accessible to AI crawlers (no closed shadow DOM)
Closed shadow roots are invisible to AI crawlers. Prefer open shadow roots or declarative shadow DOM so component content ships in HTML source.
AI Visibility · 3 signals
The homepage-level signals that determine whether an AI crawler can even reach the rest of your content.
no_anti_bot_blockNo anti-bot challenge on the homepage
Cloudflare Turnstile, hCaptcha, reCAPTCHA, DataDome, Kasada, Akamai Bot Manager, PerimeterX on the homepage - AI crawlers hit the challenge and silently drop the site from their index. Fine on /signup or /admin; not on the entry page.
real_anchor_navigationNavigation uses real <a href> links
SPAs that use `<button onClick={navigate}>` for internal links have no hrefs for crawlers to follow. The rest of the site becomes invisible.
homepage_indexable_by_aiHomepage isn't blocked from AI search by meta robots
`noindex`, `noai`, `noimageai`, `nosnippet` on the homepage removes you from AI search - sometimes carried over from staging by accident.
How we score
Every scan runs the whole checklist. Each signal returns pass, fail, partial, or skipped. Partial and skipped count against the denominator - no vanity 100% for signals we couldn't evaluate.
| Grade | Pass ratio | Meaning |
|---|---|---|
| A | ≥ 85% | Agent-native. Ready to be cited. |
| B | ≥ 70% | Solid. A few high-leverage gaps. |
| C | ≥ 55% | Partially discoverable. Missing structured signals. |
| D | ≥ 40% | Mostly invisible. Basics need to land first. |
| F | < 40% | Not agent-readable in current form. |
We publish grade and pass count on every scan and on the public certificate. Rescan and the certificate updates.
Changelog
- 2026-07-10 · v1Methodology page live. Initial checklist: 34 signals across 7 categories.
This list will grow as the AI-agent web matures. Notable directions on our roadmap: checkout / signup readiness (autocomplete hints, well-known flow schemas), agent-friendly SSO, and declarative content negotiation across feed formats. When a category is added, this page updates in one place.
See where your site stands
Run the whole checklist against your homepage in about 30 seconds. Free.
Scan my site →