JSON-LD Schema Validator

Paste structured data or a whole page and get syntax errors, missing properties and rich-result eligibility per type — without sending your markup anywhere.

Paste the JSON on its own, or paste an entire page and every structured-data block in it is pulled out and checked separately. Arrays and @graph are handled.
An error means the rich result will not appear. A warning means it may, but weaker or less often.

Nothing you type here is uploaded, stored or sent anywhere. It all runs in your browser.

Valid markup and an eligible page are two different things

This tool checks structure: is the JSON parseable, is there a @type, are the properties Google documents as required actually present. Passing that is necessary and it is not sufficient. Google also checks that the markup matches the page. A price in your Offer that is not on the page, a rating nobody left, a review you wrote about yourself, an Event that does not exist — all of those validate perfectly and all of them are grounds for a manual action against structured data. No structural validator can see any of it, including this one.

The rule is simple and worth taking seriously: mark up what is on the page, for a human to see, and nothing else.

Rich results Google has retired

Markup does not stop being useful when a rich result goes away — it still tells machines what the page is, which increasingly matters for things other than the ten blue links. But you should know what you are getting.

  • HowTo, retired 2023. The rich result is gone from Search entirely. The markup is still valid.
  • Sitelinks search box, retired November 2024. WebSite markup is still worth having for the site-name feature. The search box in the result is not coming back.
  • FAQ, restricted 2023. FAQ rich results now appear only for well-known authoritative government and health sites. On a normal commercial site the markup is valid and will not show.

What still reliably earns a rich result: Product with offers and reviews, Recipe, Event, JobPosting, VideoObject, Breadcrumb, and the article and organisation markup that feeds the knowledge panel.

The mistakes that actually stop a rich result

  • A nested object with no @type. An offers value that is just {"price": "19.99"} is an untyped blob. Google does not infer the type from the property name. Every nested object needs its own @type.
  • A relative URL. image, url, logo and sameAs all need absolute URLs with the protocol. A relative one is silently dropped.
  • A date that is not ISO 8601. 14/08/2026 is not a date to a machine. 2026-08-14 is.
  • An empty string. "author": "" is worse than omitting author, because it declares the field and fills it with nothing.
  • HTML inside a name. Tags in headline or name render literally in the result. Descriptions and FAQ answers tolerate limited HTML; names do not.

Where to put it

JSON-LD in a <script type="application/ld+json"> tag is Google's stated preference, and it can go in the head or the body — both work. Microdata and RDFa still work too, but you cannot describe the same entity in two formats and expect a sensible result. Pick one, and if you have a plugin adding JSON-LD, check it is not duplicating something your theme already outputs. Two Organization blocks disagreeing about your logo is a real thing that happens.

Questions people ask

Will valid structured data improve my rankings?

Not directly. Google has been consistent that structured data is not a ranking factor. What it does is make you eligible for result types that take up more space and get clicked more — stars, prices, images, breadcrumbs. The click-through improvement is real and it is not the same thing as a ranking improvement.

Why does Google's Rich Results Test disagree with this?

Two likely reasons. Google's test fetches and renders the live URL, so it sees structured data injected by JavaScript that is not in the source you pasted here. And it tests eligibility for specific rich result types on the live page, where this checks the structure of what you give it. Where the two disagree about a required property, trust Google — and tell us, because it means the documented requirements have moved.

Can I put several types in one block?

Yes, in two ways. An array of objects at the top level is the simplest. @graph is better when the entities reference each other, because each node can have an @id that the others point at — which is how you avoid describing your organisation five times on one page. This tool checks each node separately either way.

Do I need Organization markup on every page?

No, and it is better not to. Put the full Organization block on one page — usually the homepage or an about page — give it an @id, and reference that @id from anywhere else that needs it. Repeating the whole thing site-wide gives Google many slightly different copies to reconcile.

Is it safe to mark up ratings from another site?

No. Google requires that review and rating markup describes reviews collected by you and shown on that page. Aggregating ratings from third-party sites into your own AggregateRating is a documented violation and one of the more common causes of a structured-data manual action.

Is what I paste sent anywhere?

No. The parsing and the checking both run in your browser. Nothing is uploaded, which is the point — Google's own tester necessarily sends your URL to Google, and sometimes you want to check markup on a page that is not live yet.

Structured data describes the page, it does not promote it

Schema helps Google understand what you published. Whether it ranks is still decided by who links to it.

Book a Call More free tools