=== SEO Clarity ===
Tags: seo, audit, content, search console, performance
Requires at least: 6.5
Tested up to: 7.1
Requires PHP: 8.0
Stable tag: 0.6.8
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Understand and improve WordPress SEO with clear checks, priorities, guidance, and safe assisted fixes.

== Description ==

SEO Clarity is a WordPress SEO audit and guidance plugin designed to make search-engine optimization understandable for normal site owners.

Instead of showing a single mysterious score, SEO Clarity separates findings into problems, improvements, passed checks, and information. Every finding explains:

* What SEO Clarity found.
* Why it matters.
* What you should do next.
* Whether a change can be applied safely, needs assistance, or should remain manual.
* Optional technical details for advanced users.

Version 0.6.8 keeps the dashboard compact by collapsing step-by-step remediation guides, Search visibility, and Performance by default. Targeted links and provider/PageSpeed action redirects automatically reopen the relevant panel so detailed workflows remain one click away.

Version 0.6.7 adds context-aware step-by-step remediation guides to actionable warnings and informational checks. The guides use concrete WordPress menu paths, direct admin links, detected SEO-provider instructions, copy buttons for local drafts, and explicit optional/no-action wording so non-technical site owners know exactly what to do next.

Version 0.6.5 hardens the live audit workflow introduced in 0.6.4. Asynchronous scans now use a dedicated WordPress AJAX action, tolerate polluted or unexpected response bodies more gracefully, show a concrete technical error when available, and offer a one-click fallback that runs the existing classic form submission without live progress.

Version 0.6.3's more concrete findings remain included: results name exact headings, images, URLs, plugins, response observations, and search-integration targets wherever the scanner can determine them reliably. Relevant checks also show safe examples or local drafts without changing the site automatically.

The Content Assistant does not call an AI or external writing service. Its drafts are generated locally from the WordPress title, headings, excerpt, and visible stored text. They are starting points, not ranking promises. When exactly one supported metadata provider is active (Yoast SEO, Rank Math SEO, or SEOPress), an administrator can explicitly save a reviewed title or description into that provider. SEO Clarity does not create a competing metadata layer of its own.

The Google Search Console and Bing Webmaster Tools integrations from 0.5.0 remain opt-in and are never contacted automatically during a normal SEO Clarity audit. The audit only evaluates the most recently saved external snapshot. The optional administrator-triggered PageSpeed Insights test also never runs automatically.


= Content Assistant =

Version 0.6.0 adds a Content Assistant to full audits. It is deliberately deterministic and local: no page text is sent to an AI provider, the plugin author, Google, or another writing service to generate suggestions.

For analyzed public content, the assistant shows:

* The WordPress page title and any stored supported-plugin SEO title.
* The stored meta description when available.
* An editable SEO-title draft.
* An editable meta-description draft based on the excerpt or opening visible text.
* A simple illustrative search-result preview.
* Word count, subheading count, and frequent topic signals as orientation aids.
* Clear review flags for very generic/repetitive titles, unusually short/long non-template metadata, long stored content without subheadings, and substantially identical page openings.
* A separate people-first checklist for important qualities that software cannot reliably score, including usefulness, originality, expertise, completeness, and freshness.

The display-length checks are heuristics, not Google ranking limits. Google documents no fixed title-character limit and can truncate title links as needed. Meta descriptions can also be rewritten into query-specific snippets. SEO Clarity therefore recommends concise, specific wording rather than chasing an exact character count.

The assistant expands a small set of common Yoast, Rank Math, and SEOPress template variables for preview purposes. Unknown or more advanced template variables remain the responsibility of the SEO plugin. If a stored title or description contains template variables, SEO Clarity avoids automatically replacing it; the administrator must deliberately enter and save a plain-text replacement.

When exactly one of Yoast SEO, Rank Math SEO, or SEOPress is active, SEO Clarity can save a reviewed SEO title or meta description directly to that provider's existing post metadata. Each field has its own save button. A fingerprint of the metadata state captured during the audit is verified before writing; if the metadata changed in the meantime, SEO Clarity refuses the stale update and asks for a fresh audit. When multiple supported SEO suites are active, writing is disabled to avoid ambiguity.

The Content Assistant stores at most 100 item summaries in the saved audit by default. The limit can be adjusted with `seo_clarity_content_assistant_limit`.

