Readiness audit & score
How the audit fetches your site the way a crawler would, how the 0–100 score and its bands are computed, and which fixes are one click away.
Updated 2026-10-08 · applies to Acid AEO 1.0.4
The audit requests your own site over HTTP, reads what a crawler would read, and turns the findings into a score from 0 to 100. It sits on the dashboard beside Top fixes.
What the audit checks
Each enabled module reports on its own files. A module that is switched off adds one warning, Module "…" is disabled. Labels below are as the dashboard shows them. A file check passes when the file answers 200 with the expected content type. Findings are listed Fail first, then Warning, Pass and Skipped, and by weight within each.
Files are served
robots.txt is reachable,llms.txt is reachable,llms-full.txt is reachable,humans.txt is reachable,ai.txt is reachable,ai-context.json is reachable,security.txt is reachable,IndexNow key file is reachable.llms.txt points somewhereneeds at least five links.llms.txt stays an indexneeds a body under 100 KB.
JSON-LD on the home page and the newest post
Home page JSON-LD,Article JSON-LD(warns when the image is missing) andAuthor profiles are complete.
robots.txt
AI crawler rules in robots.txtandContent-Signal in robots.txt.
Headers and head tags
Link header points at llms.txtandContent-Signal header.Snippet limits are lifted(max-snippet:-1) andPages point at llms.txt.
Site and HTTPS
Pretty permalinks,HTTPS,Search engine visibility,Full text RSS feed,Site logo,Schema ownership,Loopback requestsandAuthor profiles.
IndexNow, security.txt and content
Recent IndexNow submissions(one accepted in the last 30 days),security.txt contact,security.txt expiry date,Citation events table,Tracking survives the page cache,Posts lead with a summary,The site publishes a FAQ.
Static files
Filesystem accessandGenerated files are on disk.
Shadowing files
No robots.txt on diskandNo conflicting llms.txt on disk. See the Hosting page.
How the score is computed
Every check has a weight: 10 for a check an answer engine trips over, 5 for one that costs reach, 2 for polish. A Pass earns its full weight, a Warning half of it, a Fail nothing. Skipped checks are left out of the total.
The score is earned ÷ possible × 100, rounded. A site where every check is skipped scores 100. The result is cached for ten minutes.
| Band | Score | Dashboard label |
|---|---|---|
| Excellent | 90 and above | Excellent |
| Good | 75 to 89 | Good |
| Fair | 50 to 74 | Fair |
| Poor | below 50 | Needs work |
Pass, Warning, Fail, Skipped
The four counters under the score ring use these words.
- Pass: the check found what it looks for.
- Warning: something is off but nothing is broken. It earns half its weight.
- Fail: the file or tag a crawler needs is missing or wrong.
- Skipped: the check could not be verified or does not apply, for example when the host blocks loopback requests, when a feature is switched off on purpose, or when the site has no posts yet. It does not count against you.
One-click fixes
A check with a Fix button can repair itself. Top fixes shows the first five checks that are not a Pass.
| Fix | What it does |
|---|---|
| Switch a module on | Turns the module on and schedules a rewrite flush. |
| Flush rewrite rules | Rebuilds the routes for every published file. |
| Set permalinks | Sets the structure to /%postname%/. |
| Search engine visibility | Lets search engines index the site again. |
| Full text feed | Switches the RSS feed from excerpts to full text. |
| Renew the security.txt date | Pushes Expires a year out. |
| New IndexNow key | Issues a new key and moves its verification file. |
| Write the files to disk | Writes the generated files, as the Static files module does. |
| Citation beacon | Switches the browser beacon on, for sites behind a page cache. |
Header and schema findings have no button: the cause is usually a cache or another plugin, and the message says where to look.
Re-running it
Click Re-run audit on the dashboard. It drops the cached answers and measures the site again. The daily maintenance task does not run the audit, so open the dashboard or use WP-CLI after a change.
wp acid-aeo audit # cached result, table
wp acid-aeo audit --fresh # measure again
wp acid-aeo audit --fresh --format=json | jq .score
--format is table (default) or json. The command exits with status 1 when the score is below 50, so a pipeline can stop on it:
- name: AI readiness gate
run: wp acid-aeo audit --fresh
When the site cannot reach itself
The audit fetches your URLs from the server that hosts them. Each request has an 8 second timeout, follows at most 2 redirects and identifies itself as AcidAEO-Audit/<version>. Two things can go wrong, and they look different.
The host answers, but refuses. Basic auth, a staging password or a firewall returns 401 or 403. The site counts as reachable, so the file checks Fail with "answered with HTTP 401 instead of 200" until you pass credentials with the acid_aeo_loopback_args filter:
add_filter( 'acid_aeo_loopback_args', function ( $args, $url ) {
$args['headers']['Authorization'] = 'Basic ' . base64_encode( 'user:password' );
return $args;
}, 10, 2 );
The request never completes. A timeout, a DNS or TLS error, or an answer of 500 or above on the home page makes Loopback requests warn, and every check that needs a fetch is Skipped. Skipped checks are left out of the score, so the number reflects only what could be measured, and the loopback warning itself costs half its small weight.
If the files are fine from outside but the audit still fails, check the server rules on the Hosting page.
Found a mistake or something missing? Write to [email protected].