Schema / JSON-LD Validator

Paste your JSON-LD, with or without the script wrapper, and get an instant lint: syntax errors with line and column, JSON-LD basics, per-type required and recommended properties, and common mistakes like non-ISO dates.

The prefilled example has two deliberate problems so you can see the validator work.

What this validator checks

Four stages, in order. First, JSON syntax: if the parse fails you get the error message plus the line and column it happened at, with an excerpt of the surrounding code. Second, JSON-LD basics: @context present and pointing at schema.org, @type present, with @graph arrays handled by validating each node. Third, per-type rules: required and recommended properties for Article, Product, FAQPage, LocalBusiness, Event, Recipe, VideoObject, Organization, BreadcrumbList, and HowTo. Fourth, common mistakes: dates that are not ISO 8601, rating values outside 1 to 5, and url or image fields that do not start with http.

Validity is not eligibility

A clean pass here means your markup is structurally sound and complete for its type. It does not guarantee a rich result: Google decides eligibility separately, per type and per site. Lint here while you draft, then confirm eligibility with Google's Rich Results Test before you ship.

Frequently asked questions

How is this different from Google's Rich Results Test?

Google's tool tests rich-result eligibility server-side against Google's own feature list, and it needs a live URL or a full fetch round trip. This is an instant local lint you can run while you draft: it catches syntax errors, missing required properties, and common mistakes before you ever deploy. Use both: this one while writing, Google's before shipping.

My JSON is valid here but the Rich Results Test shows nothing. Why?

Validity and eligibility are different things. Your markup can be perfectly valid schema.org JSON-LD for a type that simply has no SERP feature attached, for example HowTo since its 2023 deprecation, or FAQPage on a non-government site. The Rich Results Test only reports types that can produce a rich result.

What does @graph do?

It lets you put multiple connected nodes in one JSON-LD block: an Organization, a WebSite, a WebPage, and an Article, each with its own @id, referencing each other by those ids. This validator detects @graph and validates every node inside it individually.

Why do dates have to be ISO 8601?

Because the schema.org spec requires it and parsers reject ambiguity. 03/04/2026 is March 4 in one country and April 3 in another; 2026-03-04 is exactly one date everywhere. Use YYYY-MM-DD, optionally with a time and timezone offset.