Agent Audit
Check your site against Google's AI-agent UX checklist
This tool checks a page against the recommendations in Google's Build agent-friendly websites article, plus the signals from Lighthouse's agentic browsing audit — the accessibility tree, layout stability, llms.txt, and WebMCP. The same things that help screen readers also help AI agents understand and use your site: semantic HTML, linked labels, real interactive elements with the right size and roles, and a layout that doesn't shift under them.
Two ways to run it:
Quick audit by URL
Fetches the page's HTML and runs static checks. Fast, but can't measure rendered styles or element sizes.
Full audit via bookmarklet
Drag the button below to your bookmarks bar, then click it while on any page to run the full audit (computed styles, rendered sizes, accessibility tree) in an overlay.
Agent AuditDrag this button up to your bookmarks bar ↑
What gets checked
Semantic HTML for interactive elements
Agents — and assistive tech — understand <button> and <a> natively. A <div onclick="..."> is invisible to the accessibility tree unless you add role and tabindex, and even then it's a worse signal than the real element. This check flags non-semantic elements that look interactive (have onclick, role="button", etc.).
Labels linked to inputs
Every form control should have an associated <label> — either via for="input-id", by wrapping the input, or via aria-label/aria-labelledby. Without this link, agents and screen readers don't know what a field is for.
Custom interactive elements have role and tabindex
If you must use a <div> or <span> as a button, it needs role="button" (or appropriate role) and tabindex="0" so it lands in the accessibility tree and keyboard focus order.
Deliberate cursor on actionable elements (bookmarklet only)
A non-default cursor is a strong signal that an element is interactive. Vision-based agents pick up on it. We pass any element that uses a deliberate cursor — pointer, grab, move, zoom-in, etc. — and only flag elements still using the inherited auto/default. Known exceptions we silently skip: disabled buttons (which correctly use not-allowed), native text inputs (cursor: text is right for them), and <details> containers (the click target is the <summary> inside, which is checked separately). Requires computed styles, so bookmarklet only.
Interactive elements ≥ 8 square pixels (bookmarklet only)
Tiny or zero-size interactive elements are a hint that something is broken or hidden. The web.dev guidance: keep visible area larger than 8 px². Requires layout measurements, so bookmarklet only.
No "ghost" interactive elements (bookmarklet only)
Transparent overlays or opacity: 0 covers that still capture clicks confuse vision-based agents — they see one thing and click another. We flag elements with computed opacity: 0 or visibility: hidden that still take up layout space. Known exception we silently skip: the styled-input pattern, where a native control (e.g. <input type="color">, file picker, checkbox) is hidden with opacity: 0 and overlaid by a styled element. We detect this by the presence of an aria-label or aria-labelledby — that's the signal the developer made the input invisible on purpose, with accessibility intact.
Media has explicit dimensions (layout stability)
Lighthouse's agentic audit flags Cumulative Layout Shift because content that jumps around as it loads moves targets out from under an agent mid-task. The biggest culprit is media without reserved space, so we flag <img>, <iframe>, <video>, and embeds that have no width/height attribute and no CSS aspect-ratio. In URL mode we can only see attributes and inline styles, so external CSS may still size them — it's a warning, not a failure. The bookmarklet also reads computed aspect-ratio.
llms.txt summary file
An /llms.txt at your site root is an emerging convention for handing language models a machine-readable, markdown summary of your content and structure. It's optional — not required by Google Search, and its benefit is still unproven — so a missing file is reported as a skip, not a failure. URL mode checks it server-side (the browser can't read it cross-origin); the bookmarklet reads it directly since it's same-origin.
WebMCP interface (experimental)
WebMCP is a proposed protocol for declaring, machine-readably, what the interactive elements on your page actually do — so an agent doesn't have to infer it. The spec is still in active development, so this check is purely informational: we sniff the signals proposed so far (a typed <script> block, <link rel="mcp">, a <meta> tag, and in the bookmarklet the runtime navigator.modelContext) and report whether any are present. Absence is a skip, never a failure.
This tool is an independent project. It is not affiliated with, endorsed by, or associated with Google or web.dev. The URL-audit mode fetches HTML through a Cloudflare Worker on this site; the bookmarklet runs entirely in your browser and sends no data anywhere.