Download the script
152 lines. Pure Python 3 standard library. No dependencies, no API keys.
How to run it
# Score a saved HTML file python aeo-readiness-scorer.py page.html # Or fetch and score a URL directly python aeo-readiness-scorer.py https://example.com/blog-post
Output is JSON with a per-signal verdict and a prioritized fix list.
Per-signal checks
Twelve signals, each weighted 2–5 by impact on citation likelihood.
llms.txt presence
Root file that tells AI crawlers what to index.
JSON-LD structured data
Schema.org blocks the page exposes.
Schema @types
Article, Product, FAQPage, Organization, etc.
Canonical link
<link rel="canonical"> pointing to the right URL.
FAQ structure
FAQPage schema or definition list pattern.
Title length
Between 30 and 65 characters.
H1 uniqueness
Exactly one h1 on the page.
Meta description length
Between 120 and 160 characters.
Paragraph length
Median paragraph under ~600 characters.
First-paragraph entity density
Named entities packed into the lede.
External citations
Links to authoritative sources.
Heading depth
Reasonable h2/h3 structure.
Credits
The Readiness layer concept is from Aleyda Solis‘s three-layer AEO framework (Presence / Readiness / Impact). This tool implements the Readiness scoring as a runnable script.