A1robots.txt exists and does not disallow known AI botsweight 9
A2llms.txt is present and validsuggestion
A3sitemap.xml is present and validweight 9
A4Schema.org JSON-LD is present and parsessuggestion
A5Real content is in the raw HTML, not only after JS runsweight 9
A6Time to first byte is fast enough for agent fetchesweight 8
A7No noai or noimageai tag is silently blocking AIweight 8
A8Served over HTTPS with HSTSweight 9
B1Markdown twin URL is reachable and returns 2xxsuggestion
B2Content-Type is exactly text/markdown; charset=utf-8suggestion
B3Markdown response body is non-empty and carries the pagesuggestion
B4X-Markdown-Tokens is present and a positive integersuggestion
B5X-Content-Type-Options: nosniff is presentsuggestion
B6X-Robots-Tag on the twin includes noindexsuggestion
B7Vary includes Accept, so CDNs cache the two formats separatelysuggestion
B8HTML response advertises the twin via Link rel="alternate"suggestion
B9Accept: text/markdown receives markdown, not HTMLsuggestion
B10A known AI bot User-Agent receives markdown without an Accept headersuggestion
B11An Accept header excluding HTML and markdown returns 406suggestion
B12X-AEO-Version advertises the spec version implementedsuggestion
B13The original HTML URL is still reachable and unaffectedweight 9
B14The served markdown still matches the live pagesuggestion
Status codes are never trusted on their own. A catch-all route that answers robots.txt with its HTML shell and a 200 is detected by reading the body, and scored as the missing file it is. How each check is scored.