Free Schema Markup Validator (JSON-LD Checker)
Paste code or check a live page. Get errors and warnings with the reason for each, a health score, a check of @graph links, and corrected code you can copy.
What is a schema markup validator?
A schema markup validator reads your JSON-LD structured data and reports missing required fields, wrong values and structural mistakes, so you can fix them before search engines read the page. This one also checks the links between items in an @graph and, for a live URL, whether the marked-up text appears on the page.
What this validator tests
| Check | What it looks at | How to fix it |
|---|---|---|
| Syntax | Valid JSON, curly quotes, comments, trailing commas, single quotes | Auto-repaired for checking, and fixed in the corrected code. |
| Required and recommended fields | Per type, including nested items such as offers, author and address | Fill the fields the checker names. Each shows what it unlocks. |
| Values | Dates, prices, currencies, ratings, review counts, URLs, durations, enums | Use the exact formats shown in the message. |
| Types and properties | Misspelt types and properties, missing @type on nested items | Take the suggested spelling. |
| @graph and @id | Missing and duplicate @id values, repeated Organization or WebSite items | Define every @id once and point to it. |
| Page match (URL mode) | Whether marked-up text appears on the page | Only mark up what visitors can see. |
Schema checker: supported types and what each one needs
This schema checker has built-in checklists for the types below. For each one it flags missing required fields as errors and missing recommended fields as warnings. Other types are still parsed and shown, but without a checklist.
| Type | Required | Recommended |
|---|---|---|
| Article (also BlogPosting, NewsArticle) | headline | image, datePublished, dateModified, author |
| Product | name, plus one of offers, review or aggregateRating | image, description, offers, aggregateRating, brand, sku |
| Offer | price, priceCurrency | availability, url, priceValidUntil |
| AggregateRating | ratingValue, plus reviewCount or ratingCount | None |
| Review | itemReviewed, reviewRating, author | datePublished, reviewBody |
| LocalBusiness (and subtypes) | name, address | image, telephone, url, openingHours, geo, priceRange, sameAs |
| Organization | name | url, logo, sameAs, description, telephone |
| Person | name | url, image, sameAs, jobTitle |
| WebSite | url | name |
| FAQPage | mainEntity, with each Question having a name and acceptedAnswer, and each Answer having text | None |
| BreadcrumbList | itemListElement, with each item having a position and name | item (the URL) |
| Event | name, startDate, location | endDate, description, image, eventStatus, eventAttendanceMode, offers, organizer |
| Recipe | name, image | recipeIngredient, recipeInstructions, author, datePublished, description, totalTime, aggregateRating |
| HowTo | name, step (each step needs text or a name) | image, description, totalTime |
| SoftwareApplication (also WebApplication) | name, plus one of offers, aggregateRating or review | operatingSystem, applicationCategory, description |
| Service | name | provider, description, areaServed, serviceType |
| VideoObject | name, thumbnailUrl, uploadDate | description, duration, contentUrl, embedUrl |
| JobPosting | title, description, datePosted, hiringOrganization, jobLocation | validThrough, baseSalary, employmentType |
| Course | name, description | provider |
These lists are this tool's checklists, based on the fields that matter for common rich results. Google's requirements vary by feature and change, so confirm them in Google's structured data gallery before you rely on a result.
JSON-LD validator: the value rules it checks
A field can be present and still be wrong. This validator checks the format of values, not just whether a field exists:
| Value | Flagged | Use instead |
|---|---|---|
| URL | widget.jpg | https://example.com/widget.jpg |
| Date | 2026/10/01 | 2026-10-01 or 2026-10-01T09:00:00+05:30 |
| Price | "$19.99" or "1,499" | 19.99 or 1499 |
| Currency | usd or Rs | USD or INR |
| Rating | 9 on a 1 to 5 scale | 4.5, within bestRating and worstRating |
| Review or rating count | 0 | A whole number of 1 or more, or leave the field out |
| Position in a list | 0 or 1.5 | 1, 2, 3 |
| Availability | InStock (a warning, with an auto-fix) | https://schema.org/InStock |
| Duration | 30 minutes | PT30M |
| Latitude and longitude | Out of range numbers | -90 to 90 and -180 to 180 |
It also warns about headlines over 110 characters, publish or modified dates in the future, and phone numbers that look too short.
Common schema markup errors and how to fix them
1. Trailing comma or curly quotes
A comma after the last item, or quotes copied from a word processor, makes the whole block invalid JSON. The tool repairs these to be able to check the rest, then tells you to fix the original.
Wrong: { "@type": "Product", "name": "Widget", }
Right: { "@type": "Product", "name": "Widget" }2. Price outside the offers object
The validator checks exact property paths. A price placed directly on a Product does not count as an offer, so the report says the Product needs at least one of offers, review or aggregateRating.
Wrong: { "@type": "Product", "name": "Widget", "price": 19.99 }
Right: { "@type": "Product", "name": "Widget",
"offers": { "@type": "Offer", "price": 19.99, "priceCurrency": "USD" } }3. A price with a currency symbol
Wrong: "price": "$19.99" Right: "price": 19.99, "priceCurrency": "USD"
4. An http context or a missing @context
Wrong: "@context": "http://schema.org" Right: "@context": "https://schema.org"
5. A date in the wrong format
Wrong: "datePublished": "2026/10/01" Right: "datePublished": "2026-10-01"
6. A rating outside its scale, or a review count of 0
Wrong: "aggregateRating": { "ratingValue": 9, "reviewCount": 0 }
Right: "aggregateRating": { "ratingValue": 4.6, "reviewCount": 128 }Use real ratings from reviews visitors can see. If there are no reviews, remove the whole rating block.
7. A nested item with no @type
Nested items such as an offer, address, rating or step should say what they are. The tool names the type it expects, and its corrected code adds it for you.
To use the auto-fix, paste your code, read Corrected code, then copy it and fill in any real data it could not invent. Only safe fixes are applied automatically: straight quotes, comments, trailing commas, single quotes, https context, date and price format, uppercase currency and full schema.org URLs for enum values.
How the schema health score is calculated
The score starts at 100. Each error takes off 12 points and each warning takes off 3, and the score never goes below 0. So one error and two warnings gives 100 - 12 - 6 = 82. The number is a quick summary of the report, not a Google score, and it says nothing about whether a page will get a rich result.
@graph and @id: how connected schema is checked
Many sites and SEO plugins output one @graph that holds several items, such as a WebSite, an Organization and an Article, and let them refer to each other by @id. The validator checks each item in the graph on its own, then checks the links between them:
- Each @id should be defined once. A duplicated @id is an error.
- A reference such as
{ "@id": "https://example.com/#organization" }should point to an item that is defined. When it does not, you get a warning on pasted code and an error on a live page. - Repeated Organization, WebSite or FAQPage items get a warning, because a plugin and a hand-written block often both output the same one.
When you paste only part of a page, a reference can look undefined because its target sits elsewhere on the page. That is why this check is a warning for pasted code.
How to validate JSON-LD
- Paste your code, or switch to Check a live URL and enter a page address.
- Press Validate. Start with the Fix first list.
- Open each item to see what passes and what is missing.
- Copy the corrected code if fixes were applied, then add the real data for missing fields.
- Confirm the live page in the Google Rich Results Test.
Valid schema but no rich result: why
Valid markup makes a page eligible. It does not make Google show a rich result. Google decides based on the page, the query and its own policies. Two types in this tool carry a note for that reason:
- FAQPage. Google stopped showing FAQ rich results in search on May 7, 2026. The markup is still valid, and Google says it can stay in place.
- HowTo. Google cut back HowTo rich results in 2023, first to desktop only, so do not plan around them. The markup is still valid for other readers.
Other common reasons a valid page shows no rich result: the marked-up text is not visible on the page, the page has a quality or policy problem, the markup describes the wrong thing, or Google has not recrawled the page yet. In URL mode this tool warns when marked-up text, such as a headline or product name, is not found in the page's visible text.
Google's guide to generative AI features also says structured data isn't required for generative AI search and that there is no special schema.org markup to add. Valid markup is still worth having for the rich results Google supports and for clarity.
This validator vs the schema.org validator and Google's Rich Results Test
These tools answer different questions, so use more than one.
| Tool | What it tells you | Use it for |
|---|---|---|
| This validator | Required and recommended fields, value formats, @graph links, and corrected code, for common rich-result types. | A fast first pass while you build or fix markup. |
| Schema Markup Validator (validator.schema.org) | Whether the markup is valid against the full schema.org vocabulary. | Checking types and properties, including ones Google does not use. |
| Google Rich Results Test | Whether a page is eligible for Google's rich results. | The final check before you rely on a rich result. |
A good workflow is to paste your code here, fix what it finds, confirm the vocabulary in the schema.org validator, and then test the live page in the Rich Results Test. To build the code first, use the Schema Markup Generator.
What this schema validator does not do
- It reads JSON-LD and microdata. It does not check RDFa and tells you when it finds it.
- It does not confirm eligibility for a Google rich result. Use the Rich Results Test for that.
- In URL mode it reads the HTML your server sends. Schema added by JavaScript after the page loads is not seen, and the report says so when it finds none.
- Only the types in the table above have checklists. Other types are parsed and shown without checks.
- It checks one page or one pasted block at a time.
- Pasted code is checked in your browser and is not sent anywhere. In URL mode our server fetches the public page for you and does not keep it.
- It cannot tell whether your markup is true. Every value must match what visitors can see.
Schema validator FAQ
What is a schema markup validator?
A schema markup validator reads your JSON-LD structured data and reports missing required fields, wrong values and structural mistakes, so you can fix them before search engines read the page.
How do I validate JSON-LD schema markup?
Paste your JSON-LD, or a full page source, into the box, or enter a live page URL, and press Validate. The tool parses each block, checks required and recommended fields for the schema type, checks values such as dates and prices, and lists every error and warning.
Does this replace the Google Rich Results Test?
No. Think of it as a fast first pass. This tool checks structure, required fields and values instantly in your browser. In URL mode our server fetches the page for you. The Google Rich Results Test is still the final word on whether a live page qualifies for a rich result.
Why does it say a field is missing when I can see it in my code?
The most common cause is nesting, for example putting price directly on a Product instead of inside its offers object. The validator checks exact schema.org property paths, so a value in the wrong place reads as missing.
Can I validate more than one schema at once?
Yes. Paste a full page source or several script tags and every JSON-LD block is checked. If your JSON-LD uses an @graph array with several types, each item is checked separately, and references between items are checked too.
Which schema types does the validator support?
It has built-in checklists for Article, NewsArticle, BlogPosting, Product, Offer, LocalBusiness, Organization, FAQPage, Review, BreadcrumbList, Event, Recipe, HowTo, Person, WebSite, WebApplication, SoftwareApplication, Service, VideoObject, JobPosting and Course. Other types are still parsed and shown, without a checklist.
What is the difference between this validator and the Schema.org validator?
The Schema.org validator checks your markup against the full schema.org vocabulary. This tool focuses on the fields that matter for common rich results, plus value checks such as dates, prices and headline length, and it runs instantly in your browser.
Why is my schema not showing rich results even though it validates?
Valid markup only makes a page eligible. Google decides whether to show a rich result based on page quality, search intent and its own policies, and it has restricted some types such as FAQ.
What are the most common schema markup errors?
The most common errors are invalid JSON such as a trailing comma, a missing type, a wrong or missing context, required fields left empty, and values in the wrong place such as price outside the offers object.
Is my schema data sent anywhere?
Not when you paste code. Everything is parsed and checked in your browser with plain JavaScript, and nothing you paste is sent to a server or stored. If you use Check a live URL, our server fetches that public page for you and does not keep it.
What is the difference between a schema checker and a schema validator?
None in practice. People use schema checker, schema validator, structured data tester and JSON-LD validator for tools that test structured data. This page is all four.
How do I check the schema on my page?
Switch to Check a live URL and enter the page address, or view the page source and paste all of it into the box. The report lists every JSON-LD and microdata block found, with errors, warnings and a score.
How do I validate schema before I publish?
Paste the JSON-LD code into the box. You do not need a live page. Fix the errors, then publish and check the live URL as well.
What does the corrected code do?
It applies safe fixes automatically, such as straight quotes, removing trailing commas, https in the context, ISO dates and plain prices. It cannot add real data for missing fields, so you still need to fill those in.
What does "referenced but not defined" mean?
An item points to another by @id, such as a publisher, but no item with that @id was found. It may be defined in another block on the page or may be missing. Define it once and keep the same @id everywhere.
Does it check microdata and RDFa?
It checks JSON-LD and microdata. It shows microdata converted to JSON-LD so you can read it. It does not check RDFa.
Can I check many pages at once?
No. It checks one page or pasted block at a time. For a site-wide view, use the Technical SEO Auditor, which reports the schema types found on each page.
Why does my WordPress site show two Organization items?
An SEO plugin and a manually added block, or two plugins, usually both output one. Keep one and remove the other, or merge them using a shared @id.
What score should I aim for?
100 means no errors or warnings, but a lower score is fine if the remaining warnings are for recommended fields you cannot honestly fill. Fix every error first.
Should I mark up content that is not on the page?
No. Only mark up what visitors can see. Google can ignore markup that does not match the page, and in URL mode this tool warns when it cannot find the marked-up text.
Does structured data help with AI search?
Google's guide to generative AI features says structured data isn't required for generative AI search and that there is no special schema.org markup to add. It still matters for the rich results Google supports. Other AI tools may treat it differently, so do not rely on it for citations.
Want your schema audited across the whole site?
I check structured data on every template, fix what breaks, and watch it stays valid.