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.

By Yohann Kipfer, developer — I wrote the analysis engine behind wordpress-audit.com. Published September 13, 2026 · updated September 13, 2026

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.

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:

  1. Diagnosis — the scan finds the problems and ranks them by severity.
  2. Fix — for each one, the exact WordPress plugin or setting to change.
  3. 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.

The 6 dimensions and a typical quick win
DimensionWhat it checksTypical 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 sizeTurn 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, hreflangRemove 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 enumerationTurn 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 builderStop 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 reviewFill 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/2Replace 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.

What an anonymous scan can measure vs what requires admin access
Visible from the outside (this scan)Invisible without access to your WordPress
Server response time, HTML size, compression, image formats, blocking scriptsThe 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 APIYour 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, hreflangDatabase bloat (autoloaded wp_options, post revisions)
Security headers, HTTPS, reachable sensitive filesWeak 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.

AI citation checklist — to check yourself
PointHow to checkWhat 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 file
A 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.

From the issue in the scan to the exact WordPress fix, with estimated effort and gain
Issue in the scanThe exact WordPress fixEffort · estimated gain
Images in JPEG/PNG
image_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 cache
wp_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 response
ttfb 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 JavaScript
css_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/height
img_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 API
wp_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 reachable
xmlrpc 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 exposed
wp_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-Policy
header_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 indexing
meta_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.

mythologiste.com 68/100
  • SEO100
  • Best practices85
  • Accessibility77
  • WordPress73
  • Security42
  • Performance32
Excerpt of the issues found, with the matching fix
CheckStatusWordPress fix
Server Response Time (TTFB)warning1,802 ms → Redis Object Cache
Modern Image Formatsfail0/34 in WebP → Imagify, bulk conversion
Image Lazy Loadingfail0/34 lazy-loaded → restore native lazy loading, turned off by the cache setup
Render-Blocking CSSfail19 stylesheets → WP Rocket, Optimize CSS delivery
Users Exposed via REST APIfail1 account exposed → block the users endpoint
WordPress Versionwarning6.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:

  1. Note your starting score for each dimension (the free audit is enough).
  2. Fix one issue at a time, starting with the failures.
  3. 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 approaches compared
 wordpress-audit.comPageSpeed InsightsSEO plugin (Yoast, Rank Math)Human audit
Scores and prioritized issuesYes, six dimensionsYes: Lighthouse performance, accessibility, best practices, SEOPer-page SEO analysis in the editorYes
Exact WordPress fixYes, plugin or setting namedGeneral advice, some WordPress hintsOn-page SEO onlyYes
Real Core Web VitalsNo — use PageSpeed InsightsYes: lab data, plus real-user data when availableNoDepends on the auditor
Security and WordPress settingsYes: HTTPS, headers, exposed files, XML-RPC, REST APILimited, a few items under best practicesNoDepends on the auditor
Rescan to verifyYes, plus monitoring (Pro)Yes, manualLive in the editorManual
PDF report and competitor comparisonYesNoNoUsually a written report
Backlinks and content qualityNoNoBasic readability and keyword analysisYes
Whole siteNo, one URL per scanNo, one URL per testYes, in the dashboardYes

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 audit

Free audit, no account · full report €9.90 incl. VAT with just an email · Stripe payment