Audit check library
Every check, with its failure mode written next to it.
The audit runs 38 checks across five axes. Each one has a page here saying three things: what it measures, what would make it wrong, and how to check the finding without taking our word for it. A tool that only lists your faults is not worth the click; a tool that tells you where it guesses is.
Discoverability · 30 points
- Title tag
The contents of the first <title> element: presence, length, whether it states what the product does, whether it is just the brand, and how it compares to the H1. A generic title such as “Home” or “Vite + React” scores zero.
- Meta description
The <meta name="description"> value: presence and length. It never falls back to og:description, because the two tags do different jobs.
- H1 heading
How many H1 elements are in the raw HTML and whether the text describes the product rather than a greeting.
- Canonical URL
<link rel="canonical">: presence, whether it resolves, and whether it points at this page or somewhere else.
- Indexable
The meta robots tag and the X-Robots-Tag response header, for noindex, none and nofollow.
- Language attribute
The lang attribute on the <html> element, and whether it is non-empty. Nothing else about language is inferred — no hreflang, no content translation.
- Favicon
Whether a rel=icon link exists, whether the file answers HTTP 200, and its declared content type.
- sitemap.xml
Whether /sitemap.xml or /sitemap_index.xml returns readable XML, including a sitemap declared in robots.txt at a non-standard path.
- Sitemap URL quality
A bounded sample (up to 4) of pages listed in your sitemap: their status, redirects, content type, robots directive, canonical and whether titles repeat.
- robots.txt
Whether robots.txt is served and readable, whether it declares a Sitemap, and whether a declared sitemap can actually be read.
Shareability · 18 points
- og:title
The og:title property and whether it reads as a headline rather than the site name.
- og:description
The presence of the og:description property and whether it carries any real text. It never borrows the value from <meta name="description">, because the two tags are read by different audiences.
- og:image
Whether og:image is declared, resolvable, and — since v4 — whether the image actually answers. We send a HEAD request to the URL and read its status, content type and declared size, next to any declared og:image:width/height/type.
- twitter:card
Whether twitter:card is present and whether it asks for a large image.
- twitter:image
Whether a twitter:image property is declared, and whether it resolves to an absolute URL. We do not re-fetch it here — og:image is the one we actually request.
AI visibility · 15 points
- Answer-engine access
robots.txt parsed into User-agent groups, then tested for five retrieval agents — OAI-SearchBot, ChatGPT-User, PerplexityBot, Claude-WebBot, anthropic-ai — against the audited page's path. Longest matching rule wins, Allow beats Disallow on a tie, an empty Disallow blocks nothing, and an agent with no group of its own falls back to the * group.
- Training-crawler consent
The same parse, for GPTBot, ClaudeBot and Google-Extended — the crawlers that collect material for future models.
- Server-rendered content
How much text is in the HTML you were sent, plus two app-shell markers: a root container named root/app/__next/nuxt/svelte/vue/angular/application, and a noscript asking the visitor to enable JavaScript.
- llms.txt
Whether /llms.txt is served, its size, and how many pointers it contains — Markdown links and bare URLs both count.
- Structured data entity
What the JSON-LD actually claims: the @type values found, whether the primary entity carries name, url and description, whether a product or organisation type is present at all, and — new in v5 — whether the name in the markup has any word overlap with the page's own title and H1.
Credibility · 22 points
- Image alt text
How many <img> elements exist, how many carry an alt attribute, and whether the text is a real description. alt="" counts as handled: it is the correct way to mark decorative art. A filename used as alt does not.
- Heading structure
The sequence of heading levels in document order and whether any level is skipped.
- Body copy
How much visible text the page carries and whether it states who the product is for and what it does.
- E-E-A-T · Experience signals
Visible first-hand signals: screenshots or demos, numbers, named users, dated changelog entries, an author byline.
- E-E-A-T · Expertise signals
Author attribution, an about or team page in the navigation, and Person or Organization markup.
- E-E-A-T · Authority signals
Links to recognised public profiles and outbound links to documentation, research or reference material on other hosts.
- E-E-A-T · Trust signals
Whether the page links a privacy policy, terms and a contact route, and whether HTTPS is in place.
- JSON-LD syntax
Whether each application/ld+json block parses as JSON, and how many fail.
- Internal links
How many links point to another path on the same host.
- Response headers
Presence of Strict-Transport-Security, a Content-Security-Policy, X-Content-Type-Options: nosniff, and a frame control (X-Frame-Options or CSP frame-ancestors) on the page response.
- Mixed content
On an HTTPS page, subresource references still written as http:// — src, srcset, poster, data-src, background and url(...) in inline style.
- Form transport
Whether any <form action> on an HTTPS page points at an http:// endpoint.
Performance · 15 points
- Server response time
Time to first response headers, measured from our server, once.
- HTML weight
Bytes of HTML returned for this one URL.
- Blocking scripts
<script src> elements inside <head> with no async, defer or type=module.
- Mobile viewport
The presence and shape of <meta name="viewport">.
- HTTPS
Whether the audited URL ends up on an https: connection.
- Lazy-loaded images
How many <img> elements carry loading="lazy", against the total.