Installation
AIScanner requires WordPress 6.7+ and PHP 7.4+.
- Upload the
aiscanerfolder to/wp-content/plugins/, or install it through Plugins → Add New. - Activate the plugin through the Plugins screen.
- Open AIScanner in the admin menu and click Scan to grade your site.
- Apply a fix from any failing check, then click Verify to confirm the change over a real HTTP request.
Activation creates one custom table ({prefix}_aiscaner_scans) for score history and flushes rewrite rules so /llms.txt, *.md, and .well-known/* routes can resolve.
Quick start
The core workflow is a three-beat loop you can repeat any time your site changes:
- Scan. AIScanner fetches your live URLs and grades five dimensions against the rubric, producing an overall 0–100 score and a readiness level.
- Fix. Each failing check offers a one-click fix. Applying one writes plugin settings only — it never edits your theme or rewrites posts.
- Verify. Re-fetch over a real request to confirm the score moved. A scheduled re-scan then watches for drift.
Because every check is an HTTP request against your own site, the score reflects what a crawler actually sees — including cases where a CDN or a physical robots.txt is overriding WordPress.
The rubric
Scoring is driven entirely by a versioned rubric (rubric-v1) — the single source of truth for what gets scored and how much it’s worth. Each check earns points toward its dimension; dimensions roll up to the overall score using a weighted average. Info-tier results (“couldn’t verify”) and inapplicable dimensions (Commerce, unless WooCommerce is active) are excluded from the denominator.
The overall score maps to one of six readiness levels:
| Level | Name | Score | Meaning |
|---|---|---|---|
| 5 | Agent-Native | 90–100 | Fully legible and actionable to agents. |
| 4 | Interactive | 70–89 | Capabilities & APIs are discoverable. |
| 3 | Governed | 50–69 | Explicit rules for which bots may do what. |
| 2 | Readable | 30–49 | Content available in machine-friendly form. |
| 1 | Discoverable | 10–29 | Basic robots & sitemap signals present. |
| 0 | Invisible | 0–9 | Agents can’t reliably find or read the site. |
A new rubric version is a new file — the engine stays data-driven, so scoring rules can evolve without changing engine code.
Dimensions & checks
Fifteen checks across five dimensions. Each is graded independently over HTTP.
Discoverability — 13 pts
| D1 | robots.txt present & sane | 6 pts · core |
| D2 | XML sitemap | 4 pts · core |
| D3 | Link header for discovery | 3 pts · core |
Content — 18 pts
| C1 | Markdown content negotiation | 8 pts · core |
| C2 | /llms.txt | 6 pts · core |
| C3 | Structured HTML (headings, landmarks, FAQ, tables) | 4 pts · core |
Bot Access — 15 pts
| B1 | Content Signals in robots.txt | 5 pts · core |
| B2 | Explicit AI bot rules | 5 pts · core |
| B3 | Web Bot Auth key directory | 5 pts · advanced |
Capabilities — 12 pts
| K1 | API catalog | 3 pts · advanced |
| K2 | MCP card | 3 pts · advanced |
| K3 | Agent skills | 3 pts · advanced |
| K4 | OAuth metadata | 3 pts · advanced |
Commerce — 10 pts · WooCommerce only
| M1 | UCP signals | 5 pts · advanced |
| M2 | x402 signals | 5 pts · advanced |
Fixes & reversibility
This is the part that sets AIScanner apart from a stateless scanner: it doesn’t just tell you what’s wrong, it fixes it — safely.
- Settings only. Every fix writes plugin settings and nothing else. No theme files are edited, and no posts are rewritten.
- Genuinely reversible. Because state lives in settings, “Turn off” restores the exact prior behavior. Applying the C3 fix, for example, derives the meta description at render time rather than rewriting excerpts.
- Non-destructive exports. Static export refuses to overwrite a
robots.txtorllms.txtit didn’t create, so a hand-maintained file is never clobbered.
Enabled static export and nothing happened? It won’t overwrite an existing robots.txt/llms.txt. Remove or rename the existing file if you want the plugin to manage it.
Agent (MCP) server
AIScanner ships an optional MCP server that exposes scan, fix, verify, and revert as tools an AI agent can call directly. It is off by default and requires a bearer token you generate yourself.
- Go to AIScanner → Settings, tick Enable the MCP server, and click Save Changes.
- Copy the bearer token shown. It is stored hashed and cannot be displayed again — regenerate it if you lose it.
- Add it to your agent:
# Register AIScanner with your agent $ claude mcp add --transport http aiscanner \ https://your-site.com/wp-json/aiscaner/mcp \ --header "Authorization: Bearer <token>" ✓ connected · tools: scan fix verify revert
The token is stored as a SHA-256 hash, never included in a settings export, and can never be set or enabled by a settings import.
Privacy
AIScanner makes HTTP requests to your own site only. It sends nothing to any third party and has no telemetry.
/llms.txt, the Markdown output, and the JSON-LD graph are built exclusively from public content: password-protected, private, draft, and per-entity excluded posts are never included.
Security
- The MCP bearer token is stored as a SHA-256 hash. Its raw value is displayed exactly once, when generated, and cannot be recovered — regenerate it if lost.
- The token is never included in a settings export, and a settings import can never set or enable it.
- Failed MCP authentication attempts are rate-limited per IP, and cross-origin requests to the MCP endpoint are rejected.
- All dashboard REST routes require
manage_options; per-entity routes requireedit_postfor that specific post.
FAQ
Does it conflict with Yoast, Rank Math, or AIOSEO?
No. AIScanner detects them and defers per feature, so you don’t get two sitemaps, two meta descriptions, or two JSON-LD graphs.
Why does a check say “couldn’t verify”?
Some hosts block a site from making HTTP requests to itself. When that happens AIScanner reports an informational result rather than guessing, so a blocked loopback never becomes a misleading pass or fail.
I enabled static export and nothing happened.
Static export refuses to overwrite a robots.txt or llms.txt it did not create, so a hand-maintained file is never clobbered. Remove or rename the existing file if you want the plugin to manage it.
What happens when I uninstall?
Uninstalling removes the custom table, all options and transients, the scheduled re-scan, and any files the plugin exported.
Changelog
0.1.0 — initial release
- Initial release of the scan → fix → verify loop across five dimensions.
- Security: password-protected content excluded from Markdown output,
/llms.txt, and JSON-LD descriptions. - Security: the MCP bearer token is stored hashed, shown once, excluded from settings export, and cannot be set by settings import.
- Security: MCP endpoint validates
Originand rate-limits failed authentication. - Fixed:
*.mdand.well-known/*URLs return a real 404 instead of the front page when a feature is off. - Fixed: applying the C3 fix no longer rewrites post excerpts — the meta description is derived at render time.
- Fixed: scan history is capped per scope instead of growing without bound.