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 Audit

Drag 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.

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.