= Search visibility integrations =

Version 0.5.0 adds a dedicated Search visibility panel. Local SEO checks and external search-engine measurements remain visually and technically separate so site owners can tell the difference between “SEO Clarity found this on my website” and “Google/Bing reported this in my webmaster account.”

Google Search Console integration uses OAuth 2.0 and the read-only `https://www.googleapis.com/auth/webmasters.readonly` scope. SEO Clarity does not ship a shared Google client secret. The site administrator supplies a Google OAuth Web application client ID and client secret, either through the plugin screen or the `SEO_CLARITY_GOOGLE_CLIENT_ID` and `SEO_CLARITY_GOOGLE_CLIENT_SECRET` constants. The exact redirect URI to register in Google Cloud is shown in the plugin UI.

After explicit authorization and refresh, SEO Clarity stores a compact local snapshot containing:

* The selected Search Console property and accessible property list.
* Final Search Analytics totals for the latest 28-day period ending two days before the refresh, plus the preceding comparison period.
* Up to ten top queries and top pages.
* Search Console sitemap records for the selected property.

Google URL Inspection is a separate explicit administrator action because it has its own API quotas. SEO Clarity currently inspects only the public homepage and stores Google’s index-status response separately from the regular audit. Google’s URL Inspection API reports the version in Google’s index; it is not a live-URL test.

Bing Webmaster Tools integration supports the API-key authentication method documented by Microsoft and uses the JSON/HTTP API, not the retiring SOAP or POX protocols. The API key can be entered in the plugin or supplied with the `SEO_CLARITY_BING_API_KEY` constant. SEO Clarity retrieves the verified site matching the current WordPress host, top query/page statistics, rank/traffic history, the latest crawl-statistics row, and top-level feeds/sitemaps.

Version 0.5.0 adds six audit checks that consume these saved snapshots without making network requests: Google connection state, Google sitemap submission, Google homepage index status, Bing connection state, Bing sitemap submission, and Bing crawl health. Unconfigured optional integrations are informational rather than SEO errors.

= Performance analysis =

Version 0.4.0 adds eight local performance checks. These checks are deliberately described as diagnostics rather than universal ranking rules. For example, a large HTML document or several third-party origins may deserve investigation, but the number alone does not prove poor user experience.

The performance overview includes:

* Rendered homepage HTML transfer size.
* Observed text compression headers.
* Homepage images without usable intrinsic width and height attributes.
* A conservative review of lazy-loading/priority hints on later homepage images.
* Responsive `srcset` coverage for sizeable raster-image candidates.
* Third-party script and stylesheet origins.
* A bounded same-site sample of cache headers for local CSS and JavaScript during a full audit.
* A bounded Media Library sample for unusually large image originals during a full audit.

WordPress itself applies contextual image loading optimizations such as `loading`, `fetchpriority`, and `decoding`. SEO Clarity therefore does not recommend adding lazy loading blindly to every image, especially not to an important image likely to be visible immediately.

= Optional PageSpeed Insights =

The Performance panel includes explicit Mobile and Desktop buttons for Google PageSpeed Insights. Pressing one of these buttons sends the public homepage URL to the Google PageSpeed Insights API and stores a compact copy of the returned result in the WordPress options table. The normal quick and full audits do not call Google.

SEO Clarity displays the Lighthouse performance score and useful lab metrics such as LCP, CLS, TBT, and FCP. When PageSpeed Insights returns sufficient real-user data, SEO Clarity also shows the available LCP, INP, and CLS quality categories. Field data may be unavailable for low-traffic or new sites.

Google currently documents good Core Web Vitals targets as LCP within 2.5 seconds, INP below 200 milliseconds, and CLS below 0.1. Lighthouse lab values are diagnostics and should not be confused with real-user field data.

The PageSpeed API can be used without a key for occasional manual tests. An API key can optionally be supplied by defining `SEO_CLARITY_PAGESPEED_API_KEY` in `wp-config.php` or through the `seo_clarity_pagespeed_api_key` filter.

= Internal-link and site-structure analysis =

The full audit builds a conservative link graph from:

* Links stored in analyzed post and page content.
* Links visible in the rendered homepage.
* Classic WordPress navigation menus.
* WordPress block navigation, including Navigation Page List blocks where detectable.

