Schema markup validator

Check every JSON-LD block on a page against the required and recommended properties for its type.

Free, no sign-up, and the whole result is shown. Nothing is stored.

What this checks, and what it does not

The validator fetches the page you give it, pulls out every <script type="application/ld+json"> block, and checks each one against the property table below. It reports three kinds of finding and nothing else:

  • Error — the block is not valid JSON, has no @context or @type, or is missing a property that is required for that type. A required property missing means the markup is not eligible for the rich result it is aiming at.
  • Warning — a recommended property is missing. The markup still works; it says less.
  • Pass — every property in the table is present.

There is no score. A score would need a weighting, and any weighting we put on "missing dateModified" against "missing headline" would be a number we made up. Each finding names the exact type and property instead, so you can fix it directly.

Limits worth knowing. The tool reads the HTML the server returns. Structured data injected by client-side JavaScript after page load will not be seen — which is also true of some crawlers, so a block that only exists after hydration is a real finding, not a false negative. Microdata and RDFa attributes are counted but not validated. Types outside the table below are checked for syntax only, and the report says so rather than guessing at their requirements.

The property table this tool validates against

Required and recommended properties follow Google's published structured data documentation for each rich result type. This is the whole rule set — nothing is applied that is not listed here.

TypeRequiredRecommended
ArticleArticle rich results in search and AI answers.headlineauthor, datePublished, dateModified, image
BlogPostingArticle rich results for blog posts.headlineauthor, datePublished, dateModified, image
NewsArticleArticle rich results for news.headlineauthor, datePublished, dateModified, image
ProductProduct rich results, price and availability.nameimage, description, offers, brand, aggregateRating
OfferPrice and availability inside a Product.price, priceCurrencyavailability, url, priceValidUntil
OrganizationEntity identity — who publishes this site.nameurl, logo, sameAs, contactPoint
LocalBusinessLocal business rich results and map listings.name, addresstelephone, openingHoursSpecification, url, geo
WebSiteSite name and the sitelinks search box.name, urlpotentialAction, publisher
WebPagePage-level identity and freshness.namedescription, url, dateModified, breadcrumb
BreadcrumbListBreadcrumb trail in the result snippet.itemListElement
FAQPageQuestion and answer pairs AI systems quote directly.mainEntity
HowToStep-by-step instructions.name, steptotalTime, supply, tool, image
EventEvent rich results.name, startDate, locationendDate, description, offers, performer, image
RecipeRecipe rich results.name, image, recipeIngredient, recipeInstructionsauthor, cookTime, prepTime, nutrition, aggregateRating
VideoObjectVideo rich results and key moments.name, thumbnailUrl, uploadDatedescription, duration, contentUrl, embedUrl
JobPostingJob listing rich results.title, description, datePosted, hiringOrganizationjobLocation, baseSalary, employmentType, validThrough
SoftwareApplicationSoftware listing, including free web tools.nameapplicationCategory, operatingSystem, offers, url
PersonAuthor identity — the signal behind an expertise claim.nameurl, sameAs, jobTitle, image
ItemListOrdered or unordered list of entities.itemListElementnumberOfItems, itemListOrder
QAPageA single user-submitted question with answers.mainEntity

Why structured data matters for AI answers

A language model reading your page has to work out what is a fact, what is navigation and what is marketing. JSON-LD removes that guesswork: it states, in a machine-readable form, that this string is the author, this one is the publication date, this one is the price. When an assistant assembles an answer and needs to attribute a claim, unambiguous markup is the difference between being quoted with your name on it and being paraphrased without attribution.

The three that do the most work, in order:

  • Organization — establishes who publishes the site. Without it, a model has no stable entity to attach your content to, and your brand name is just a string that happens to recur.
  • Article or BlogPosting with author and dateModified — freshness and authorship are two of the signals that decide whether a page is used as a source or skipped for a newer one.
  • FAQPage — question and answer pairs are the shape an assistant can lift directly. A well-marked FAQ answer is close to ready-to-quote text.

Markup does not make a weak page strong. It makes a strong page legible.

How to fix the common failures

  • Block is not valid JSON. Usually a trailing comma, a smart quote pasted from a document, or an unescaped quotation mark inside a string. The whole block is discarded when this happens — one stray character costs you all the markup on the page.
  • No @context. Every top-level node needs "@context": "https://schema.org". Without it the block is arbitrary JSON, not JSON-LD, and is ignored.
  • Missing author on an Article. Use a nested Person or Organization object with a name and, ideally, a url pointing at a real bio page. A bare string works but carries less.
  • Missing dateModified. Emit it from your CMS, in ISO 8601. Do not hardcode it, and do not bump it on every deploy — a date that always says today tells a crawler nothing.
  • Missing offers on a Product. Nest an Offer with price, priceCurrency and availability. Price without currency is not usable.
  • Markup that contradicts the page. Not something this tool can detect, but worth stating: the values in your JSON-LD must match what a reader sees. Marking up a rating you do not display is a policy violation, not a shortcut.

Questions people ask about this check

My page passes here but Google's Rich Results Test flags it. Why?

Different scope. This tool checks property presence against the documented required and recommended sets. Google additionally checks value formats, image dimensions, and eligibility rules that change per feature and per country. Use this to catch structural problems quickly, then confirm eligibility in Google's own tester.

Should I use JSON-LD, microdata or RDFa?

JSON-LD, in nearly every case. It lives in one block in the head or body rather than being interleaved with your markup, which means it survives template changes and is far easier to generate correctly from a CMS. This tool counts microdata and RDFa items so you know they are there, but validates JSON-LD only.

Does structured data get me cited by ChatGPT or Claude?

Not on its own, and anyone claiming a direct causal link is guessing. What it does is make the facts on your page unambiguous — who wrote it, when it was updated, what entity it is about. That is a prerequisite for being used as a source, not a guarantee of it. The page still has to be worth citing, and the crawler still has to be allowed in, which is a robots.txt question.

How many JSON-LD blocks should a page have?

As many as it has distinct things to describe. One block per entity is fine, and so is a single block with an @graph array. What matters is that each node is complete and that you are not describing the same entity twice with conflicting values.

Do you store the pages I check?

No. The page is fetched, parsed in the request, and the result is returned to your browser. There is no account, no email field and no saved history — the shareable link simply re-runs the check against the same URL.

Where to go next

See Where You Rank in AI Search Results

Get your free AI visibility report in 60 seconds. Track how often ChatGPT, Claude, and Google AI mention your brand—and discover exactly what your competitors are doing to outrank you.