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.
Where to find published-page validation
Section titled “Where to find published-page validation”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.
How live validation works
Section titled “How live validation works”The validation process:
- Check eligibility – the post must be published, publicly accessible, and not password-protected
- Build expected graph – SEOvault builds the schema graph that should be emitted for this post
- Fetch live page – the plugin fetches the published page HTML using a same-site request
- Extract JSON-LD – all
<script type="application/ld+json">blocks are extracted from the HTML - Compare graphs – the expected graph is compared to the observed graph
- Report results – differences, missing entities, extra entities, and FAQ conflicts are reported
Eligibility requirements
Section titled “Eligibility requirements”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.
Comparison results
Section titled “Comparison results”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)
Difference details
Section titled “Difference details”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
FAQ conflict detection
Section titled “FAQ conflict detection”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
Rate limiting and caching
Section titled “Rate limiting and caching”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.
Security and same-site policy
Section titled “Security and same-site policy”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.
Step-by-step: validate live schema
Section titled “Step-by-step: validate live schema”- Publish the post or page.
- Open the post in the editor.
- In the Schema Health panel, click Check published page.
- Wait for the validation to complete (up to 6 seconds).
- Review the result:
- Healthy – no action needed
- Action required – review the difference details
- 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
- Click Check published page again after making changes (respect the 30-second rate limit).
Common issues and solutions
Section titled “Common issues and solutions”Expected entities missing
Section titled “Expected entities missing”- Cause: Caching plugin serving old content, or schema output disabled
- Solution: Clear page cache, verify schema is enabled in SEOvault settings
Extra entities found
Section titled “Extra entities found”- Cause: Another plugin or theme outputting schema
- Solution: Identify the source (theme, plugin, or custom code) and disable or adjust it
FAQPage conflict
Section titled “FAQPage conflict”- Cause: Another FAQPage on the page from third-party markup
- Solution: Remove the duplicate FAQ block or custom JSON, or consolidate into one source
Check unavailable
Section titled “Check unavailable”- Cause: Network timeout, SSL error, or policy violation
- Solution: Check server connectivity, verify SSL certificate, ensure the URL is on the same domain
Rate limited
Section titled “Rate limited”- Cause: Checking too frequently
- Solution: Wait 30 seconds before checking again
Notes and edge cases
Section titled “Notes and edge cases”- 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.