Preflight draft JSON-LD before publishing
Validate private or in-progress markup locally for JSON syntax, schema.org vocabulary, documented Google requirements, and cross-node references.
Free, no signup.
A schema block can look fine and still miss the one property blocking your rich result.
This validator checks yours in four layers — JSON-LD syntax, schema.org vocabulary,
Google's rich-result requirements, and cross-block @id graph resolution —
then hands you back a corrected, copy-pasteable version.
Uses the same inputs as the result above. No request is made from this panel.
MCP tool
Arguments
The fetched HTML is checked for JSON-LD and visible-content matches. JS-injected content cannot be evaluated; paste rendered markup when needed.
Example data — replace with your own
Requests are processed by our server and are not stored after processing. Only live-URL retrieval uses this service; pasted markup and all validation stay in your browser. Anonymous run-level outcome counters may be used for aggregate research; URLs, domains, IPs, and identifiers are never included, and no statistic is released below 100 runs.
Paste a small graph — an article, its author, and an unrelated product:
{
"@context": "https://schema.org",
"@graph": [
{ "@type": "BlogPosting", "@id": "#article", "headline": "How rich results actually work", "image": "https://example.com/hero.jpg", "datePublished": "2026-07-01T09:00:00Z", "author": { "@id": "#author" }, "publisher": { "@id": "#org" } },
{ "@type": "Person", "@id": "#author", "name": "Patrick Stox" },
{ "@type": "Product", "name": "Example Widget" }
]
} …and Validate returns three detected entities:
offers, review,
or aggregateRating, so it lands in "Blocks rich
result", the only tier that stops a rich result outright.@id is the subtle one. publisher points
at #org, but no node with that @id exists anywhere in the graph — the
graph-resolution layer catches it even though the JSON itself is perfectly valid.offers,
brand, sku, image, description,
author.url, and dateModified, each marked ADD: for you to
fill in. or [) or a whole
HTML page — Auto-detect figures out which you gave it, or force a mode with the
tabs.ADD:.+ saves the current site or page. Use ☆ beside any saved site, page, or list to favorite it. Recent check history appears below.
Target filled from your local choices.
Saved targets, named lists, and recent check summaries remain only in this browser.
No Product markup was found in raw HTML. This does not establish that the rendered page has none.
Run a rendered comparisonInvalid markup or missing required properties — no rich result is possible until these are fixed.
Valid, but missing recommended properties or soft issues that reduce eligibility or appearance.
Nothing wrong — properties or caveats that are worth knowing about.
Your input with stubs added for missing properties — every line to fill in is marked ADD:.
Input
Corrected JSON-LD
These checks compare selected user-facing schema values with the raw HTML's visible text. They cannot see content added by JavaScript after page load.
The validator runs four layers, in order, because each one only matters if the one before it passes:
@context/@graph
shape?@id pointers between
entities) actually resolve, or dangle?The validation engine runs in your browser. Markup you paste, including private drafts, is not uploaded or stored. Live-URL mode sends only the public URL to a guarded server endpoint to retrieve its HTML, then runs the same local checks against that response.
Most broken rich-result markup is valid JSON but incomplete: a Product lacks an Offer price, an Article omits a headline or author, or an @id points to an entity that was never defined. The corrected output makes those gaps concrete with ADD: stubs, but only fill a stub with information that is genuinely shown to users.
That last check matters for both search quality and answer systems: schema is a claim about the page, not a hidden source of extra facts. In HTML and URL modes, this tool compares visible text with selected names, prices, and ratings so a mismatch is easy to investigate.
| Need | Best first check | Why |
|---|---|---|
| Draft or private markup | This Schema Validator | Detailed JSON-LD, vocabulary, graph, and corrected-output checks stay in your browser. |
| Published URL and Google rendering | Google Rich Results Test | Google fetches the live page and reports its own supported enhancements. |
| Which feature is one field away | Rich-Result Eligibility Checker | It groups the requirements by rich-result type and prioritizes near misses. |
One honest caveat the tool repeats: meeting every documented requirement makes a rich result possible, never guaranteed. Google decides at query time.
ADD: stubs and an added-line diff view.It validates JSON-LD, the format Google recommends — not Microdata or RDFa. It checks the documented requirements for the rich-result types it knows; a novel or beta type may not be covered. Live-URL mode checks server-fetched HTML and does not execute page JavaScript, so markup injected by a tag manager or client-rendered app may be missing. Paste rendered HTML when needed, and use Google's Rich Results Test to confirm Google's rendered view of a published page.
Google’s Rich ResultsRich results (formerly 'rich snippets') are enhanced search listings — stars, images, prices, breadcrumbs, video thumbnails, and more — that Google and Bing build from structured data. They're a display feature, not a ranking factor, and eligibility never guarantees they'll show. Test fetches and renders a live URL, then reports which Google rich results it may qualify for. This validator runs its four validation layers locally in your browser. You can paste JSON-LDJSON-LD (JavaScript Object Notation for Linked Data) is a script-based structured data format, typically paired with the schema.org vocabulary to describe page content for search engines and AI systems. Google recommends it over Microdata and RDFa because it's the easiest format to implement and maintain at scale — but all three work, and structured data isn't a ranking signal. or HTML (including private drafts), or ask the guarded server endpoint to retrieve a public URL’s HTML before the same local checks run. URL mode does not render JavaScript, so use Google’s test for the final rendered-page check.
No. Valid markup can satisfy documented markup requirements, but display also depends on supported feature policies, crawling, indexing, and the search context. Google does not guarantee a rich result.
Google recommends JSON-LD, and it is the easiest format to maintain because the markup lives in a single script block separate from your HTML. This tool validates JSON-LD (including the JSON-LD blocks extracted from a pasted HTML page).
Structured dataStructured data is a standardized way of labeling page content (using the schema.org vocabulary in JSON-LD, Microdata, or RDFa) so search engines can understand its meaning. It's not a direct ranking factor — its value is rich results and entity understanding. often splits entities across blocks"Entity & identity schema" is a practitioner label — not an official Google or schema.org category, and not exhaustive of identity-capable schema.org types — for the three main types that declare who or what is behind a site: Organization, LocalBusiness, and Person. and links them with @id — for example an Article that references its author Person by @id. The graph check confirms those references actually resolve to a defined node instead of dangling, which is a common and hard-to-spot mistake.
Pasted markup is validated locally in your browser and is not uploaded or stored. If you use live-URL mode, only the public URL is sent to a guarded server endpoint so it can retrieve the page HTML; validation still runs locally. Fetched HTML may omit markup added later by JavaScript, so paste rendered HTML when you need to check it.
Upvote what you want most. New ideas can be submitted from the floating Feedback menu; requests appear here once approved, and the most-wanted rise to the top.
You won't be emailed about that request anymore.
Loading…
New requests are reviewed before they appear here.
Where this tool helps
Validate private or in-progress markup locally for JSON syntax, schema.org vocabulary, documented Google requirements, and cross-node references.
Separate blocking required-property failures from recommended-property limits and lower-priority opportunities instead of treating every warning alike.
Inspect detected nodes and @id relationships to find duplicate identifiers, dangling references, and references that resolve to the wrong entity type.
Paste HTML or fetch a fictional public page to investigate whether selected names, prices, and ratings in schema also appear in the raw visible content.
Copy corrected JSON-LD, share bounded input state, or export the complete entity and issue record for developers and reviewers.
Watch the full workflow
This beginner walkthrough explains schema markup and J-S-O-N-L-D, validates the built-in fictional example, and reads the results in priority order. We will separate one rich-result blocker from softer improvements, trace a broken entity link, review corrected starter output, and check a fictional page whose schema price differs from its visible price. No customer markup or live business is used.
Schema markup is machine-readable information that describes things on a page, such as an article, person, product, price, or organization. J-S-O-N-L-D is the common script format used to publish it. This validator checks whether supplied markup can be read, uses implemented schema dot org terms, meets tracked Google feature requirements, and connects referenced items correctly. Pasted drafts stay in the browser.
Use it before publishing new markup, when a rich-result requirement is missing, when linked entities do not connect, when schema claims may disagree with visible page text, or when developers need a corrected starting point and full issue export. The report separates blockers, softer limits, and optional opportunities so the team can fix the highest-priority evidence first.
Auto-detect decides whether you pasted J-S-O-N-L-D or a full H-T-M-L document. The other tabs can force a mode when you already know the format. You can paste private draft markup, load the built-in example, or fetch one public U-R-L. U-R-L mode reads the returned raw H-T-M-L and does not render JavaScript.
Select Try an example. The page loads a labeled fictional graph and validates it in a separate browser worker. A graph simply means several structured-data items can refer to one another. This result contains one Blog Posting, one Person, and one Product.
The summary reports three entities, which means three described items. It finds one Product, no Product Groups, and no Offers. The type chips keep the per-type counts visible, while J-S-O-N and C-S-V exports preserve the full entity and issue record. These are counts inside the supplied markup, not traffic or search-performance metrics.
All three items use valid implemented schema dot org vocabulary. That means the types and properties are recognized. Separately, the Blog Posting meets the tracked Article requirements, the Person has no applicable Google rich-result feature, and the Product misses a Product requirement. Valid vocabulary and complete feature eligibility are different questions.
The highest-priority group contains one issue. For this tracked Product result, the Product needs at least one Offer, Review, or Aggregate Rating. The blocking group is for markup that cannot be read, unsupported terms, or missing required information that prevents the intended feature baseline. Confirm which truthful property applies before adding it.
The next group contains seven softer findings: the author lacks a U-R-L, the article lacks a modified date, the Product lacks four recommended fields, and the publisher reference has no matching item. These gaps can reduce completeness or reveal a graph problem, but the interface correctly keeps them below the Product blocker instead of pretending every warning has equal impact.
An at-I-D gives a structured-data item a reusable identifier. Another item can point to that identifier instead of repeating all its properties. The graph shows three detected entities and two references. The article’s author reference reaches the defined Person, but its publisher points to hash org, which has no matching node. Valid J-S-O-N syntax alone would not catch that broken connection.
Corrected J-S-O-N-L-D keeps the supplied graph and adds highlighted A-D-D placeholders for supported missing properties. Copy it only as an implementation starting point. Never publish the placeholder text or invent a rating, price, author, image, or organization. Replace every addition with a true value supported by visible page content.
Full J-S-O-N preserves the structured result for another system. C-S-V turns entities and findings into a spreadsheet-friendly table. Use these exports when a developer or reviewer needs the complete entity, priority group, issue code, property, node, and message instead of only a screenshot.
U-R-L mode sends the public address to the guarded fetch service, then validates the returned H-T-M-L. The page clearly warns that markup added later by JavaScript will not appear. If the raw response is not the evidence you need, paste rendered H-T-M-L or use a tool that compares rendered output.
Enter the reserved fictional blue-trail-shoe address and select Fetch and validate. The visible status confirms which page was checked. The returned raw H-T-M-L describes one Product, its Brand, and an Offer. Because this is a reserved fictional address, no customer or live business data appears in the walkthrough.
The fetched report finds three entities: Product, Brand, and Offer. The Product meets the implemented schema and tracked feature checks, and the graph contains one Offer. That does not guarantee a search display. It means only that the supported markup checks pass for this fictional input.
One consistency issue remains in the softer group. The schema claims a price of one hundred twenty-nine dollars, while the fictional visible H-T-M-L shows one hundred thirty-nine. The tool labels this Content inconsistency—verify. It is an investigation cue, not automatic proof that eligibility is blocked, a policy was violated, or anyone intended to mislead.
The evidence drawer names the schema price it searched for, says that value was not found in the fetched visible text, identifies raw H-T-M-L matching as the evidence source, and provides a fix-and-verification path. Align the schema price with what users can see, then validate the released rendered page again.
The validator works in layers because later conclusions depend on earlier ones. First it checks readable J-S-O-N syntax, then implemented schema dot org terms, then tracked Google feature requirements, and finally links between entities. H-T-M-L mode can also compare selected schema values with raw visible text. Each finding comes from an engine rule and observed input evidence.
Start with Blocks rich result, which covers unreadable markup, unsupported terms, and missing required properties. Next review Limits rich result for incomplete or investigative work. Finish with Valid, but missed opportunity for optional context. This priority order makes a long issue list useful without claiming every suggestion has the same effect.
The tool includes automatic input detection, separate-worker validation, grouped repeated issues, entity and type totals, an at-I-D relationship view, corrected-output differences, expandable evidence, full exports, bounded share links, Schema Generator handoffs, M-C-P access, and a rendered-comparison next step when raw H-T-M-L does not contain expected Product markup.
The implemented and dated rule catalog is not a promise to cover every schema term or search feature forever. U-R-L mode does not render JavaScript. Large results are grouped and limited on screen. Corrected placeholders require human truth, and passing the checks does not guarantee display. Validate the released rendered page in Google’s Rich Results Test, then monitor actual search behavior separately.
Fix only issues supported by the page and business facts. Replace every generated placeholder with a truthful value that users can also verify, then validate the final rendered H-T-M-L again. Use Google’s Rich Results Test for the released page. Valid markup can make a page eligible for consideration; it never guarantees that Google will show a rich result.