Skip to content
SocialTools

JSON-LD Schema Validator

Paste JSON-LD to check required fields and basic structure before you deploy it. This is a field check, not Google’s rich-result test.

SEO ToolsSEOReviewed 2026-09-11 by SocialTools editorial. How we test

Fetches the page HTML server-side and extracts all application/ld+json blocks.

Validates JSON syntax, @context, @type, and common required fields. URL fetching reads public pages only. For Google rich result eligibility, also test with Google Rich Results Test.

Pasted markup is checked in your browser. URL mode fetches that page through our server.

Overview

Structured data fails quietly. A trailing comma, a missing @type, or a required property left out does not break the page - it just means the rich result never appears and nobody tells you why. This validator makes those failures visible before deployment.

It works two ways. Paste a JSON-LD block or a full script tag and it parses and checks it instantly in the browser. Or give it a URL, and the server fetches the page HTML, extracts every application/ld+json block on it, and validates each one separately with its own error and warning counts.

The URL mode is the one that catches real-world problems, because it validates what is actually being served rather than what you think you wrote. Themes, plugins, and consent scripts all inject their own JSON-LD, and a page frequently carries three or four blocks that were never reviewed together.

The difference between an error and a warning here

Errors are structural: the JSON does not parse, @context is absent or wrong, @type is missing, or a property that the type genuinely requires has no value. A block with an error will not produce a rich result, and often will not be understood as structured data at all.

Warnings flag recommended properties whose absence narrows what a search engine can display - an Article without an author or datePublished, a Product with no offers block, a Recipe missing cook time. The markup is valid, but you are leaving display features on the table. Fix errors before deploying; treat warnings as a backlog.

Why multiple schema blocks on one page is normal

A well-marked-up article page might carry Organization and WebSite markup from a site-wide template, BreadcrumbList from the navigation component, Article from the post template, and FAQPage from a plugin rendering the questions at the bottom. All four coexisting is correct and expected.

The failure mode is contradiction rather than quantity. Two Organization blocks with different names, a BreadcrumbList whose final item does not match the page URL, or an FAQPage describing questions that were removed from the visible copy last quarter. The accordion view groups results by block precisely so you can read them side by side and notice when two of them disagree.

Google requires that structured data describe content actually visible on the page. FAQ markup for questions a visitor cannot see, or Review markup for ratings that appear nowhere, is a guidelines violation and a common cause of manual actions against rich results.

What gets checked, and what happens on a URL fetch

In paste mode, the input is scanned for script tags of type application/ld+json and their contents extracted; raw JSON with no wrapper is accepted directly. Each block is JSON-parsed, and a parse failure surfaces immediately with the position reported by the parser. Arrays and @graph containers are unpacked so each entity inside is analysed as its own block.

For every entity the validator confirms that @context resolves to schema.org, that @type is present and is a recognised type string, and that the required properties for that type are present and non-empty. Recommended-but-optional properties generate warnings. Each block is then re-serialised with consistent indentation so you can copy a corrected version straight out of the result panel.

In URL mode the request goes to a server endpoint that fetches the page HTML and extracts every application/ld+json script it finds, reporting both the number of script tags and the number of entities inside them - those numbers differ whenever a single script carries an array. Only publicly reachable pages work; anything behind authentication, a login wall, or aggressive bot protection will return a fetch error rather than results.

A block that parses but will not produce a rich result

Input

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Article",
  "headline": "How to Pick Instagram Hashtags"
}
</script>

Output

Found 1 schema in 1 JSON-LD script
1 warning

Article - 0 errors, 2 warnings
  WARNING  Recommended property "author" is missing
  WARNING  Recommended property "datePublished" is missing
  OK       @context and @type are valid

Nothing here is broken - the JSON parses and the type is real - which is exactly why this class of problem survives to production. Article markup without an author or a publication date gives search engines almost nothing to display beyond what they could already read from the page. Adding an author object and an ISO 8601 datePublished converts a technically valid block into a useful one.

Limitations

  • This validates syntax and required fields. It cannot tell you whether Google will grant a rich result, which depends on content quality, site-level eligibility, and features that change without notice.
  • Required-property checks cover the common types (Organization, WebSite, Article, FAQPage, BreadcrumbList, Product, HowTo, Event, JobPosting, VideoObject, Recipe, Review and similar). Rarer types are checked for structural validity only.
  • Microdata and RDFa are not supported. Only JSON-LD in application/ld+json scripts is extracted and analysed.
  • URL fetching retrieves the served HTML. Structured data injected by client-side JavaScript after load will not be seen, even though Google may render and find it.
  • The validator cannot verify that your markup matches visible page content - the requirement most likely to cause a manual action.

When not to use this tool

  • To confirm rich result eligibility for a live page, use Google’s Rich Results Test; it evaluates against Google’s current feature requirements rather than the schema.org specification alone.
  • If you are authoring markup from scratch rather than debugging existing markup, start with the schema markup generator and validate the output here afterwards.

How to use it

  1. 1

    Choose Fetch from URL for a live page, or Paste markup to check a block before you deploy it.

  2. 2

    Read the summary bar first - it reports how many entities were found across how many script tags, which is where duplicate or plugin-injected markup shows up.

  3. 3

    Expand each block and clear every red error before touching the yellow warnings; errors prevent recognition, warnings only limit display.

  4. 4

    Copy the reformatted JSON-LD from the result panel back into your template, then re-test the live URL in Google’s Rich Results Test for eligibility.

Questions

The validator says my markup is clean but no rich result appears in Google. Why?

Valid markup is necessary, not sufficient. Google decides independently whether to show an enhancement based on page quality, site-level trust, query intent, and whether the feature is available for your content type and region at all. Confirm eligibility in the Rich Results Test, then check the Enhancements reports in Search Console for the live verdict.

Why does the URL fetch find fewer blocks than I have on the page?

Almost always because some of your JSON-LD is injected by JavaScript after the initial HTML response. The fetch reads the served HTML only. Paste the rendered markup from your browser’s inspector into the paste tab to validate those blocks.

Should I combine everything into one script tag?

It makes no difference to search engines whether you use one script containing an @graph array or several separate scripts. Pick whichever is easier for your templates to maintain - separate blocks per component tend to be easier to debug, since a syntax error in one does not invalidate the rest.

How often should I re-run this?

After any CMS, theme, or SEO plugin update, and after template changes. Plugin updates rewriting or duplicating JSON-LD is one of the most common ways working markup silently breaks on a site nobody has touched editorially in months.