§
§ · free tool

Structured data validator. In-browser. No upload.

Paste JSON-LD (or paste a URL with structured data inline). The tool parses the JSON, walks every node, and runs structural validation against schema.org type rules and Google's required-field documentation — all in your browser. No JSON ever leaves the device.

Paste JSON-LD; the tool parses it, walks every node (including @graph arrays and nested entities), runs ~30 structural checks per type, and surfaces pass/warn/fail per check. Validation runs entirely in your browser — your JSON never leaves the device.

Try:
summary
Paste JSON-LD and click Validate.
Sources used by this validator

The validator runs entirely in JavaScript on your device. No JSON is sent to any external service; the source links above open in a new tab as reference documentation only.

Privacy: validation runs in-browser only. Your JSON never leaves the device.

§ 02 · what gets checked

Three levels. Eight types. Thirty-ish rules.

Level 1 — Syntax. The pasted JSON must parse. We try a direct parse first; if that fails, we extract <script type="application/ld+json"> blocks from the input and parse each separately. Multiple script tags on a page are independent JSON-LD instances; each gets its own validation card.

Level 2 — Universal. Every node must declare @context referencing schema.org and @type identifying the entity. @graph arrays get walked: a single script with three top-level types (Organization + Article + BreadcrumbList) produces three independent nodes, each validated in turn.

Level 3 — Per-type rules. Eight types have specific rule sets. Article / BlogPosting / NewsArticle requires headline (≤110 chars warned), author with name, ISO-8601 datePublished, image (URL or array), publisher with name and logo URL. Product requires name, description (recommended), image, offers.price + offers.priceCurrency (ISO-4217), and aggregateRating in 0-5 range when present. FAQPage requires mainEntity with at least two Question entries each having name + acceptedAnswer.text. LocalBusiness / Restaurant / Store require name, image, complete address (streetAddress + locality + postalCode + ISO-3166 country), and recommended priceRange + geo. Event requires name + ISO-8601 startDate + image, recommended eventStatus and eventAttendanceMode as schema.org URLs. BreadcrumbList requires at least two ListItem with sequential positions and valid item URLs. Organization requires name, recommended url + logo, optional sameAs as array of URLs.

The rule set covers ~95% of what Google's Rich Results Test inspects. Unknown types pass with a warn-level "no specific rules registered" message — the JSON itself can still be valid even if we don't have specific rules for it. Some Google rich-result types also have visibility requirements (FAQ requires the same Q+A in visible HTML, breadcrumbs require the same hierarchy in visible UI) — those are content-side rules a static validator cannot check; they require the live URL.

§ 03 · when to use this

Three jobs this validator does.

Job 1: Pre-publish gate. Before pushing a new product page, blog post, or location page to production, paste its JSON-LD here. Required-field failures are loud and labeled. Fix them in the source template and re-validate. The whole loop runs in 2 seconds with no network call.

Job 2: CMS template debugging. When a templated page outputs broken JSON (a missing variable, a stray comma, an unescaped quote), this validator surfaces the parse error with a snippet of the offending region. Match the snippet against the template, fix the variable interpolation, ship.

Job 3: Migration regression check. Mid-replatform, you want to confirm the new platform emits the same JSON-LD shape as the old one. Paste before-and-after side-by-side; the validator's per-node verdict makes regressions obvious.

For sibling tools: Schema Markup Generator for building JSON-LD from a form; Meta Tag Generator for the HTML head; Lighthouse Score Checker for the live-page audit; Website Audit for the four-category scorecard.

§ 04 · questions

Six questions users ask.

What types does this validator support?

Eight types covering ~95% of practical use cases: Article, BlogPosting, Product, FAQPage, LocalBusiness, Event, BreadcrumbList, and Organization. The validator walks @graph arrays so a page that ships multiple types in one script tag (e.g., Article + BreadcrumbList + Organization) gets every node checked. Unknown types return a 'no rules registered' info message rather than failing — the JSON-LD itself can still be valid even if we don't have specific rules for it.

What does it actually check?

Per node: (1) JSON syntax must parse; (2) @context references schema.org; (3) @type is set; (4) per-type required fields are present (Article needs headline + author + datePublished + image + publisher; Product needs name + image + offers.price + offers.priceCurrency; etc.); (5) date fields are ISO-8601; (6) currency is ISO-4217; (7) country is ISO-3166; (8) URL fields contain valid URLs; (9) FAQPage has at least 2 Question entries with name + acceptedAnswer.text; (10) BreadcrumbList has at least 2 ListItem entries with sequential positions and valid URLs.

Why don't you redirect to Google's Rich Results Test?

Because we promised on every tool: the work runs in your browser, no JSON ever leaves the device. Validating against the publicly-documented rules (schema.org type definitions and Google's Search Central required-field lists) is what Google's tool does internally; doing it client-side gives the same answer without exfiltrating your unpublished JSON. After publishing the live URL, you can verify the rendered page directly at Google Rich Results Test by submitting just the URL — that flow does not require sending the raw JSON anywhere.

Can I paste a webpage URL instead of JSON?

No — fetching a remote URL from your browser would either require a CORS-enabled response (most websites don't allow it) or a server-side proxy (which would mean the URL passes through Digital Heroes servers, which we will not do). Open the page, view-source or DevTools, copy the JSON-LD script content, and paste here. The trade-off is real but the privacy posture is non-negotiable.

What if my JSON is wrapped in a script tag?

Paste it. The validator strips <script type="application/ld+json"> wrappers automatically. You can also paste a full <head> snippet — we extract any JSON-LD scripts inside and validate each one. Multiple script tags on a page are independent JSON-LD instances; each gets its own validation result.

Does this tool log my JSON?

No. Validation runs entirely in JavaScript on your device. Nothing is uploaded, no analytics beacon includes the JSON content. The 'recent validations' panel uses your browser's localStorage and stays on your device. No signup, no email gate.

§ 06 · need a real engagement

Schema strategy? 30-min call.

Per-template JSON-LD, knowledge-graph entity wiring, rich-result eligibility audits. A 30-minute call walks the priorities for your stack and a fixed-price quote.