# AEO Site Checker > A free, open Lighthouse-style auditor that grades any URL on Answer Engine Optimization (AEO) — how well a page is set up to be cited by AI search engines (ChatGPT, Claude, Perplexity, Google AI Overviews). Scores 0–100 across 27 weighted checks (+1 type-conditional) in 5 categories. The auditor reads server-rendered HTML directly via undici (no headless browser, no JS execution — same view an AI crawler gets), then runs structured-data extraction, Mozilla Readability, robots.txt parsing for the live AI-bot allow/block matrix, and content heuristics from Princeton's GEO paper. If the direct fetch hits a Cloudflare/Akamai/PerimeterX challenge, the auditor falls back to BrightData's Web Unlocker so the page can still be graded — but the major `fetch_direct` credit (18 of 100 points) is lost, because that's exactly what an LLM crawler would also fail on. The site itself is built with Astro 5 + island-hydrated SolidJS, prerendered for AI crawlers, persisted to SQLite via Prisma. ## Pages - [Home](https://aeositechecker.huzi.party/): Hero, FAQ, scoring overview, demo of how AI assistants cite sources. - [Run audit](https://aeositechecker.huzi.party/audit): Dedicated URL form that runs the full audit and returns a permalink. - [Saved audit (permalink)](https://aeositechecker.huzi.party/audit/{id}): Read-only view of a previously-run audit, scored across all 27 checks. Replace `{id}` with a real cuid. - [Knowledge base](https://aeositechecker.huzi.party/blog): All articles — primers, technical guides, scoring rubric, GEO research summary. ## Knowledge base articles - [What is AEO?](https://aeositechecker.huzi.party/blog/what-is-aeo): Plain-English primer on Answer Engine Optimization, the four pillars (Fetchability, Core SEO, Semantic HTML, Content Quality), and how AEO differs from SEO. - [What is /llms.txt](https://aeositechecker.huzi.party/blog/what-is-llms-txt): Format spec, copy-pasteable template, common gotchas, and how the AEO Site Checker scores the file. - [robots.txt for AI crawlers](https://aeositechecker.huzi.party/blog/robots-txt-for-ai-crawlers): The 12 AI crawlers we audit against, the 7 that are critical, and the exact allowlist that works for almost everyone. - [JSON-LD for AI search](https://aeositechecker.huzi.party/blog/json-ld-for-ai-search): The seven schema.org types AI engines actually look for, with copy-pasteable JSON-LD blocks. - [Why AI crawlers don't run JavaScript](https://aeositechecker.huzi.party/blog/why-ai-crawlers-dont-run-javascript): Cost, determinism, latency — why ChatGPT/Claude/Perplexity fetch raw HTML, and how to make a JS-heavy site visible. - [How AI search engines crawl](https://aeositechecker.huzi.party/blog/how-ai-search-engines-crawl): Technical breakdown of the fetch-and-cite pipeline for ChatGPT, Claude, Perplexity, and Google AI Overviews. - [Cloudflare bot protection and AEO](https://aeositechecker.huzi.party/blog/cloudflare-bot-protection-and-aeo): The single most common AEO failure — Cloudflare blocking AI bots — and the WAF rules to fix it. - [The AEO scoring rubric](https://aeositechecker.huzi.party/blog/aeo-scoring-rubric): Full breakdown of all 27 checks, weights, and how the 0–100 normalization works. - [The Princeton GEO paper, summarized](https://aeositechecker.huzi.party/blog/geo-paper-summary): Aggarwal et al. (2024) — what the +41% statistics lift and +28% quotation lift actually mean, and what gets misread. - [AEO vs SEO: what's actually different](https://aeositechecker.huzi.party/blog/aeo-vs-seo): Side-by-side comparison and which 2018-era SEO tactics now actively hurt you. - [Front-loaded answers](https://aeositechecker.huzi.party/blog/front-loaded-answers): Why direct answers in the first paragraph are the highest-leverage AEO content fix. ## API - [POST /api/audits](https://aeositechecker.huzi.party/api/audits): Send `{ "url": "https://example.com" }` to run an audit. Response includes the full per-check breakdown and a permalink `id`. - [GET /api/audits/{id}](https://aeositechecker.huzi.party/api/audits/): Fetch a saved audit by id. - [GET /api/audits/recent](https://aeositechecker.huzi.party/api/audits/recent): Last 25 audits (id, url, score, grade, mode, createdAt). - [GET /api/health](https://aeositechecker.huzi.party/api/health): Liveness probe. ## Scoring rubric 100 points total across 27 checks in 5 categories, plus 1 type-conditional check. - [Fetchability — 43 points](https://aeositechecker.huzi.party/blog/aeo-scoring-rubric): Direct fetch reachable without bot challenge (18), HTTPS (4), reasonable page size (3), robots.txt allows critical AI bots (10), content rendered server-side without JS (8). - [Core SEO — 21 points](https://aeositechecker.huzi.party/blog/aeo-scoring-rubric): Title 25–65 chars (4), meta description 80–175 chars (4), canonical URL (3), OpenGraph tags (3), Twitter card (2), html lang (1), sitemap.xml (4). - [Semantic HTML — 13 points](https://aeositechecker.huzi.party/blog/aeo-scoring-rubric): Exactly one h1 (3), heading hierarchy (3), header/nav/main/footer landmarks (4), image alt-text coverage (3). - [AEO signals — 26 points](https://aeositechecker.huzi.party/blog/aeo-scoring-rubric): /llms.txt (5), /llms-full.txt bonus (1), JSON-LD types (6), author + Organization sameAs (3), dateModified freshness (2), Mozilla Readability extraction (5), site breadth (4). - [Content quality — 6 points](https://aeositechecker.huzi.party/blog/aeo-scoring-rubric): Front-loaded answer (2), question-shaped headings (1), statistics density (2), blockquotes/quotations (1). - [Type-conditional contact signals — 5 points](https://aeositechecker.huzi.party/blog/aeo-scoring-rubric): Phone, address, hours, service area on local-business / real-estate / person pages. ## AI crawlers checked in robots.txt The auditor probes robots.txt for `OAI-SearchBot`, `ChatGPT-User`, `GPTBot`, `Claude-User`, `Claude-SearchBot`, `ClaudeBot`, `PerplexityBot`, `Perplexity-User`, `Google-Extended`, `Applebot-Extended`, `Meta-ExternalAgent`, and `CCBot`. The "critical" set — the live-fetch and search-index bots whose blocking actually removes you from AI answers — is `ChatGPT-User`, `OAI-SearchBot`, `Claude-User`, `Claude-SearchBot`, `PerplexityBot`, `Perplexity-User`, and `Google-Extended`. ## References - [llms.txt specification](https://llmstxt.org/): The proposed convention this auditor checks for at site root. - [Princeton GEO paper](https://arxiv.org/abs/2311.09735): The empirical study behind the content-quality heuristics. - [Cloudflare verified bots](https://radar.cloudflare.com/bots): Reverse-DNS-verified bot operator IP ranges.