Schema Validator
Enter a page URL and we open every JSON-LD block on it, check each node against what Google expects, and tell you which rich result you are losing.
One request reaches the target site; all the checking happens here. Nested nodes are opened too: the Offer inside a Product is checked against its own rules.
Enter a URL and we will open every JSON-LD block on the page and check it against what Google expects.
What is the Schema Validator?
This tool fetches the page you enter, opens every JSON-LD block inside it and checks each node against the fields Google documents. It separates three things: a missing required field means the rich result never shows, a field whose value is invalid means the same, and a missing recommended field means the result shows but stays weaker. It also walks into nested nodes, so the Offer inside a Product is checked against its own required fields. That is exactly where most tools stop short: the product name and image are fine, but the currency inside the offer is missing and the product snippet never appears.

How to use it
- 1Enter the full address of the page whose structured data you want to check.
- 2Read the summary at the top: which rich results are ready and which you are losing.
- 3Start with the red list; each row shows the exact path and the raw value.
- 4Leave the amber list for later; those do not block any rich result.
How to read the results
When to use it
When The Product Snippet Will Not Show
If price and rating never appear, the cause is usually not the Product but the Offer inside it. A missing currency blocks the snippet entirely.
After A Plugin Update
SEO plugins change their markup output between versions. After an update, check the two or three templates that earn the most traffic.
While Building A Template
Check one page before a new product or article template goes live, and catch the mistake before it multiplies across a thousand pages.
Common mistakes
Relative Image URLs
Putting /image.jpg in the image field is the single most common error. Google expects an absolute URL, and a relative one counts the same as no field at all.
Dates Written For People
Writing "15 September 2026" in datePublished invalidates the field. A machine reads it, so ISO 8601 is mandatory.
Declaring The Same Type Twice
If the theme emits one Product and a plugin emits another, Google cannot tell which to use. Reduce it to a single source.
Frequently asked questions
How is this different from Google's own test?
Google's Rich Results Test tells you about validity but does not make the required-versus-recommended split this plain, nor name the rich result a gap costs you. This tool also walks nested nodes, checks value formats and lets you copy each raw block. Use both: fix things here, then run Google's test as the final check.
I added FAQ markup, so why is no rich result promised?
Because we will not promise something that no longer exists. Google all but removed the FAQ rich result in 2023; it now appears only on a limited set of authoritative government and health sites. The HowTo rich result was retired outright. Your markup may be valid and still helps describe the content, but expect no visual gain in search.
It says my article headline is missing but not required. Why?
Google defines no required fields for the Article type; headline, image, datePublished and author are recommended. Leaving them out weakens the result rather than blocking it. Reporting required and recommended at the same severity sends you to the wrong place, so we keep them apart.
My blocks reference each other with @id. Is that a problem?
No. Plugins like Yoast and RankMath link nodes inside @graph with @id, and that is the correct modern pattern. The tool leaves reference-only nodes out of validation; otherwise it would invent a list of missing fields for every reference.
It says no JSON-LD but my page has markup?
You are probably using microdata or RDFa, which the tool counts and reports separately. Google reads all three, so nothing is broken. JSON-LD is easier to maintain because it lives in one block. One other possibility: if you inject the markup with JavaScript the tool cannot see it, because it reads the HTML the server sends.