Skip to content

Validate Live Schema on Published Pages

Published-page validation compares the actual JSON-LD output on your live page to the schema graph that SEOvault AI expects to emit. This helps you detect conflicts with other plugins, caching issues, or unexpected markup that may affect your structured data.

Open any published post or page in the WordPress editor. In the Schema Health panel, click Check published page. The validation runs as an AJAX request and shows the comparison result in the panel.

The validation process:

  1. Check eligibility – the post must be published, publicly accessible, and not password-protected
  2. Build expected graph – SEOvault builds the schema graph that should be emitted for this post
  3. Fetch live page – the plugin fetches the published page HTML using a same-site request
  4. Extract JSON-LD – all <script type="application/ld+json"> blocks are extracted from the HTML
  5. Compare graphs – the expected graph is compared to the observed graph
  6. Report results – differences, missing entities, extra entities, and FAQ conflicts are reported

Published-page validation is only available when:

  • The post status is publish
  • The post is not password-protected
  • The post type is public and viewable
  • A safe same-site URL can be resolved for the post
  • The feature is enabled in Schema Validation settings

Drafts, scheduled posts, private posts, and password-protected posts cannot be validated because they are not publicly accessible.

The validation reports one of the following states:

  • Healthy (✓) – The live page schema matches SEOvault’s expected output
  • Action required (×) – The live output differs from the expected output
  • Available after publishing (—) – The post is not yet published or publicly accessible
  • Check unavailable (!) – The page could not be fetched (network error, timeout, or policy violation)

When the live output differs, the comparison shows:

  • Expected only – entities that SEOvault expected but were not found on the page
  • Observed only – extra entities found on the page that were not expected
  • Changed – entities that exist in both but have different content
  • FAQ conflicts – duplicate FAQPage entities from third-party markup

The validator specifically checks for FAQPage duplication:

  • If another FAQPage is found on the page (from custom JSON or a third-party plugin), a conflict is reported
  • Duplicate FAQPages can confuse search engines and may prevent rich results
  • The conflict report shows the expected count, observed count, and extra FAQ entities

To prevent abuse and reduce server load:

  • Rate limit – you can only check the published page once every 30 seconds per user per post
  • Fetch cache – the HTML fetch is cached for 60 seconds
  • Result cache – the comparison result is cached for 1 hour (invalidated when the expected graph changes)

Clicking “Check published page” again before the rate limit expires shows a message to wait.

The page fetcher uses strict same-site controls to prevent SSRF (Server-Side Request Forgery):

  • Only URLs on the same domain as the WordPress installation are allowed
  • Redirects are followed manually (up to 3) and each redirect is re-validated
  • SSL verification is enforced
  • No cookies or authentication are sent
  • Response size is limited to 2 MB
  • Request timeout is 6 seconds

The fetcher uses a custom User-Agent: SEOvaultAI-SchemaHealth/1.0.

  1. Publish the post or page.
  2. Open the post in the editor.
  3. In the Schema Health panel, click Check published page.
  4. Wait for the validation to complete (up to 6 seconds).
  5. Review the result:
    • Healthy – no action needed
    • Action required – review the difference details
  6. If differences are found:
    • Check for caching plugins that may be serving old content
    • Look for other plugins or theme code that outputs schema
    • Review custom JSON-LD for conflicts
    • Clear page cache and re-check
  7. Click Check published page again after making changes (respect the 30-second rate limit).
  • Cause: Caching plugin serving old content, or schema output disabled
  • Solution: Clear page cache, verify schema is enabled in SEOvault settings
  • Cause: Another plugin or theme outputting schema
  • Solution: Identify the source (theme, plugin, or custom code) and disable or adjust it
  • Cause: Another FAQPage on the page from third-party markup
  • Solution: Remove the duplicate FAQ block or custom JSON, or consolidate into one source
  • Cause: Network timeout, SSL error, or policy violation
  • Solution: Check server connectivity, verify SSL certificate, ensure the URL is on the same domain
  • Cause: Checking too frequently
  • Solution: Wait 30 seconds before checking again
  • Manual only: Published-page validation is never invoked automatically. It only runs when you click the button.
  • Not a guarantee: Passing live validation does not guarantee a Google rich result. Use Google’s Rich Results Test for final verification.
  • Same-site only: The validator cannot check pages on different domains or external URLs.
  • HTTP vs HTTPS: The validator follows the protocol used by the site. If the site uses HTTPS, SSL verification is enforced.
  • Redirects: Up to 3 redirects are followed. If a redirect leads to a different domain, the check fails.
  • Content-Type: Only HTML responses are accepted. If the server returns JSON or another content type, the check fails.
  • Large pages: Pages larger than 2 MB are rejected to prevent memory issues.