Schema Markup Validator

Enter a URL or paste JSON-LD to find JSON syntax errors and check each item against the properties Google requires for rich results. It reads the raw HTML, so schema added by JavaScript isn't included.
or paste code

If the code box isn't empty, the code is checked and the URL is ignored. Paste raw JSON-LD, or HTML containing one or more <script type="application/ld+json"> tags. Up to 400 KB.

What this schema markup validator checks

Paste JSON-LD or enter a URL, and the validator does three things. It parses every <script type="application/ld+json"> block and reports JSON syntax errors with the line, the column and the likely cause. It checks that each item has a schema.org @context and a sensible @type. And for the types Google shows rich results for, it checks the properties Google lists as required and recommended, plus value formats like dates, prices, currency codes and rating ranges.

A missing required property is an error: Google won't consider the item for that rich result. A missing recommended property is a warning: the item can still qualify, but you're giving Google less to work with.

What schema markup is

Schema markup, or structured data, is a machine-readable description of what a page is about: this page is a product that costs $39.99 and is in stock, this is a recipe that takes 45 minutes, this is a job posting in Denver. The vocabulary comes from schema.org. Search engines use it to understand a page and, for some types, to show rich results such as review stars, prices, breadcrumbs or event dates. For a longer look at why it's worth doing, see what makes schema markup so valuable.

JSON-LD vs Microdata vs RDFa

There are three ways to put schema.org data in a page. Google supports all three and recommends JSON-LD because it's the easiest to add and maintain.

FormatWhere it livesTrade-off
JSON-LDA separate <script type="application/ld+json"> blockIndependent of the page layout. The data can drift from what the page shows if nobody keeps them in sync.
Microdataitemscope, itemtype and itemprop attributes on HTML elementsTied to the visible content, but a template change can silently break it.
RDFavocab, typeof and property attributesSame trade-off as Microdata. Less common on commercial sites.

This tool validates JSON-LD only. It detects Microdata and RDFa and lists their types, so you'll know they're there.

How to validate structured data

Google retired its Structured Data Testing Tool. The generic part moved to schema.org as the Schema Markup Validator, and Google's own checks moved to the Rich Results Test. Each tool answers a different question:

Required vs recommended properties

Each rich result type in Google's documentation has a table of required and recommended properties. Some types have no required properties at all. Article and Organization, for example, only have recommended ones. Others are strict: an event needs name, startDate and a location with a name and address, and a video needs name, thumbnailUrl and uploadDate. Google's advice is to add fewer recommended properties that are complete and accurate rather than every property with poor data.

Why valid markup may still not get rich results

Common JSON-LD errors and how to fix them

Trailing commas and comments

JavaScript tolerates both. JSON doesn't, and one stray comma makes the whole block unreadable.

// Broken
{
  "@type": "Product",
  "name": "Trail Shoe", // model 2
}

// Fixed
{
  "@type": "Product",
  "name": "Trail Shoe"
}

Unescaped quotes and HTML entities

A double quote inside a string ends the string early. The opposite mistake happens when a template HTML-escapes the JSON: browsers don't decode entities inside <script>, so &quot; stays literal.

// Broken
"name": "The "Best" Trail Shoe"
{&quot;@type&quot;: &quot;Product&quot;}

// Fixed
"name": "The \"Best\" Trail Shoe"
{"@type": "Product"}

Several objects in one block

Two objects placed one after another aren't valid JSON. Wrap them in an array, or use @graph and link them with @id.

{
  "@context": "https://schema.org",
  "@graph": [
    {"@type": "Organization", "@id": "https://example.com/#org", "name": "Example Co"},
    {"@type": "WebSite", "name": "Example", "url": "https://example.com/",
     "publisher": {"@id": "https://example.com/#org"}}
  ]
}

Values in the wrong format

Prices are numbers with no currency symbol, currencies are ISO 4217 codes, and dates are ISO 8601. A rating outside the scale is an error; if you rate out of 10, say so with bestRating.

// Broken
"price": "$1,299", "priceCurrency": "$", "startDate": "Oct 3, 2026 7pm",
"ratingValue": 8.5

// Fixed
"price": "1299.00", "priceCurrency": "USD", "startDate": "2026-10-03T19:00-05:00",
"ratingValue": 8.5, "bestRating": 10

Type names are case-sensitive too: "@type": "product" doesn't match Product. For more examples, read structured data errors that kill rich results.

Schema added with JavaScript

Google can read JSON-LD that JavaScript injects, such as markup from a tag manager or a CMS widget, because it renders pages before indexing. Tools that read raw HTML, including this one, won't see it. If this tool finds nothing but you know your site adds schema, run the Rich Results Test, which renders the page. Server-rendered JSON-LD is still the safer choice: every crawler sees it, and it doesn't depend on a script loading.

Checking structured data across a whole site

A validator checks one page. Schema usually comes from templates, so one broken template breaks thousands of pages at once. bseoa crawls your whole site from your own computer and flags every page whose JSON-LD doesn't parse, so you can find the template behind the error. Add --spa to render JavaScript before auditing:

black-seo-analyzer --url-to-begin-crawl https://example.com --spa --output-type csv --output-file crawl.csv

Check every page, not just one

These tools look at one URL at a time. bseoa crawls your whole site on your own machine and checks every page for 300+ technical SEO issues across 16 analysis modules.

Start the 14-day free trial

More free SEO tools