WordPress audit: the scan that tells you what to change, then checks that it is fixed
Most audit tools give you a score and leave you there. This one does two more things: for each issue it finds, it names the WordPress plugin or setting to change, and you rescan afterward to confirm the fix worked. Paste your URL and the audit starts right away.
Run the audit, read later
Paste the URL of your WordPress site. The engine runs up to 81 checks across six dimensions and returns a score for each one, plus the five fixes to make first, ranked by severity. Free, no signup.
Nothing to install and no access to your dashboard. The engine reads your site from the outside, the way Googlebot does.
Your recent audits
This list is kept in this browser only. Click an address to put it back in the form.
In short: a WordPress audit checks one page across six areas — performance, SEO, security, WordPress settings, accessibility and best practices — and scores each one out of 100. The automated part takes under a minute. The score is only a thermometer, though: what changes your traffic and your exposure is fixing the failed checks in the right order, with the right plugin or setting, then rescanning to confirm. This page gives you both: the diagnosis, and the exact change that fixes it.
What a WordPress audit should give you
If you are looking for a WordPress audit — a WordPress site audit, a security audit, a speed audit — you probably do not need a definition. You want to know what is wrong on your site, and above all what to do next. Many guides on the topic handle the first half and skip the second.
They list thirty things to check and give advice that is true but generic — “optimize your images,” “install a caching plugin” — and stop there. You close the tab knowing what to look at, without knowing what is actually broken on your site or how to fix it precisely. That is the gap this page fills. “Optimize your images” does not help. “Open Imagify, turn on WebP conversion and Display images in Next-Gen format on the site, then rescan” does.
The loop has three steps, and it is what this whole page is about:
- Diagnosis — the scan finds the problems and ranks them by severity.
- Fix — for each one, the exact WordPress plugin or setting to change.
- Proof — a rescan that shows the score before and after. Without it, you never know whether you fixed the problem or just moved it.
What the scan checks, and a quick win in each dimension
Six dimensions. The free audit gives you the score for each one plus the five priority fixes. For each dimension, here is a high-return fix that comes up often — the kind you can do this weekend.
| Dimension | What it checks | Typical quick win (high impact, low effort) |
|---|---|---|
| Performance 15 checks | Server response time (TTFB), HTML size, compression, browser cache headers, image formats, lazy loading, image dimensions, render-blocking CSS and JavaScript, third-party scripts, DOM size | Turn on a page cache and serve images as WebP |
| SEO 15 checks | Title, meta description, H1 and heading structure, canonical, robots.txt, XML sitemap, meta robots, structured data, Open Graph, viewport, hreflang | Remove a forgotten noindex in Settings › Reading |
| Security 11 checks | HTTPS, HSTS, security headers, server version leaks, sensitive files left in the web root, XML-RPC, directory listing, author enumeration | Turn off directory listing with Options -Indexes |
| WordPress 17 checks, only when WordPress is detected | Exposed version, theme, plugins, page cache, SEO plugin, REST API and exposed user accounts, emoji script, jQuery, Heartbeat, page builder | Stop the REST API from listing your user accounts |
| Accessibility 11 checks | Image alt text, link text, form labels, skip link, landmarks, focus styles, ARIA, tab order; contrast and touch targets are flagged for manual review | Fill in the Alternative Text field of content images in the Media Library |
| Best practices 12 checks | Doctype, charset, favicon, broken CSS or JavaScript files, mixed content, deprecated elements, preconnect, manifest, HTTP/2 | Replace http:// resource URLs on an HTTPS site (mixed content) |
Many audits stop at a list like this one. The rest of this page goes further: the exact WordPress change, issue by issue.
How the score is calculated, and what it does not tell you
The question comes up every time — where does this number come from? — so here is the full answer.
Each dimension starts at 100 points. Each check that warns or fails deducts a fixed number of points, written in the engine's code. A warning costs 3 to 20 points: most cost between 3 and 8, and a slow server response is the exception at 12 or 20. A fail costs 8 to 30. Lines reported as information cost nothing, except three minor security headers that cost 2 or 3 points each when missing. A dimension never goes below 0. The overall score is the average of the dimensions, rounded. If the site does not run WordPress, the WordPress dimension is skipped and the average uses five dimensions.
In practice, an overall 68 can hide a 100 in one dimension and a 32 in another. That is exactly what the real example below shows. The overall score reassures or worries you; the dimension scores tell you where to dig.
A score is not a Google ranking
No score out of 100 — ours or PageSpeed Insights' — is a ranking factor. Google's Core Web Vitals are thresholds measured on real visitors: the largest content should render within 2.5 seconds (LCP), the page should respond to interactions within 200 milliseconds (INP), and layout shift should stay at 0.1 or less (CLS), measured at the 75th percentile of page loads, according to web.dev. Going from 82 to 87 by polishing warnings earns you nothing in search. Fixing a failed indexing check can.
Core Web Vitals: use PageSpeed Insights for those
Know this before you read your result: this scan does not measure the Core Web Vitals. It reads your HTML and your server's responses without rendering the page in a browser, so it has no LCP, INP or CLS figures to give you. What it does measure are the usual WordPress causes behind poor vitals: slow server response, images without dimensions, render-blocking CSS and scripts, heavy third-party code. For the vitals themselves, run your URL through PageSpeed Insights, which shows lab data and, when Google has enough traffic data for your page, real-user data from the Chrome UX Report. If your site is verified in Google Search Console, its Core Web Vitals report groups your URLs by status.
What an external audit sees, and what it does not
The engine reads your site from the outside, with no access to the dashboard. That is a choice — nothing to install, nothing to connect — and it comes with a trade-off worth stating plainly.
| Visible from the outside (this scan) | Invisible without access to your WordPress |
|---|---|
| Server response time, HTML size, compression, image formats, blocking scripts | The exact WordPress version (the scan only sees it if it leaks in the page or the RSS feed) |
| Page cache signals, reachable XML-RPC, user accounts listed by the REST API | Your full plugin list and its update status (a plugin that loads nothing on the front end leaves no trace) |
| Title, meta description, H1, canonical, sitemap, robots.txt, JSON-LD, hreflang | Database bloat (autoloaded wp_options, post revisions) |
| Security headers, HTTPS, reachable sensitive files | Weak passwords, user roles, broken cron jobs, malware already on the server |
In other words, the scanner sees what Googlebot and an attacker see — and that is precisely what costs you rankings or exposes you. What it cannot see needs your own eyes in the dashboard, or a server-side security plugin such as Wordfence. When a point depends on admin access, this page says so rather than padding the check count.
A seventh layer most audits skip: whether AI assistants can find and cite you
Some of your visitors now reach you through an answer in ChatGPT, Claude, Perplexity or Google rather than through a list of links. Being cited in those answers is sometimes called GEO, for generative engine optimization, and most WordPress audits do not look at it yet.
To be upfront: of the points below, only hreflang is checked automatically by the engine (SEO dimension). The robots.txt check only raises an alarm when the whole site is blocked for all bots or for Googlebot; a block aimed at AI crawlers is left alone, because it can be a deliberate choice. The rest takes about thirty seconds each to check by hand. Here is how, with the exact command.
| Point | How to check | What you want to see |
|---|---|---|
| AI crawler access OpenAI, Anthropic and Google each separate training from search. Blocking GPTBot or ClaudeBot opts you out of model training, not out of ChatGPT or Claude search answers; blocking OAI-SearchBot or Claude-SearchBot does remove you from those. Google-Extended governs Gemini training and grounding, not Google Search. |
curl -s https://your-site.com/robots.txt and look for OAI-SearchBot, GPTBot, Claude-SearchBot, ClaudeBot, PerplexityBot, Google-Extended |
No Disallow: / for the search crawlers (OAI-SearchBot, Claude-SearchBot, PerplexityBot) if you want to be cited |
llms.txt fileA proposal published by Jeremy Howard in September 2024: a Markdown summary of your site for language models, placed at the root. It is not an official standard. |
curl -I https://your-site.com/llms.txt |
If you decide to publish one: a 200 rather than a 404, with your key pages listed |
| E-E-A-T signals Experience, expertise, authoritativeness and trust: the concepts Google's search quality rater guidelines use to assess a page. |
Open an article: visible byline, linked author page, publication and update dates, links to sources | A real, named author, not “admin” |
| hreflang | auto checked by the scan (hreflang, SEO dimension) |
Declared and consistent if the site targets several languages or regions |
Crawler roles as documented by OpenAI, Anthropic, Perplexity and Google, which states that Google-Extended “does not impact a site's inclusion in Google Search.” The llms.txt proposal is at llmstxt.org.
A word on WordPress specifically. The SEO plugin you already use — Yoast SEO, Rank Math, SEOPress — outputs the structured data and dates; the byline and the author page come from your theme. An llms.txt file goes at the root of the site: a text file, nothing more. Crawler access is set in the virtual robots.txt WordPress generates, or in your SEO plugin's robots.txt editor.
The WordPress action plan: exactly what to change
This is where this page parts ways with the rest. A scanner that says “improve your TTFB” leaves you searching for two hours. Here, for common failures, is the specific change — the plugin, the option, the setting. The IDs in code are the check IDs in your report, so you can match each row to your scan; the point cost comes straight from the engine's code.
The last column is my own judgment, stated as such: an estimate of effort and gain based on making these fixes on our own sites, not a figure produced by the engine. Use it to decide when everything is red: first what takes ten minutes and pays off, then, on a quiet day, what takes two hours and hardens the site without moving the score much.
| Issue in the scan | The exact WordPress fix | Effort · estimated gain |
|---|---|---|
Images in JPEG/PNGimage_format fail, −14 | Imagify: turn on WebP conversion, enable Display images in Next-Gen format on the site, then run the bulk optimization of the media library. ShortPixel does the same job. | About 15 minutes of setup, then the conversion runs on its own · high gain on page weight |
No page cachewp_cache fail, −15 (WordPress dimension)“Not detected” means no plugin folder, header or HTML comment gave a cache away; a host-level cache that leaves no trace can be missed. | On a LiteSpeed server, install LiteSpeed Cache and enable its cache. Otherwise, WP Rocket turns page caching on by itself as soon as it is activated. | About 10 minutes · high gain on server response time |
Slow server responsettfb over 600 ms: −12, −20 or −30 | In this order: move to PHP 8.3 or later (the version WordPress.org recommends) with OPcache enabled at your host; install Redis Object Cache if your host provides a Redis server; as a last resort, leave an overloaded shared host. | From 15 minutes (switching PHP) to half a day (changing hosts) · high gain, very variable effort |
Render-blocking CSS and JavaScriptcss_blocking up to −10, js_blocking up to −15 | WP Rocket › File Optimization: Optimize CSS delivery for the stylesheets, Load JavaScript deferred for the scripts. Check your pages afterward: these options sometimes break a slider or a menu. | About 10 minutes, plus 20 minutes of visual checks · medium to high gain, watch for breakage |
Images without width/heightimg_dimensions up to −10, your first layout-shift lever | Since WordPress 5.5, core fills in missing width and height on images in post content. If they are still missing, the image comes from the theme or a page builder: fix the template so it uses wp_get_attachment_image(), which prints both attributes. | 20 minutes to a few hours, depending on the theme · high gain on layout stability |
User accounts listed by the REST APIwp_users_api fail, −10 (WordPress dimension) | Wordfence › All Options › Brute Force Protection: check Prevent discovery of usernames through '/?author=N' scans, the oEmbed API, the WordPress REST API, and WordPress XML Sitemaps, which also fixes user_enum. Or remove the /wp/v2/users routes for logged-out visitors with a rest_endpoints filter. Check first that no plugin relies on that endpoint. | About 5 minutes, one checkbox · clear security gain |
XML-RPC reachablexmlrpc warning, −5 | If nothing on your site uses XML-RPC (Jetpack is the usual exception): the Disable XML-RPC-API plugin, or a server rule that denies access to xmlrpc.php. | About 5 minutes · moderate security gain; check first that nothing depends on XML-RPC |
WordPress version exposedwp_version warning, −5 | The engine reads the generator meta tag and, failing that, your RSS feed. remove_action('wp_head', 'wp_generator'); only hides the first one; add_filter('the_generator', '__return_empty_string'); in a child theme's functions.php covers both. | About 5 minutes · low gain: cosmetic hardening, not a vulnerability in itself |
No Content-Security-Policyheader_content_security_policy, −8 | Set it as an HTTP header on the server (Nginx, Apache) or with the HTTP Headers plugin. Start with Content-Security-Policy-Report-Only so nothing breaks while you tune it; the check only passes once the enforcing Content-Security-Policy header is in place. | 1 to 2 hours in report-only mode · real but advanced security gain, sensitive sites first |
Page blocked from indexingmeta_robots fail, −20 | Settings › Reading: uncheck Discourage search engines from indexing this site. If it is already unchecked, look for a noindex setting on that page in your SEO plugin. | 2 minutes · decisive gain if the page is meant to rank |
The €9.90 full report goes through all 81 checks with the measured value and the recommendation for each, plus the PDF export. The free audit gives you the five priority fixes: often enough for a first weekend. The order I follow on our own sites: page cache and WebP on Saturday morning (high gain, low effort), the REST API user list right after, then render-blocking CSS and JavaScript when there is time to retest the pages.
What the output looks like on a real site
Rather than a polished mockup, here is the real scan of mythologiste.com from July 16, 2026, a WooCommerce store we host ourselves. Its flaws are ours, and I am not going to dress them up.
- SEO100
- Best practices85
- Accessibility77
- WordPress73
- Security42
- Performance32
| Check | Status | WordPress fix |
|---|---|---|
| Server Response Time (TTFB) | warning | 1,802 ms → Redis Object Cache |
| Modern Image Formats | fail | 0/34 in WebP → Imagify, bulk conversion |
| Image Lazy Loading | fail | 0/34 lazy-loaded → restore native lazy loading, turned off by the cache setup |
| Render-Blocking CSS | fail | 19 stylesheets → WP Rocket, Optimize CSS delivery |
| Users Exposed via REST API | fail | 1 account exposed → block the users endpoint |
| WordPress Version | warning | 6.8.5 exposed → empty the generator |
The contrast is the part that matters: 100/100 on SEO, 32/100 on performance, same site, same moment. The SEO plugin does its job — title, meta description, canonical, sitemap, schema, all clean. It says nothing about performance or security, because an SEO plugin does not look at them. It is a common misunderstanding among WordPress site owners: “I have Yoast, so my site is fine.”
The proof: rescan after each fix
Fixing without checking is working blind. A real example: on mythologiste.com, turning on page caching to bring the server response time down also turned off WordPress's native lazy loading. The performance score went up on one line, and a new failure appeared on another. Without a rescan, we would never have noticed.
The method is plain and reliable:
- Note your starting score for each dimension (the free audit is enough).
- Fix one issue at a time, starting with the failures.
- Rescan the same URL. Did the score move the right way? Keep the change. Did it not move, or did another issue appear? You know right away what to adjust.
For the pages that matter, make the rescan a monthly habit, because a WordPress site degrades on its own: a theme update brings back JPEG images, a plugin adds a blocking script, a migration turns “Discourage search engines” back on. The Pro plan (€29/month, account required) rescans your sites daily or weekly and emails you when a score drops. For a handful of pages, the free manual rescan already does most of the work.
Which tool for which job
This scanner replaces neither your SEO plugin, nor PageSpeed Insights, nor a consultant. It covers a specific need; here is which one, and what it cannot do.
| wordpress-audit.com | PageSpeed Insights | SEO plugin (Yoast, Rank Math) | Human audit | |
|---|---|---|---|---|
| Scores and prioritized issues | Yes, six dimensions | Yes: Lighthouse performance, accessibility, best practices, SEO | Per-page SEO analysis in the editor | Yes |
| Exact WordPress fix | Yes, plugin or setting named | General advice, some WordPress hints | On-page SEO only | Yes |
| Real Core Web Vitals | No — use PageSpeed Insights | Yes: lab data, plus real-user data when available | No | Depends on the auditor |
| Security and WordPress settings | Yes: HTTPS, headers, exposed files, XML-RPC, REST API | Limited, a few items under best practices | No | Depends on the auditor |
| Rescan to verify | Yes, plus monitoring (Pro) | Yes, manual | Live in the editor | Manual |
| PDF report and competitor comparison | Yes | No | No | Usually a written report |
| Backlinks and content quality | No | No | Basic readability and keyword analysis | Yes |
| Whole site | No, one URL per scan | No, one URL per test | Yes, in the dashboard | Yes |
Our limits, plainly. The engine analyzes one URL at a time, not the whole site: it will not see your orphan pages, your click depth or your duplicate content. It knows nothing about your backlinks and does not judge whether your content answers the search intent. A sensible order: the scan first, because it takes a minute and catches the mechanical problems; a side-by-side comparison with a competitor next; then a human, if the business stakes justify it.
What we actually find: 21 WordPress sites through the scanner
Method. On July 16, 2026, I ran 21 French-language WordPress sites through this engine: WordPress and SEO blogs, agency sites, hosting company sites. It is a flattering sample — web professionals, not a small business site left untouched since 2019 — and a French-language one, so a sample of English-language sites could look different. Keep both in mind.
- Median overall score: 79/100 (min 65, max 87). Nobody reached 90, including people who do this for a living.
- 15 of 21 sites serve no image in WebP or AVIF. None at all. Worst of the batch: a page loading 293 images, every one of them JPEG or PNG.
- 6 of the 11 sites whose REST API responds publish their user list at
/wp-json/wp/v2/users— up to 10 usernames in clear text, the first half of what a password-guessing attack needs. - 16 of 21 sites have no Content-Security-Policy, and 9 of 21 have no HSTS.
- Median server response time: 171 ms; only 3 of 21 sites exceed 600 ms. In this sample, images are the widespread problem, not servers.
Two things this batch taught me. The slowest server response in the sample (1,802 ms) belongs to a site we manage ourselves. And a well-known French-language SEO site was serving, that day, the title of an Indonesian online gambling spam page (“ROYALTOGEL — Login Bandar Slot Gacor”): an injection hack invisible from the WordPress dashboard, but the first thing Google read. An external audit saw it; the dashboard did not.
Frequently asked questions
How much does a WordPress audit cost here?
The audit is free, with no signup: the overall score, a score for each dimension and the five priority fixes, ranked by severity. The full report — all 81 checks on a WordPress site, each with the measured value and the recommendation, plus a PDF export — costs €9.90 including VAT, as a one-time payment. You do not need an account to buy it: an email address is enough, and the report link is sent there. The Pro plan at €29/month requires an account and only makes sense if you monitor several sites.
Do I need to create an account or install a plugin?
No. For the free audit, you paste the URL and the scan starts. There is no plugin to install: the engine reads your site from the outside, the way Googlebot does, with no access to your dashboard. An account is only useful to keep your reports in one place or to use monitoring.
How is the score out of 100 calculated?
Each dimension starts at 100 points and loses a fixed amount for each check that does not pass: 3 to 20 points for a warning, 8 to 30 for a failure. The overall score is the rounded average of the six dimensions, or of five when the site does not run WordPress. It is not a grade from Google; it is a way to decide what to fix first.
Does it cover a WordPress security audit and a speed audit?
Partly, and here is where the line is. On security, it checks HTTPS and HSTS, security headers, server version leaks, sensitive files left in the web root, XML-RPC, directory listing, author enumeration and user accounts exposed by the REST API. It cannot tell whether a site is already hacked or whether a plugin has a known vulnerability. On speed, it measures server response time, compression, cache headers, images and render-blocking resources, but not the Core Web Vitals: use PageSpeed Insights for LCP, INP and CLS.
Does the audit check whether AI assistants can cite my site?
Partly. hreflang is checked automatically. The rest — whether search crawlers such as OAI-SearchBot, Claude-SearchBot and PerplexityBot are allowed in your robots.txt, whether you publish an llms.txt file, and your E-E-A-T signals — is checked by hand, and the AI section of this page gives the exact command for each.
What should I do after fixing an issue?
Rescan the same URL and compare. If the fix worked, the score moves the right way, and you spot side effects right away — like a cache setting that turns off lazy loading. For automatic tracking of your key pages, the Pro plan rescans on a schedule and emails you when a score drops.
My site does not run WordPress. Does the audit still work?
Yes. The engine detects that WordPress is absent and skips that dimension: performance, SEO, security, accessibility and best practices remain, 64 checks in all. The overall score is then the average of those five dimensions.
How is this different from PageSpeed Insights?
PageSpeed Insights runs Lighthouse in a real browser and reports the Core Web Vitals, with real-user data when Google has enough of it. It does not check your REST API, your WordPress version, exposed files, XML-RPC or directory listing. The two work together: PageSpeed Insights for measured speed, this scanner for the WordPress-specific causes, the security exposure and the exact fix.
Audit your WordPress site
Six dimensions, under a minute, no signup. You will see which scores are red on your site — and what to change to fix them.
Run the free auditFree audit, no account · full report €9.90 incl. VAT with just an email · Stripe payment