The audit is a set of read-only checks you run from WP-CLI, over REST, or through a connected assistant. wp visibility audit checks five site settings and prints four counts; wp visibility post-audit <id> checks one post. Each finding is pass, warn or fail with a sentence saying why. Nothing is changed by running it.
Run it
wp visibility audit
wp visibility post-audit 123
wp visibility audit --format=json
--format accepts table (the default), csv, json, yaml or count. Over REST, GET /wp-json/wpvis/v1/audit/site needs manage_options and GET /wp-json/wpvis/v1/audit/post/<id> needs permission to edit that post. With the Assistant connection module on, an assistant uses the “Audit the site”, “Audit a post” and “Get site SEO health” abilities, the last of which sums the site checks up as good, fair or needs_attention.
There is no audit screen in the settings. The editor’s pre-publish panel and content checks are separate checks run in the browser.
The site checks
| Check | Fails or warns when | What to do |
|---|---|---|
blog_public |
Fail: Settings → Reading discourages search engines | Untick it on a live site. On staging it is correct. |
permalink_structure |
Warn: plain permalinks (?p=123) |
Choose any structure other than Plain in Settings → Permalinks. |
site_represents |
Warn: no organization name, or person mode with no user | Set your site identity. |
default_social_image |
Warn: no default social image | Set one. |
sitemaps_module |
Warn: the Sitemaps module is off | Turn it on, or accept WordPress’s own sitemap. |
The counts that follow are published posts, an estimate of posts missing a hand-written description (posts relying on their excerpt count as missing), posts with their own noindex setting (in any status, and not counting a site-wide rule for a post type), and redirect rules (zero while the Redirects module is off).
The post checks
| Check | Passes when | Otherwise |
|---|---|---|
title |
30 to 60 characters | Warn with the length; fail if there is no title at all |
description |
70 to 160 characters | Warn with the length; fail if none is set and none can be generated |
noindex |
The post is indexable | Warn: the post is set to noindex |
canonical |
No canonical, or one on this site’s host | Warn: it points to another host |
thin_content |
150 words or more | Warn with the word count |
social_image |
A social, featured or default image resolves | Warn: no image resolves |
single_h1 |
At most one H1 in the content | Warn with the count |
The title and description are measured as stored, before templates are rendered, so a post relying on its template is measured against the raw post title, and a post with no description is measured against the excerpt the plugin generates from its excerpt or content. The noindex check reads the post’s own setting, not a site-wide rule for its post type.
Read the results with care
The thresholds are editing checks. A 62-character title, a 140-word announcement or a deliberately noindexed page can all be right. Google publishes no ideal title length and says it has no preferred word count (both checked September 27, 2026), so treat a warning as a prompt to look, not an order. Your SEO Plugin Score Is a Checklist explains why.
A canonical on another host can be deliberate, for example on a post republished from another site or a headless site where another address is the public one.
Turn missing descriptions into proposals
With the Autopilot module on, WP Visibility → Review queue has a Run audit button, and the empty queue offers Run an audit now. It looks at up to 50 of the newest published posts with no hand-written description and queues a proposal for each, drafted from the post’s own text, for you to approve or reject. A post that already has an open proposal, or has no text to draft from, is skipped. It can run once a minute. The Weekly audit toggle in the Autopilot section, off by default, does the same once a week. Nothing is applied until you approve it, and the other checks never create proposals.
Behavior checked against WP Visibility 2.10.3.