SEO Clarity then highlights pages that appear unreachable, deep pages, pages with weak inbound support, and pages without contextual outgoing links. These findings are guidance rather than absolute search-engine rules because themes, archives, widgets, plugin output, and content outside the scan limit can create additional paths.

= Structured-data analysis =

Version 0.3.0 adds a dedicated structured-data overview and nine new audit checks. SEO Clarity can detect Schema.org markup in JSON-LD, Microdata, and RDFa. Detailed semantic validation focuses on JSON-LD because it can be parsed reliably without trying to rewrite theme or third-party plugin output.

The audit checks:

* JSON-LD syntax.
* Recognized Schema.org context.
* Conflicting definitions that reuse the same `@id` on one page.
* Organization or organization-related markup on the homepage.
* Homepage WebSite JSON-LD for Google site-name guidance, including `name` and `url`.
* Useful Organization details such as name, URL, and logo, presented as recommendations rather than invented requirements.
* Required `name` and `address` data when recognized LocalBusiness markup is present.
* Core BreadcrumbList structure on sampled internal pages.
* Article, NewsArticle, and BlogPosting markup on sampled WordPress posts, including useful recommended article details.

Google does not guarantee a rich result even when structured data is valid. SEO Clarity therefore does not treat “more schema” as inherently better and does not automatically inject competing schema graphs.

A full audit renders a bounded, post-type-balanced sample of public content for structured-data analysis. The default is 20 internal content pages plus the homepage and can be adjusted with the `seo_clarity_structured_data_page_limit` filter. This is separate from the internal-link HTTP verification limit.

= Link-status verification =

To keep synchronous admin scans predictable, SEO Clarity does not request every known permalink. Current WordPress permalinks are resolved locally. Internal URLs that cannot be confirmed as exact current permalinks can be checked with the safe WordPress HTTP API, with a default limit of 30 candidates per full scan. The limit can be changed with the `seo_clarity_internal_http_check_limit` filter.

= Safety first =

Scanning never changes your site. Automatic or assisted changes are only made after an administrator explicitly presses a fix button.

SEO Clarity currently includes:

* A conservative one-click fix for the WordPress search-engine visibility setting.
* A targeted assisted fix that replaces a redirected internal anchor in stored post content with its verified current internal destination.
* Explicit per-field Content Assistant actions that save a reviewed SEO title or meta description into exactly one active supported metadata provider (Yoast SEO, Rank Math SEO, or SEOPress).

Before updating a redirected link, SEO Clarity verifies the redirect again. WordPress content updates use the normal WordPress update path, so standard revision behavior remains available when revisions are enabled.

Risky changes such as HTTPS migration, permalink changes, server redirects, canonical changes, or plugin deactivation are explained but not applied automatically.

= External services are optional =

The normal SEO Clarity audit does not send audit data to an external SEO service. To inspect public output, it can request URLs from the same WordPress site using the WordPress HTTP API.

Version 0.5.0 provides three optional external integrations, each initiated by an administrator:

* Google Search Console: OAuth authorization sends the administrator to Google. Refreshing Search Console data sends the selected Search Console property and read-only API requests to Google. The homepage URL is sent only when the administrator explicitly requests URL Inspection. Service documentation: https://developers.google.com/webmaster-tools/ . Google API Services User Data Policy: https://developers.google.com/terms/api-services-user-data-policy . Google Privacy Policy: https://policies.google.com/privacy .
* Bing Webmaster Tools: refreshing Bing data sends the configured API key and selected verified site URL to Microsoft’s Bing Webmaster API. Service documentation and access terms: https://learn.microsoft.com/en-us/bingwebmaster/ and https://learn.microsoft.com/en-us/bingwebmaster/getting-access . Microsoft Privacy Statement: https://privacy.microsoft.com/privacystatement .
* Google PageSpeed Insights: pressing a PageSpeed test button sends the public homepage URL and selected mobile/desktop strategy to Google’s PageSpeed Insights API. Documentation: https://developers.google.com/speed/docs/insights/v5/get-started . Google Privacy Policy: https://policies.google.com/privacy .

None of these services receives the full SEO Clarity audit report. Search Console and Bing credentials/tokens and compact result snapshots are stored in the WordPress options table so the integration can work across admin sessions.

== Installation ==

