Skip to content
SEO Madmanby Adam Hafez
Free tool

JSON-LD validator for schema.org structured data

JSON-LD validator: find syntax errors by line and column, then check the fields Google requires for 7 schema types. Free, runs in your browser.

Runs entirely in your browser. Nothing you enter is uploaded, logged or stored.

Nothing you paste here is sent anywhere; it is parsed in your browser only.

    Key takeaways

    • A JSON syntax error is reported with its line and column instead of a generic parse failure.
    • Google states Article and Organization have no required properties, only recommended ones.
    • Google says you must include all required properties for an object to be eligible for enhanced display in Search.
    • FAQPage and HowTo no longer earn a rich result in Google Search even when the markup is valid.
    • Google warns against marking up information that is not visible to the user, which no validator can check from a pasted block.

    What it takes

    • A pasted JSON-LD block, edited directly in the textarea

    More tools

    All of them free, all of them browser-only.

    Browse the tools

    How to use it

    1. 1Paste the JSON-LD blockCopy the contents of the script tag with type="application/ld+json" from the page, not the surrounding HTML.
    2. 2Fix syntax errors firstA missing comma or an unquoted key stops JSON.parse before any structural check can run; the line and column shown point at the failure.
    3. 3Check the detected typeThe validator reads @context and @type from the object and looks up that type in its property table. An unsupported type is named as such rather than silently skipped.
    4. 4Read the property list against the page it describesA property marked missing only matters if the live page actually has that content; do not add a property whose value the page does not show.
    5. 5Treat FAQPage and HowTo results as informationalBoth are flagged as no longer eligible for a Google rich result, so a clean pass on either confirms valid markup, not search visibility.

    Google calls JSON-LD its recommended structured data format, the easiest to implement and maintain at scale. It is also easy to break: one missing comma and the whole block is ignored. This validator catches that first, then checks the block against the properties Google documents for its type, which is a narrower and more useful list than everything schema.org allows.

    What this JSON-LD validator checks

    The validator runs in two passes, in your browser.

    Syntax. The text is run through a strict JSON.parse. On failure it shows the parser’s message, and when the browser reports a character position (as Chrome does) it converts that into a line and column. Nothing else runs until the JSON parses.

    Structure. On valid JSON it checks three things:

    • The top level is a single object, not an array or a bare value.
    • @context is a string containing schema.org. A missing context, or one that is not a string, reads as “missing”.
    • @type is present. If it matches one of seven types, each documented property is listed as present, missing (required) or missing (recommended).
    @typeRequired in this validatorRecommended in this validator
    Articlenoneheadline, image, author, datePublished, dateModified
    Productname, plus one of review, aggregateRating or offersaggregateRating, offers, review
    FAQPagemainEntitynone
    HowToname, stepnone
    Organizationnonename, url, logo, sameAs, contactPoint
    BreadcrumbListitemListElementnone
    Recipename, imageauthor, datePublished, description, prepTime, cookTime, totalTime, recipeYield, recipeIngredient, recipeInstructions, nutrition.calories

    Article and Organization have no required fields because Google says there are none for either. For FAQPage and HowTo, whose Google documentation has been removed, the validator checks a short property list of its own and adds a note that the rich result is gone. Google’s updates log records the HowTo documentation removed on 14 September 2023 and the FAQ documentation removed on 15 June 2026, with the feature “no longer shown” in Search.

    How to read the results

    • Syntax error. Go to the line and column shown. The usual causes are a trailing comma after the last property, a missing comma between properties, or single quotes in place of double quotes.
    • @context or @type shown as a warning. The block parsed but is not recognizable as schema.org markup.
    • missing (required). Google says you must include every required property for the object to be eligible for enhanced display. Fix these before shipping.
    • missing (recommended). A judgment call. Google says fewer, complete and accurate recommended properties beat many badly formed ones, so add only what the page really shows.
    • “Checked against …” names the Google documentation page the property list came from.

    Worked example

    The validator opens with an Article block: a headline, one image URL, datePublished and dateModified in ISO 8601, and an author Person with name and url. It reports “Valid JSON”, @context https://schema.org, @type Article, and all five recommended properties present. Delete the image line and image turns to “missing (recommended)”, not a failure, because Google lists no required Article properties. Change @type to Product instead and you get two required failures: name, and one of review, aggregateRating or offers.

    Common mistakes it catches

    • Trailing commas. Valid in JavaScript, invalid in JSON, and the most frequent reason a block silently fails.
    • Pasting the script tag. The <script> wrapper is HTML, so the parse fails on the first character. Paste only what is inside it.
    • Product markup with no review, rating or offer. Google requires one of the three for a product snippet.
    • Recipe without an image. image is one of only two required Recipe properties.
    • Relying on FAQPage or HowTo for a rich result. The markup is valid but the Google feature is gone.

    What it cannot check is whether the markup matches the page. Google warns against marking up information that is not visible to users, even if accurate. Test the live URL in Google’s Rich Results Test before relying on a result.

    Sources

    1. 1.Understand how structured data works - Google Search CentralPrimary
    2. 2.Article, NewsArticle, BlogPosting structured data - Google Search Central
    3. 3.Product snippet structured data - Google Search Central
    4. 4.Organization structured data - Google Search Central
    5. 5.Recipe structured data - Google Search Central
    6. 6.Breadcrumb structured data - Google Search Central
    7. 7.Latest Google Search documentation updates - Google Search CentralPrimary

    Frequently asked questions

    How do I validate JSON-LD?

    Copy the text inside the page's script type="application/ld+json" tag, without the tag itself, and paste it into the box. The validator parses it as it changes (or when you press Validate), shows any syntax error with its location, then lists which of Google's documented properties are present for the detected @type.

    Does a clean result mean the page is eligible for a rich result?

    No. It means the block parses and carries the properties Google documents for that type. Google says structured data does not guarantee a rich result, and eligibility also depends on policies such as marking up only content visible to users. For FAQPage and HowTo, the rich result no longer exists.

    Why does Article show nothing as strictly required?

    Because Google's documentation says so: "There are no required properties." headline, image, author, datePublished and dateModified are recommended, so the validator marks a missing one as recommended rather than as a failure. Organization works the same way.

    Which types does this check?

    Article, Product, FAQPage, HowTo, Organization, BreadcrumbList and Recipe. A different @type still gets the syntax, @context and @type checks, with a note that no property table exists for it. For JobPosting, use the dedicated JobPosting schema checker.

    Why does my @graph block show @type as missing?

    The validator reads @type from the top-level object only. A block that wraps several entities in @graph has no top-level @type, and a top-level array is rejected outright. Paste each entity as its own object to check it.