How we audit a site, and what the numbers mean
Everything we check, how we score it, how we gather AI answers and fact-check them, and what no one can promise. The numbers on this page come straight from the scoring code.
- ReadYour pages, as AI crawlers see them
- Check157 checks, each explained
- ScoreWeighted, with an AI access cap
- Ask AI5 AI tools, several phrasings
- Fact-checkEvery claim against your site
1Reading your site
Our crawler, AISearchAnalyzerBot, fetches your pages the way most AI crawlers do: plain HTML, no JavaScript. That's deliberate. If your content only appears after JavaScript runs, AI crawlers that skip JavaScript see an empty page, and so do we.
Up to 50 pages and 141 checks, usually in under 30 seconds.
Up to 200 pages and all 157 checks, with speed tests on key pages and accessibility.
- We follow robots.txt for our own crawler and never log in or submit forms.
- We request your homepage once as a browser and once as an AI agent, to catch firewalls that turn AI crawlers away.
- Google's PageSpeed test runs on your homepage with every scan, for real loading numbers and Google's four test scores.
2The checks
157 checks in 10 categories. Each is labeled measured (we observed it directly) or inferred (a heuristic, shown with that label). A check that can't finish says "could not verify" and never counts against you. Open a category to see every check in it.
AI crawler access15 checks, 20% of the score
| Check | Severity | How | Runs in |
|---|---|---|---|
| robots.txt blocks an AI search crawler (OAI-SearchBot, ChatGPT-User, Claude-SearchBot, Claude-User, PerplexityBot, Perplexity-User) | Critical | Measured | Free scan |
| robots.txt blocks an AI training crawler (GPTBot, ClaudeBot, Google-Extended, Applebot-Extended, CCBot, Meta-ExternalAgent); shown as a choice, not a fault | Info | Measured | Free scan |
| robots.txt blocks Bingbot (Bing's index feeds ChatGPT search) | Critical | Measured | Free scan |
| robots.txt blocks Googlebot (feeds AI Overviews and Gemini) | Critical | Measured | Free scan |
| No robots.txt at all | Low | Measured | Free scan |
| robots.txt returns 5xx or times out (crawlers may treat the whole site as blocked) | High | Measured | Free scan |
| robots.txt has invalid or ignored lines | Low | Measured | Free scan |
| Site answers an AI crawler user agent with 403, a challenge page or different content than a browser (likely a firewall or "block AI bots" setting) | High | Inferred | Free scan |
| Page uses noai / noimageai or similar directives | Info | Measured | Free scan |
| Main content is missing from the raw HTML (AI crawlers that do not run JavaScript see an empty page) | Critical | Measured | Free scan |
| Significant content appears only after JavaScript (compared with a rendered copy) | High | Measured | Deep audit |
| Navigation links exist only after JavaScript, so crawlers cannot find other pages | High | Measured | Free scan |
| llms.txt present or absent, and valid if present; framed honestly (low impact today) | Info | Measured | Free scan |
| Key pages lack direct, quotable answers (question headings followed by a concise answer) | Medium | Inferred | Deep audit |
| No visible or structured last-updated date on content pages | Low | Inferred | Free scan |
Crawling and indexing48 checks, 15% of the score
| Check | Severity | How | Runs in |
|---|---|---|---|
| Internal links point to redirecting URLs | Medium | Measured | Free scan |
| Pages return 4xx | High | Measured | Free scan |
| Pages return 5xx | Critical | Measured | Free scan |
| Redirect chains (more than one hop) | Medium | Measured | Free scan |
| Redirect loops | Critical | Measured | Free scan |
| Pages that time out | High | Measured | Free scan |
| Internal pages blocked by robots.txt | Medium | Measured | Free scan |
| Pages with noindex | Medium | Measured | Free scan |
| The homepage is noindex | Critical | Measured | Free scan |
| X-Robots-Tag header restricts indexing | Medium | Measured | Free scan |
| nosnippet directive (blocks quoting in search and AI answers) | High | Measured | Free scan |
| noimageindex directive | Low | Measured | Free scan |
| Pages more than 4 clicks from the homepage | Low | Measured | Free scan |
| Pages in the sitemap with no internal links pointing to them | Medium | Measured | Free scan |
| Pages with no outgoing links | Low | Measured | Free scan |
| Pages return 200 but read as "not found" | Medium | Inferred | Free scan |
| No XML sitemap found (robots.txt or common paths) | Medium | Measured | Free scan |
| Sitemap fails to parse or exceeds limits | Medium | Measured | Free scan |
| noindex pages in the sitemap | Medium | Measured | Free scan |
| Sitemap pages blocked by robots.txt | Medium | Measured | Free scan |
| Non-canonical pages in the sitemap | Low | Measured | Free scan |
| Sitemap URLs that redirect or error | Medium | Measured | Free scan |
| Indexable pages with no canonical | Low | Measured | Free scan |
| More than one canonical tag | Medium | Measured | Free scan |
| Relative canonical URL | Low | Measured | Free scan |
| Canonical in HTML differs from the HTTP header | Medium | Measured | Free scan |
| Canonical points to a page that is itself canonicalized elsewhere | Medium | Measured | Free scan |
| Canonical points to a noindex or blocked page | High | Measured | Free scan |
| Canonical points to a redirect | Medium | Measured | Free scan |
| Canonical points to an error page | High | Measured | Free scan |
| Pages with identical content | Medium | Measured | Free scan |
| Near-duplicate pages (simhash) | Low | Inferred | Free scan |
| hreflang not bidirectional | Medium | Measured | Free scan |
| hreflang to a non-canonical page | Medium | Measured | Free scan |
| hreflang to a non-indexable page | Medium | Measured | Free scan |
| hreflang to a redirect | Low | Measured | Free scan |
| hreflang to an error page | Medium | Measured | Free scan |
| hreflang set without x-default | Low | Measured | Free scan |
| hreflang set without a self reference | Low | Measured | Free scan |
| Self-referencing hreflang does not match the page lang | Low | Measured | Free scan |
| Relative hreflang URLs | Low | Measured | Free scan |
| Page referenced under several languages | Low | Measured | Free scan |
| rel next/prev without the matching link | Low | Measured | Free scan |
| URLs with underscores | Info | Measured | Free scan |
| URLs with spaces | Low | Measured | Free scan |
| URLs with repeated slashes | Low | Measured | Free scan |
| Very long URLs or many parameters | Info | Measured | Free scan |
| Wrong or mismatched content type | Low | Measured | Free scan |
On-page25 checks, 14% of the score
| Check | Severity | How | Runs in |
|---|---|---|---|
| Missing or empty title | High | Measured | Free scan |
| Title too short | Low | Measured | Free scan |
| Title too long | Low | Measured | Free scan |
| Duplicate titles across pages | Medium | Measured | Free scan |
| More than one title tag | Medium | Measured | Free scan |
| Brand name missing from the homepage title | Low | Measured | Free scan |
| Missing meta description | Medium | Measured | Free scan |
| Meta description too short | Low | Measured | Free scan |
| Meta description too long | Low | Measured | Free scan |
| Duplicate meta descriptions | Low | Measured | Free scan |
| More than one meta description | Low | Measured | Free scan |
| Missing or empty H1 | Medium | Measured | Free scan |
| More than one H1 | Low | Measured | Free scan |
| Heading levels skip or are out of order | Low | Measured | Free scan |
| Too little text content | Medium | Measured | Free scan |
| Images without alt | Medium | Measured | Free scan |
| Alt text too long | Info | Measured | Free scan |
| Missing html lang | Low | Measured | Free scan |
| Invalid lang value | Low | Measured | Free scan |
| Missing Open Graph title, description or image | Low | Measured | Free scan |
| Missing Twitter card | Info | Measured | Free scan |
| No favicon (shown beside results in search and AI answers) | Low | Measured | Free scan |
| Meta tags placed in the body | Low | Measured | Free scan |
| Duplicate id attributes | Info | Measured | Free scan |
| Internal links with generic anchor text ("click here") | Low | Measured | Free scan |
Links11 checks, 5% of the score
| Check | Severity | How | Runs in |
|---|---|---|---|
| Broken internal links | High | Measured | Free scan |
| Broken external links | Low | Measured | Deep audit |
| External links to redirects | Info | Measured | Deep audit |
| Links using http:// | Low | Measured | Free scan |
| Too many links on one page | Low | Measured | Free scan |
| Internal links with nofollow | Medium | Measured | Free scan |
| nofollow links to indexable pages | Medium | Measured | Free scan |
| Page receives both follow and nofollow internal links | Low | Measured | Free scan |
| External links without nofollow or sponsored where expected | Info | Inferred | Free scan |
| Links to localhost or 127.0.0.1 | Medium | Measured | Free scan |
| Important pages with very few internal links | Medium | Measured | Free scan |
Speed and mobile19 checks, 8% of the score
| Check | Severity | How | Runs in |
|---|---|---|---|
| Largest Contentful Paint, real users if available, else lab | High | Measured | Free scan |
| Interaction to Next Paint (real users) | Medium | Measured | Free scan |
| Cumulative Layout Shift | Medium | Measured | Free scan |
| Google speed score, mobile | Medium | Measured | Free scan |
| Render-blocking resources | Medium | Measured | Deep audit |
| Images not in a modern format | Low | Measured | Deep audit |
| Images larger than displayed | Low | Measured | Deep audit |
| Large unused JavaScript | Low | Measured | Deep audit |
| Slow time to first byte | Medium | Measured | Free scan |
| Heavy page (total bytes) | Low | Measured | Free scan |
| Large image files | Low | Measured | Free scan |
| Images without width and height | Low | Measured | Free scan |
| picture element missing img | Low | Measured | Free scan |
| Excessive DOM size | Low | Measured | Free scan |
| HTML or text assets served uncompressed | Medium | Measured | Free scan |
| Static assets without cache headers | Low | Measured | Free scan |
| Missing viewport meta | High | Measured | Free scan |
| Tap targets too small or close | Low | Measured | Deep audit |
| Text too small on mobile | Low | Measured | Deep audit |
Accessibility3 checks, 3% of the score
| Check | Severity | How | Runs in |
|---|---|---|---|
| Low text contrast | Medium | Measured | Deep audit |
| Form fields or buttons without accessible names | Medium | Measured | Deep audit |
| Invalid ARIA or missing landmarks | Low | Measured | Deep audit |
Security10 checks, 6% of the score
| Check | Severity | How | Runs in |
|---|---|---|---|
| Site or pages served over http | Critical | Measured | Free scan |
| http does not redirect to https | High | Measured | Free scan |
| TLS certificate expires within 21 days | High | Measured | Free scan |
| https page loads http resources | Medium | Measured | Free scan |
| Missing HSTS | Low | Measured | Free scan |
| Missing Content Security Policy | Info | Measured | Free scan |
| Missing X-Content-Type-Options | Info | Measured | Free scan |
| Forms on http pages | High | Measured | Free scan |
| Forms posting to http | High | Measured | Free scan |
| www and non-www both serve content without redirecting | Medium | Measured | Free scan |
Structured data10 checks, 12% of the score
| Check | Severity | How | Runs in |
|---|---|---|---|
| No structured data anywhere on the site | High | Measured | Free scan |
| No Organization or LocalBusiness on the homepage (how AI identifies who you are) | High | Measured | Free scan |
| Organization lacks sameAs links to official profiles | Medium | Measured | Free scan |
| JSON-LD fails to parse | High | Measured | Free scan |
| Type is missing properties required for its rich result | Medium | Measured | Free scan |
| Structured data disagrees with visible content (price, name, rating) | Medium | Inferred | Free scan |
| Page type has no matching schema (Product, Article, FAQPage, Service, SoftwareApplication) | Low | Inferred | Free scan |
| No BreadcrumbList on deep pages | Info | Measured | Free scan |
| Local business without address, hours or geo in schema (weighted up for local profiles) | Medium | Measured | Free scan |
| Microdata or RDFa present (detected and validated alongside JSON-LD) | Info | Measured | Free scan |
Content6 checks, 7% of the score
| Check | Severity | How | Runs in |
|---|---|---|---|
| Hard-to-read text for the audience (grade level) | Low | Inferred | Free scan |
| No question-and-answer content where the category's customers ask questions | Medium | Inferred | Deep audit |
| No comparison or "vs" page in a category where AI recommends competitors | Medium | Inferred | Deep audit |
| Pricing not stated on the site (AI cannot answer "how much") | Medium | Inferred | Free scan |
| Content pages not updated in over 12 months | Low | Inferred | Free scan |
| Homepage does not state plainly what the business is, for whom, and where | High | Inferred | Deep audit |
Trust and identity7 checks, 10% of the score
| Check | Severity | How | Runs in |
|---|---|---|---|
| No About page | Medium | Measured | Free scan |
| No contact page or contact details | Medium | Measured | Free scan |
| No privacy policy or terms | Low | Measured | Free scan |
| Articles without an author or byline | Low | Measured | Free scan |
| Brand name spelled differently across title, schema, OG and footer | Medium | Measured | Free scan |
| Local business name, address and phone inconsistent across pages | Medium | Measured | Free scan |
| No links to official social or directory profiles | Low | Measured | Free scan |
We also detect your platform, CDN and SEO plugin. They aren't findings; they let us write every fix for your setup.
3Scores
Each category starts at 100 and loses points for every failing check, weighted by severity and by how many pages it affects. The overall score is the weighted average of the categories.
- AI crawler access20%
- Crawling and indexing15%
- On-page14%
- Structured data12%
- Trust and identity10%
- Speed and mobile8%
- Content7%
- Security6%
- Links5%
- Accessibility3%
Structured data and identity weigh more than in a classic SEO audit, because they're how AI tools decide who you are.
One rule overrides the average: when AI search tools are shut out, the score can't go above a cap, however good the rest is.
- 751 of the 5 AI tools fully blocked
- 652 blocked
- 553 or 4 blocked
- 45All 5 blocked, or the page is empty without JavaScript
A separate number built from the classic categories.
- Can Google find you30%
- Page basics20%
- Speed and mobile20%
- Links10%
- Security10%
- Rich results10%
4AI answers
We ask each tool from its own knowledge, and with live web search where it offers it. Being known only one way needs different fixes.
One question is a sample, not a verdict, so we ask each question more than one way.
Answers can differ a little from the consumer apps, which personalize by user and location.
The same question is answered once and reused: up to 6 days for ChatGPT and Perplexity, up to 13 for Claude, Gemini and ChatGPT with live search.
5Fact-checking
When a tool describes you, we compare its claims (prices, location, hours, services) with your site. When it explains why it left you out, we test each reason against your pages. You only fix what's really missing.
6Limits
Scores and AI answers are estimates from samples at a point in time. AI tools change often and answer differently by user, place and phrasing. No one can guarantee a ranking, a citation or a recommendation, and we don't.
7Method changes
When we change a check, a weight or a score rule, it's dated here, so you can tell whether a score moved because your site changed or because we did.
- Small sites: on a real one-page site, an About section, contact details and a privacy link on the page count. On a site that links to pages we couldn't read, with fewer than three read, About, Contact and Policies say "could not verify" instead of failing.
- AI answers are reused for up to 6 days from ChatGPT (from memory) and Perplexity, and up to 13 days from Claude, Gemini and ChatGPT with live search, so weekly monitoring asks each tool fresh at least every two weeks.
- The AI access cap is graduated by how many of the five AI tools are fully blocked: 75 for one, 65 for two, 55 for three or four, 45 for all five or an empty-without-JavaScript page. Redirecting links are counted once per link, not once per page that carries them. Polish notes (lengths, heading order, generic link text, a second H1, noindex pages) count about a third, and an issue repeated across a large site counts less, calibrated on ten large sites.
- Added the SEO grade: six areas weighted 30, 20, 20, 10, 10 and 10 percent, with grades A from 90, B from 80, C from 65, D from 50 and F below. Every scan now records Google's four test scores, and speed uses real Chrome visitor data when Google has it.
- Deep audits gained checks that need more time: PageSpeed on key pages, external links, a comparison of the page as delivered and as rendered, and answer-readiness. Pages without a body tag are now read correctly instead of failing the scan.
- First published method: 157 checks, the category weights and severity penalties above, and the cap at 45 when AI crawlers can't read the site.