1. Upload the `seo-clarity` folder to `/wp-content/plugins/` or install the ZIP from Plugins → Add Plugin → Upload Plugin.
2. Activate SEO Clarity.
3. Open SEO Clarity in the WordPress admin menu.
4. Run a quick audit first.
5. Run a full audit for content, link, site-structure, structured-data, and extended performance analysis.
6. Optionally configure Google Search Console and/or Bing Webmaster Tools in the Search visibility panel.

== Frequently Asked Questions ==

= Does SEO Clarity change my site during a scan? =

No. A scan is read-only. Any supported automatic or assisted fix requires an explicit administrator action protected by WordPress capability and nonce checks.

= Does SEO Clarity replace Yoast SEO, Rank Math, SEOPress, or another SEO plugin? =

No. SEO Clarity focuses on understandable auditing, prioritization, and guidance. It can coexist with one primary SEO metadata plugin and warns when several full SEO suites are active at the same time.

= Is every warning a Google ranking factor? =

No. SEO Clarity deliberately distinguishes critical technical problems from heuristics and usability improvements. Click depth, title length, word count, inbound-link counts, and similar signals are presented as review hints, not strict ranking rules.

= Why can a full audit be limited? =

SEO Clarity limits the number of content items inspected in one request to protect WordPress installations from long-running admin requests. The default full-scan content limit is 250 items and can be adjusted with the `seo_clarity_scan_content_limit` filter.

Network verification is separately limited to 30 uncertain internal URL candidates by default and can be adjusted with `seo_clarity_internal_http_check_limit`.

Structured-data rendering is separately sampled. SEO Clarity checks up to 20 internal content pages plus the homepage by default. Change this with `seo_clarity_structured_data_page_limit`. Very large rendered pages can also be excluded from detailed schema parsing by a safety size limit.

Performance asset-cache verification samples up to 6 same-site CSS/JavaScript resources during a full audit by default. Change this with `seo_clarity_performance_asset_limit`. Media Library performance analysis samples up to 200 image attachments by default and can be adjusted with `seo_clarity_performance_media_limit`. The large-image review threshold defaults to 1.5 MB and can be changed with `seo_clarity_large_image_bytes`.

= Why does the site-structure map say a page is unreached even though I can navigate to it? =

The graph is intentionally conservative. Dynamic theme widgets, archive pages, plugin-generated output, and content outside the scan limit may contain additional links that SEO Clarity cannot reconstruct from the available WordPress data. Treat an unreached result as a review signal, not automatic proof that the page is completely orphaned.

= Does the Content Assistant use AI? =

No. Version 0.6.0 generates its title and description drafts locally and deterministically from the WordPress title, headings, excerpt, site name, and stored page text. It does not send content to an AI service. The people-first questions are intentionally left for human review because software cannot reliably score originality, expertise, trustworthiness, or whether a visitor's need is fully satisfied.

= Why can SEO Clarity save metadata on some sites but not others? =

SEO Clarity does not output its own competing SEO title or meta-description layer. It only offers save buttons when exactly one supported writable provider is active: Yoast SEO, Rank Math SEO, or SEOPress. If none is active, suggestions remain read-only guidance. If more than one supported SEO suite is active, writing is disabled until the plugin conflict is resolved.

= Does SEO Clarity send my content to third parties? =

The normal quick/full audit does not send the audit report or stored page content to Google, Bing, the plugin author, or an external AI/SEO service. Internal link-status verification and performance asset sampling request only public URLs from the same site.

External calls happen only after an administrator explicitly uses an integration action. Search Console refreshes send API requests for the selected property; Bing refreshes send API requests for the selected site; URL Inspection sends the public homepage URL; PageSpeed Insights sends the public homepage URL and selected strategy. See “External services are optional” for service-specific details.

== Privacy ==

SEO Clarity stores the latest audit and up to five compact audit-history entries in the WordPress options table. It does not transmit audit results to the plugin author or to an external SEO service.

The scanner may make HTTP requests to the same site's public homepage, robots.txt, same-host sitemap URLs, a limited set of internal link targets, and a bounded sample of public content pages for structured-data analysis so it can inspect the output that visitors and crawlers receive. It does not automatically request sitemap URLs on third-party hosts.

When explicitly configured, SEO Clarity also stores Google OAuth client settings, Google OAuth access/refresh tokens, the selected Search Console property, compact Search Console snapshots, optional homepage URL Inspection data, a Bing Webmaster API key, selected Bing site, and compact Bing snapshots. These values are deleted by the plugin uninstall routine. Google OAuth authorization state is stored only as a short-lived WordPress transient.

