Sitearc

Testing structured data: what validators miss

A four-step routine that goes past syntax, with a filled test of one page. The five mistakes a validator cannot catch.

Answers
Test markup against the rendered page, not only against a schema.
Included routine
A filled four-step test of one page
Written for
Developers shipping markup changes

Valid is the floor

A validator answers one question: does this parse as valid markup. It does not answer whether the markup describes the page.

Four steps, in order

1. render the page
   - does the block appear in the html the server returns
   - does it still appear with javascript disabled
2. parse it
   - does a validator accept the syntax
   - are the required properties for the type present
3. compare it to the page
   - every value in the markup is visible to a reader
   - nothing is claimed that the page does not show
4. count the entities
   - one organisation block, not three
   - one faq block, and only where questions are visible

A filled test

Brightwater Dental, the implants page, 2026-10-02.

step 1  block present in the raw html        yes
        block present with javascript off    yes

step 2  validator result                     valid
        type and required properties         MedicalWebPage, all present

step 3  values compared to the page
        name        "Dental implants"        visible as the h1
        areaServed  "14 miles of the practice"  visible in the footer
        priceRange  "from 1800"              NOT visible anywhere
        -> remove the price, or show it on the page

step 4  entity count in one page          1 organisation, 1 page, 0 faq

result     one finding, one fix, re-tested after the change

The mistakes a validator cannot catch

  1. A price in markup that the page shows as something else.
  2. Two blocks describing the same thing, from different components.
  3. A FAQ block on a page whose questions live in an image.
  4. A date in markup that the page never displays.
  5. An organisation name that appears nowhere on the site.

Acceptance: the test is complete when

  • the block is read from the built HTML, not the source file
  • every value is visible on the rendered page
  • the entity count is checked on the built page
  • findings are re-tested after the fix ships

Troubleshooting

Symptom Likely cause What to do
The source has one block, the page has two A component injects another Search the built HTML for the type
A value is invisible A template default Bind it to the page, or drop it
The validator disagrees with the page Policy, not syntax Read the policy, then the page
No rich result appears The page does not qualify Check the type before the markup
The same finding returns monthly Nothing re-tests after a ship Add the step to the release check

Limits

Passing these steps does not earn a rich result.

Search engines decide appearance. The only honest claim about markup is that it describes the page accurately.

Where this came from