← Docs

The scanner runs deterministic AI-search hygiene checks plus an evidence-graded rulebook. A grade or a pass is not a citation. Shipped today: 30 automated checks on L0–L3 and 167 rules in the rulebook.

Scanner API

The scanner runs deterministic AI-search hygiene checks plus an evidence-graded rulebook. A grade or a pass is not a citation. Shipped today: 30 automated checks on L0–L3 and 167 rules in the rulebook.

The scanner evaluates HTML or text against the deterministic AI-search hygiene checks plus an evidence-graded rulebook. Same deterministic engine powers MCP, CLI, GitHub Action, and the web UI. A grade or a pass is not a citation.

Keyed results: judge field

Detailed (keyed) scans attach a judge on each check and on work-list items. The label is assigned by the deterministic judgeForCheck mapping — not an LLM on our side.

Rules: causality is the causal signal

Every full rule from fetch_rules, search_rules and keyed GET /api/rules carries causality. It is established only when at least one experimental, causal source backs the rule. Read not_established as an association even when the rule is worded as advice ("add X so engines cite you"): the field, not the wording, says what the evidence shows.

How the grade is computed

Each group and the page get a letter from the share of evaluated checks that failed. A failed warn check counts 50% as much as a failed error. Any failed error rules out an A. Warnings alone keep an A until their weight reaches 5% of the checks run. After that the grade is B under 25%, C under 50%, D under 75%, and F above. Two caps apply to the page and to each group. A failed error at level 0 — an indexing blocker such as a robots.txt deny or a page-level noindex — grades F. Otherwise failed error checks cap the grade: one at best B, two at best C, three or more at best D. Advisory checks (BLUF, stuffing, paragraph length, FAQ headings) are reported but do not count toward a grade or a cap. Skipped checks do not count, but a page the scanner could not read never grades A.

Free tier (grades + fundamental fixes)

Keyed tier (detailed)

Machine-readable contract

The customer REST surface (POST /api/scan, keyed GET /api/checks, keyed GET /api/rules) is published as a parseable OpenAPI 3 document for agents and tooling:

Our crawler and robots.txt

The scanner fetches pages as aeogeo-scanner/1.0 (+https://aeogeo.site/docs/scanner). It reads the site's /robots.txt before it fetches a page and follows RFC 9309. The longest matching rule wins, and * and $ work as wildcards.

To keep the scanner off your site, or off part of it:

User-agent: aeogeo-scanner
Disallow: /

Grading is separate. The crawler_policy checks still report what your robots.txt tells GPTBot, OAI-SearchBot, PerplexityBot and the other AI crawlers.

Limits

Every scan runs inside fixed budgets. Past one, the scan stops with an error and a fix instead of running on.

Invariants

Updated