The plugin never sends those credentials or snapshots to the plugin author. Credentials are sent only to their respective provider as required to authenticate the administrator-requested API calls.

== Changelog ==

= 0.6.8 =
* Step-by-step remediation guides are collapsed by default so audit findings remain easier to scan.
* Search visibility is collapsed by default and can be expanded from its panel heading.
* Performance is collapsed by default and can be expanded from its panel heading.
* Direct links to Search visibility or Performance automatically open the targeted panel.
* Search Console, Bing, and PageSpeed action redirects return to the relevant panel and reopen it automatically.
* Added keyboard-focus styling and native details/summary disclosure behavior for the new collapsible areas.
* Retained all 71 SEO checks, WordPress 7.1 target, German translation, live audit progress, detailed findings, and Plugin Check fixes.

= 0.6.7 =
* Added a context-aware “Step by step” remediation section to actionable warnings and informational checks.
* Added direct WordPress admin actions such as Edit homepage, Open Media Library, Search SEO plugins, Reading/Permalink/General settings, Content Assistant, Search visibility, and Performance.
* Homepage meta-description guidance now explains that WordPress core has no per-page meta-description field, detects the active supported SEO provider, gives provider-specific instructions for Yoast SEO, Rank Math SEO, and SEOPress, and offers a one-click copy action for the local draft.
* Heading guidance explains how to locate the exact affected heading and change the semantic H1–H6/HTML tag rather than using heading levels as visual font sizes.
* Image guidance links concrete Media Library items when SEO Clarity can resolve the image URL back to a WordPress attachment and explains how WordPress normally generates responsive markup.
* Optional Search Console, Bing, structured-data, and SEO-plugin information now explicitly says when no action is required and provides exact setup paths when the user chooses to proceed.
* Added clipboard buttons with a no-Clipboard-API fallback for prepared title/meta-description drafts.
* Retained all 71 SEO checks, WordPress 7.1 target, German translation, live audit progress, and previous Plugin Check fixes.

= 0.6.6 =
* Updated the WordPress.org Tested up to declaration to WordPress 7.1.
* Sanitizes live-audit scan identifiers with WordPress core sanitization before applying the plugin-specific identifier restriction.
* Resolves the three remaining Plugin Check InputNotSanitized warnings for scan_id while retaining the existing nonce and capability checks.
* Retained all 71 SEO checks, German translation, live audit progress, classic fallback mode, and previous Plugin Check fixes.

= 0.6.5 =
* Reworked the asynchronous scan start to use a dedicated nonce-protected WordPress AJAX action instead of relying on an admin-post JSON response.
* Uses the current wp-admin origin for live AJAX requests, avoiding problems caused by mismatched configured admin/site host names or schemes.
* Added robust response handling that accepts the normal JSON result or an explicit completion response header.
* Added concrete error details for HTTP failures, unexpected WordPress responses, and server-side exceptions when available to the administrator.
* Added a one-click “Run audit without live progress” fallback that uses the proven classic POST workflow without requiring JavaScript progress polling.
* Replaced the unhelpful reload-only failure action with fallback and close actions.
* Kept the actual check-based progress indicator, 71 SEO checks, German translation, and all previous Plugin Check fixes.

= 0.6.4 =
* Added a live progress dialog for quick and full audits so administrators receive immediate feedback while a scan is running.
* Progress is based on the actual number of completed SEO Clarity checks rather than a simulated percentage.
* Added current check number, percentage, elapsed time, and the title of the most recently completed check.
* Added an indeterminate waiting state until the first server-side progress update becomes available.
* Runs scan submissions asynchronously in modern browsers while preserving the existing normal POST submission as a no-JavaScript fallback.
* Added a short-lived, nonce-protected AJAX progress endpoint; audit results and scan behavior remain unchanged.
* Warns before accidentally leaving the page while an asynchronous audit is running.
* Retained all 71 SEO checks, German translation, detailed findings, Content Assistant, and previous Plugin Check fixes.

