Free tool Schema validator for JSON-LD and HTML
Paste a JSON-LD snippet or the full source of a page. The validator pulls out every application/ld+json block, tells you the line and column of any JSON error, lists each item with its @type and @id, and checks the properties Google requires. It is not Google’s validator: use it to find problems fast, then confirm with the Rich Results Test.
- Finds every JSON-LD block
- Same rules as the generator
- Runs locally
Check JSON-LD or a whole page
The sample is a product page with two blocks and a few typical mistakes. Paste your own code: view the page source (Ctrl+U / ⌥⌘U) and copy all of it, or paste a single JSON-LD object.
Starting with { or [ means one JSON-LD document; anything else is read as HTML and searched for <script type="application/ld+json">.
JSON-LD blocks
2
Script tags found
Items
2
Top-level objects, including each @graph entry
Errors
2
Break eligibility
Warnings
2
Recommended or risky
Items found
| Block | @type | @id or name | Status |
|---|---|---|---|
| 1 | Product | Linen Shirt – Navy | 2 error(s) |
| 2 | BreadcrumbList | — | OK |
Checks
Sorted by severity. Line numbers refer to the text you pasted.
- ErrorLine 14Product › offers › price: "$59.00" includes a currency symbol or code. Put only the number in price (59.00) and the currency in priceCurrency (USD).
- ErrorLine 17Product › offers › priceValidUntil: "12/31/2026" is not an ISO 8601 date. Use 2026-11-09 or 2026-11-09T09:00:00-05:00.
- WarningLine 6Product: recommended property "description" is missing. Add it if the information exists on the page.
- WarningLine 10Product › image: "/images/linen-navy.jpg" is a relative URL. Use the full address with https:// so it means the same thing wherever the markup is read.
- OKLine 23BreadcrumbList: valid breadcrumb. Since January 2025 Google shows breadcrumbs on desktop results only; mobile results show just the domain.
Version v1.0Updated Update history
What each part of the report means
Four counts, a table of items and a list of checks.
Blocks and items
A block is one script tag. An item is one top-level object inside it; a block with an @graph of five nodes counts as five items. Nested objects such as an Offer inside a Product are checked as part of their parent, not counted separately.
Syntax errors
If a block is not valid JSON, nothing in it is read, by Google or by this tool. The line and column point to where parsing stopped. Line numbers count from the top of what you pasted, so a page source works as is.
Errors versus warnings
An error means a required property is missing or a value is in the wrong format, so the item cannot get a rich result. A warning is a recommended property you left out, or something valid but risky, such as a relative URL.
Notes
Facts worth knowing that are not mistakes: that Google no longer shows FAQ or HowTo rich results, that breadcrumbs appear on desktop only, or that a type is outside the rules this tool knows.
This is not Google’s validator and not the Schema.org validator. It checks the JSON you paste against a rule set for common types; it cannot see JavaScript-rendered markup, page content or manual actions. For the final word, test the live URL in Google’s Rich Results Test.
Three steps
Works with a fragment, a template or a full page.
-
1
Paste the code
Open the page, view source, select all and paste. For a page that adds JSON-LD with JavaScript, copy the rendered HTML from the browser’s developer tools (Elements panel → Copy outerHTML) instead.
-
2
Fix errors first
Start with syntax errors: one stray comma hides everything else in that block. Then fix required properties and formats.
-
3
Confirm with Google
When the list is clean, publish and run the URL through the Rich Results Test. Search Console’s Enhancements reports then track the whole site over time.
The rules behind the report
Checks fall into three groups: JSON syntax, schema.org structure and Google’s requirements for supported types. The rules are the same ones the schema markup generator uses.
- Types checked in depth: Article family, Product, Offer, AggregateRating, Review, Organization, LocalBusiness and common subtypes, BreadcrumbList, FAQPage, SoftwareApplication, HowTo
- References by
@idinside the same block are followed - Unknown types are listed as notes, not errors; schema.org has hundreds
| Check | Example of a problem | Level |
|---|---|---|
| JSON syntax | Trailing comma, single quotes, comments | Error with line and column |
| @context | Missing, or "schema.org" without https:// | Error |
| @type spelling | "product" instead of "Product" | Error |
| Required properties | Product without offers, review or aggregateRating | Error |
| Dates | 12/31/2026 instead of 2026-12-31 | Error |
| Prices and currency | "$59.00", "1.299,00", "usd" | Error |
| URLs | /images/a.jpg (relative) | Warning |
| Recommended properties | Article without dateModified | Warning |
The sample page, line by line
The default input is a product page with two JSON-LD blocks. The validator finds two items, two errors and two warnings.
| Where | Problem | Fix |
|---|---|---|
| Product › offers › price | "$59.00" includes a currency symbol | "price": "59.00" and keep priceCurrency USD |
| Product › offers › priceValidUntil | "12/31/2026" is not ISO 8601 | "2026-12-31" |
| Product › image | Relative URL | "https://example.com/images/linen-navy.jpg" |
| Product | No description | Add the product description shown on the page |
| BreadcrumbList | Valid; last item has no URL | Fine as is: the last item is the current page |
After the two fixes the Product has no errors and qualifies for product snippets. ratingValue written as a string "4.6" is accepted; numbers are also fine.
What breaks structured data most often
These come up again and again in real page sources.
Escaped quotes from a CMS
A field that HTML-escapes its content turns " into ". In a script tag that is no longer JSON.
Duplicate items with different values
A theme and a plugin each output Product or Organization. Google has to guess which one is right.
Relative and http URLs
Images and logos written as /logo.png or on an old http host. Use the canonical https address.
Dates in local format
03/04/2026 is March or April depending on the reader. ISO 8601 has one meaning.
Follow what happens after the fix
Valid markup helps search engines read a page; whether it brings visits shows up in your traffic. TapCub keeps search performance, crawlers and page behaviour side by side.
Search performance
Connect Google Search Console and Bing Webmaster to see clicks, impressions and position by page.
Learn moreCrawler activity
Search engines and AI crawlers are counted separately from people, with a crawl-health table for fetches, 404s and 5xx.
Learn morePages that slip
Content decay flags pages that used to rank and now lose traffic, so you know where to look first.
Learn moreSchema validator questions
Still have a question?
Chat with the team behind TapCub — we usually reply within a few hours on business days.
How is this different from Google’s Rich Results Test?
Google’s test fetches and renders your live page and tells you which rich results it can produce. This tool checks code you paste, works on drafts and templates before they go live, lists every item, and points at JSON errors by line. Use this one while editing and Google’s for the final check.
What replaced Google’s Structured Data Testing Tool?
Google retired it in 2021. General schema.org checks moved to the Schema Markup Validator at validator.schema.org, and checks for Google’s rich results to the Rich Results Test. This tool covers the step before both for pasted code: JSON errors by line, plus Google’s required properties for the types it knows.
And from the Schema Markup Validator?
validator.schema.org checks markup against the whole schema.org vocabulary but says nothing about Google’s requirements. This tool knows fewer types, but adds Google’s required and recommended properties and format rules for them.
Why does it say “no JSON-LD found”?
Either the code you pasted has no script tag with type="application/ld+json", or the page uses Microdata or RDFa instead, or the JSON-LD is added by JavaScript after the page loads. In the last case copy the rendered HTML from developer tools.
Can it check a URL directly?
Not yet: fetching other sites needs a server, and this tool runs entirely in your browser. Paste the page source instead; it takes a few seconds.
Why is a relative URL only a warning?
JSON-LD processors resolve relative URLs against the page address, so they often work. They break when the same markup is reused on another page or read out of context, which is why absolute URLs are the safe choice.
Does valid markup guarantee a rich result?
No. Valid markup makes a page eligible. Google decides per query whether to show a rich result, and some types such as FAQ and HowTo are no longer shown at all.
Is the pasted code uploaded?
No. Parsing and checking happen in your browser. Nothing is sent to TapCub and the tool has no share link, so pasted source code never ends up in a URL.
Update history
New features, fixes and data refreshes for this tool, newest first.
-
· v1.0
LaunchedFirst release.
Missing something or found an error? Tell us — requests that come up often go into the next update. All tool updates
Fix it at the source
Rebuild the broken item with the generator, then check the rest of the page’s head.