Structured data validator

Reads the JSON-LD of any page and checks, type by type, whether it has what Google requires to show a rich result. With the errors that block it kept apart from the warnings that only make it poorer.

  • Free
  • No sign-up
  • By URL or pasted code
  • Against Google’s requirements

An object, an array or the <script type="application/ld+json"> tags with their content all work. What you paste never leaves your browser.

The URL is read by our function on Cloudflare, which downloads the page, stores nothing and caches it for ten minutes. What you paste never leaves your browser.

Summary

Read a URL or paste the code to start.

    How to use it

    1. 01

      Bring the code

      Type the published URL or paste the JSON-LD of a page that is not live yet. Both roads end in the same review.

    2. 02

      See which types are there

      Every node shows up with its type and properties. If what you expected is not on the list, Google will not see it either.

    3. 03

      Fix the required first

      Errors block the rich result; warnings only make it poorer. Copy the formatted JSON and publish again.

    What Google asks for and what schema.org asks for

    They are two different bars. schema.org is a vocabulary: it accepts almost any combination of type and property, and a schema.org validator will tell you a Product with no price is perfectly valid. Google, on the other hand, only draws the rich result when the properties its documentation marks as required for that type are present, and there a Product with no offers, no reviews and no rating is nothing.

    This tool validates against the second bar, the one that decides whether the page earns space in search. And even then, validating does not guarantee Google will show it: that depends on the marked-up content being visible on the page, on it describing what the page really is, and on the site’s authority. What it does guarantee is that, if Google does not show it, the reason is not a formatting error.

    JSON-LD is not written: it is generated

    The mistake we see most is not syntax: it is structured data that told the truth the day it was written and no longer does. The price changed on the product page but not in the JSON-LD, the FAQ was reordered on the page but not in the block, the author left and their name is still on every article.

    On the sites we build, the JSON-LD comes from the same data that renders the page: a single source for the price, the date or the questions, and a builder per type that cannot forget a required property because the build would fail. This tool is the same review, done by hand, for sites that were not born that way.

    How we approach technical SEO →

    Frequently asked questions

    JSON-LD, microdata or RDFa?

    JSON-LD. It is the format Google has recommended for years and the only one you can add without touching the page markup: it lives in a separate <script>, it is generated from data and reviewed like any other JSON. Microdata and RDFa still work, but they scatter attributes through the HTML and break as soon as someone changes a template.

    Why does Google not show my rich result if it validates here?

    Because validating is necessary, not sufficient. Google decides page by page whether the rich result is worth showing, and refuses when the marked-up content is not visible to the person, when the markup describes something the page is not about, or when the page has little authority. It is also slow: weeks can pass between publishing and seeing it. What this tool guarantees is that the reason is not a formatting error.

    Can I put several types on the same page?

    Yes, and it is the norm: a product page carries Product, Offer, BreadcrumbList and Organization. They can go in separate blocks or in one with @graph. What you should avoid is marking up types that do not describe the page: a FAQ on a page with no questions is exactly what Google pursues as structured data spam.

    What is @graph?

    An array of nodes inside a single block, sharing the @context. It lets nodes link to each other by @id: the Article points to its author, the author to the Organization, and everything travels in one tag. This tool unrolls the graph and reviews each node separately, which is what Google does.

    Do I need @id?

    Not to validate, yes to link. If the same node, the organisation or the author, appears on several pages or in several blocks, giving it a stable @id (a URL with a fragment, like https://yourdomain.com/#organization) lets Google recognise them as one entity instead of counting three different organisations.

    Is what I paste sent anywhere?

    No. Pasted code is analysed in your browser with its own HTML and JSON parsers, which execute nothing it contains. Our function only steps in when you type a URL: it downloads the page, hands it back to you and stores neither the address nor the content.

    How do I test a page that is not published yet?

    By pasting. Open the page in your local or staging environment, copy the whole <script type="application/ld+json"> (or the full page source) and paste it in the second field. The review is identical to the one by URL, except it cannot check that absolute URLs respond.

    Are your rich results not showing?

    It is usually a missing required property or a value that went stale. If you want the JSON-LD to come straight from the data and be checked on every publish, that is what we build.

    We reply within one business dayBogotá · UTC−5

    Message us on WhatsApp (opens in a new tab)