= 0.6.3 =
* Added concrete finding lists to key warning and information checks so users can see the exact heading pairs, image URLs, current settings, sitemap locations, plugin names, and search-integration targets involved.
* Homepage heading-hierarchy checks now show the actual preceding and following heading text plus the skipped heading level(s), and the technical outline lists every rendered heading in order.
* Responsive-image checks now list each sizeable image that is missing `srcset`, including its URL/alt-derived label and dimensions when available.
* Homepage meta-description checks now create a local example draft from rendered homepage content when enough text is available; the draft is guidance only and is never saved automatically.
* Added visible example blocks for viewport, canonical, compression, WebSite/Organization structured data, and selected other checks where a concrete example helps non-technical users.
* Reworded the generic affected-items section as “Concrete findings” and added context-specific labels such as current metadata, checked page, expected site values, inspection target, and connected search property.
* Expanded Google Search Console and Bing information checks with the exact WordPress homepage/property/site being matched or inspected.
* Retained all 71 SEO checks, German translation support, Content Assistant functionality, and 0.6.1 Plugin Check fixes.

= 0.6.2 =
* Added a complete bundled German (`de_DE`) translation for the administration UI, checks, explanations, recommendations, Content Assistant, performance, and search-visibility panels.
* Added compiled `seo-clarity-de_DE.mo` and maintainable `seo-clarity-de_DE.po` language files with German plural rules.
* Added a German translation for the plugin description shown by WordPress when the bundled catalog is used.
* Kept English as the source language and retained all 71 SEO checks and 0.6.1 Plugin Check fixes.

= 0.6.1 =
* Addressed WordPress Plugin Check findings from the 0.6.0 review.
* Added translator comments for all localized strings that contain placeholders.
* Made nonce verification explicit inside each state-changing admin request handler so automated security analysis can follow it directly.
* Documented the nonce-free Google OAuth callback reads, which are protected by a single-use OAuth state token.
* Switched the Google OAuth redirect to `wp_safe_redirect()` and explicitly allowlisted the Google Accounts host for that redirect.
* Removed the now-discouraged manual `load_plugin_textdomain()` call; WordPress.org language packs are loaded on demand by WordPress.
* Added the `Tested up to` readme header.
* Retained all 0.6.0 Content Assistant and previous audit functionality.

= 0.6.0 =
* Added a local deterministic Content Assistant to full audits; no external AI or writing service is used.
* Added editable SEO-title and meta-description drafts based on WordPress titles, headings, excerpts, visible stored text, and site identity.
* Added an illustrative search-result preview with clear warning that search engines can rewrite title links and snippets.
* Added a people-first manual review checklist for usefulness, originality, expertise, freshness, and completeness that the plugin deliberately does not score.
* Added five content checks for obvious title clarity problems, title display-review heuristics, meta-description display-review heuristics, long content without subheadings, and substantially repeated page openings.
* Added frequent topic signals as orientation aids without treating keyword density as an SEO score.
* Added limited expansion of common Yoast SEO, Rank Math SEO, and SEOPress template variables for local previews.
* Added explicit per-field assisted saving of reviewed SEO titles and meta descriptions into exactly one active supported metadata provider.
* Added stale-state fingerprint verification before metadata writes and disabled writing when provider selection is ambiguous.
* Added `seo_clarity_content_assistant_limit` to bound the number of item summaries retained in an audit.
* Retained all 0.5.0 Search Console, Bing, performance, structured-data, link, content, metadata, and technical functionality.

= 0.5.0 =
* Added a dedicated Search visibility panel that keeps external search-engine data separate from local audit findings.
* Added optional Google Search Console OAuth 2.0 integration using administrator-supplied OAuth Web application credentials and read-only scope.
* Added safe OAuth state validation, access-token refresh, connection/disconnection, and property selection.
* Added Google Search Analytics snapshots with a 28-day period, preceding-period comparison, top queries, and top pages.
* Added Search Console sitemap retrieval and local-vs-submitted sitemap comparison.
* Added explicit administrator-triggered Google URL Inspection for the public homepage.
* Added optional Bing Webmaster Tools API-key integration with verified-site matching using the JSON/HTTP API rather than retiring SOAP/POX protocols.
* Added Bing traffic, top-query, top-page, crawl-statistics, and top-level feed/sitemap snapshots.
* Added plain-language step-by-step connection guidance for both Google and Bing.
* Added partial-report error handling so a working provider connection is not mistaken for a complete data refresh when an individual API report fails.
* Added six snapshot-based audit checks for Google/Bing connection, sitemap, homepage index, and crawl health.
* Ensured normal quick/full audits never initiate Google Search Console or Bing Webmaster API calls.
* Added wp-config.php constant support for Google OAuth credentials and Bing API keys.
* Expanded uninstall cleanup and external-service/privacy documentation.
* Fixed the missing AbstractCheck namespace import in the WebSite structured-data check, detected by the new runtime registry release test.
* Retained all 0.4.0 performance, structured-data, link, content, metadata, and technical checks.

