Detector & audit reference
All 13 detectors, their thresholds, the audit check ids, and where to fix each.
All 13 detectors are enabled by default; toggle any of them via
config.detectors (see The Engine). The
Fix guide column links to a fix guide for each — framework-specific where the
fix differs.
| Detector | What it catches | Threshold | Fix guide |
|---|---|---|---|
dom-bloat | Excessive DOM nodes and deep nesting | ≥ 800 nodes (warning), ≥ 1,500 (error) | Excessive DOM size |
duplicate-requests | The same URL + method fetched repeatedly | 2+ identical requests within 2s | Duplicate requests |
console-spam | High-volume console output | > 20 calls per 10s window | Console log spam |
memory-leak | Steadily growing JS heap without GC recovery | > 10% growth over 30s (warning), > 25% (error) | Memory leak |
layout-thrashing | Clusters of layout shifts without user input | ≥ 3 shifts within 500ms | Layout shift |
unoptimized-images | Missing dimensions/lazy/alt, oversized, or distorted images | natural > 2× rendered; aspect mismatch > 0.15 | Unoptimized images |
large-images | Oversized image transfers | ≥ 500KB (warning), ≥ 1,024KB (error) | Large image files |
long-task-attribution | Scripts causing long animation frames (LoAF) | ≥ 3 long frames attributed to one source | Long tasks |
resource-bloat | Oversized JS/CSS/font/image resources | ≥ 100KB (prod) / 500KB (dev) | Large JS bundles |
web-essentials | Missing document essentials (favicon, viewport, lang, charset) | 4 document checks | Web essentials |
heavy-library | Known heavy libraries and their pitfalls | 16 library signatures | Heavy dependencies |
seo | Discoverability / search-visibility problems | 20 checks (title ≤ 60, description ≤ 160 chars, …) | Search visibility |
aeo | AI answer-engine / agent readiness | 9 checks | AI readiness |
Audit checks
The seo, aeo, and web-essentials detectors each emit one issue per failed
check. Each check id below is the value carried in the issue's evidence.check.
Search visibility (seo) — 20 checks
Fix guides live under /fix/seo.
title-missing— Missing page titletitle-too-long— Page title is too longtitle-default— Page title is a framework defaultmeta-description-missing— Missing meta descriptionmeta-description-too-long— Meta description is too longog-image-missing— Missing social preview image (og:image)og-title-missing— Missing og:titleog-description-missing— Missing og:descriptioncanonical-missing— Missing canonical linkh1-missing— No <h1> headingh1-multiple— Multiple <h1> headingsimage-alt-missing— Images missing alt textslug-unfriendly— Unfriendly URL slugnoindex— Page is set to "noindex"title-too-short— Page title is very shortog-url-missing— Missing og:urltwitter-card-missing— Missing Twitter/X cardgeneric-link-text— Vague link textsitemap-missing— Missing or invalid sitemap.xmlrobots-missing— Missing robots.txt
AI answer-engine readiness (aeo) — 9 checks
Fix guides live under /fix/aeo.
structured-data-missing— No structured data (JSON-LD)structured-data-invalid— Structured data is invalidno-main-landmark— No <main> landmarkno-author-metadata— No author or date signalsllms-txt-missing— No llms.txtcontent-requires-js— Content only renders with JavaScriptmarkdown-negotiation-missing— No markdown content negotiationai-crawlers-blocked— robots.txt blocks AI crawlersmcp-discovery-missing— No agent interface (MCP) advertised
Document essentials (web-essentials) — 4 checks
Fix guides live under /fix/essentials.
favicon— Missing faviconviewport— Missing viewport meta taglang— Missing lang attribute on <html>charset— Missing charset declaration
Evidence shapes
Each issue carries a typed evidence object — e.g. dom-bloat emits
{ nodeCount, maxDepth, selector }, duplicate-requests emits
{ url, method, count, windowMs }. See IssueEvidenceMap in the
protocol types for the full per-detector map.