= 0.4.0 =
* Added a dedicated Performance overview to the audit dashboard.
* Added eight local performance checks while clearly separating heuristics from measured Core Web Vitals.
* Added homepage HTML-size diagnostics.
* Added observed HTML compression checks.
* Added homepage image width/height checks to flag possible layout-stability risks.
* Added conservative lazy-loading and priority-hint guidance for homepage images.
* Added responsive `srcset` coverage checks for sizeable raster-image candidates.
* Added third-party script and stylesheet origin diagnostics.
* Added bounded same-site cache-header verification for local CSS and JavaScript during full audits.
* Added bounded Media Library analysis for unusually large original image files.
* Added explicit administrator-triggered Google PageSpeed Insights measurements for mobile and desktop.
* Added Lighthouse performance score and lab metrics to the Performance panel.
* Added available PageSpeed/CrUX real-user LCP, INP, and CLS quality categories when returned by the API.
* Added optional PageSpeed API-key support through a constant or filter.
* Updated privacy documentation so the external PageSpeed request is transparent and opt-in.
* Retained all 0.3.0 structured-data, link, content, metadata, and technical checks.

= 0.3.0 =
* Added a dedicated structured-data overview to the audit dashboard.
* Added detection of JSON-LD, Microdata, and RDFa Schema.org markup.
* Added detailed JSON-LD parsing with support for arrays and `@graph`.
* Added JSON-LD syntax validation across a bounded rendered-page sample.
* Added Schema.org `@context` validation.
* Added detection of conflicting same-page JSON-LD `@id` definitions.
* Added Organization and organization-subtype detection on the homepage.
* Added WebSite/site-name guidance for homepage JSON-LD, including `name`, `url`, and competing WebSite-node checks.
* Added Organization completeness guidance without treating recommended properties as mandatory.
* Added LocalBusiness validation for Google-required `name` and `address` information.
* Added BreadcrumbList structure validation on sampled internal pages.
* Added Article, NewsArticle, and BlogPosting guidance on sampled WordPress posts.
* Added post-type-balanced structured-data sampling with a default limit of 20 internal content pages plus the homepage.
* Added safety handling for unusually large rendered pages.
* Retained all 0.2.0 technical, content, link, and site-structure checks.

= 0.2.0 =
* Added a reusable internal-link graph for full audits.
* Added a site-structure overview with inbound links, outbound links, navigation presence, and estimated click depth.
* Improved orphan-page analysis using homepage, content, classic menu, and block-navigation links.
* Added page click-depth guidance.
* Added low-inbound-link guidance for pages outside navigation.
* Added contextual outbound-link guidance.
* Added limited HTTP verification for uncertain internal link targets using `wp_safe_remote_get()`.
* Added detection of internal links that return HTTP errors.
* Added detection of redirected internal links.
* Added an administrator-confirmed assisted fix that updates redirected links stored in post content after re-verification.
* Improved generic link-text findings with source and destination details.
* Added block-navigation awareness, including Navigation Page List detection.
* Improved relative URL resolution for link analysis.
* Retained all 0.1.0 technical, content, image, metadata, and indexing checks.

= 0.1.0 =
* Initial release.
* Modular audit engine with 38 checks.
* Quick and full audit modes.
* Plain-language explanations and prioritized findings.
* Rendered homepage checks for availability, title, description, headings, viewport, canonical, noindex, language, structured data, and mixed content.
* Site checks for HTTPS, robots.txt, sitemap, permalink configuration, and SEO plugin conflicts.
* Full content checks for duplicate titles, empty or very short content, image alt attributes, internal links, slugs, stored descriptions, noindex settings, and heading hierarchy.
* Detection of Yoast SEO, Rank Math SEO, All in One SEO, SEOPress, The SEO Framework, and Slim SEO.
* Read-only scanning and a conservative administrator-confirmed indexing fix.
* Audit history with the five most recent runs.
