Schema Markup Validator

Validate schema markup before Google sees it. Paste JSON-LD or fetch a live URL: this structured data testing tool checks syntax with exact error lines, then lints required and recommended properties for rich result eligibility.

Fix the common mistakes first
  • Prices are plain numbers. "price": "19.99", never "$19.99" or "1,299.00". The currency belongs in priceCurrency as an ISO code like USD.
  • Dates are ISO 8601. 2026-07-06 or 2026-07-06T09:30:00+02:00, not July 6, 2026.
  • Image URLs are absolute. https://example.com/photo.jpg, not /photo.jpg. Crawlers do not resolve relative paths reliably in JSON-LD.
  • @type is case sensitive. FAQPage, not FaqPage. BreadcrumbList, not Breadcrumblist.
  • One @context per block. "https://schema.org" at the top level, once.

Rich result types and their required properties

A schema validator works in three layers. First the JSON syntax: one stray comma and the whole block is invisible to search engines. Then the vocabulary: a schema.org @context and a recognized @type. Then the type rules, which is where rich results are won or lost. Each rich result type has required properties that gate eligibility and recommended properties that improve how the result looks. This table shows what the validator lints per type.

@typeRequiredRecommendedRich result
Article headline, image, datePublished, author dateModified, publisher, description Article and Top Stories treatment
Product name, image, offers.price, offers.priceCurrency aggregateRating, brand, review, sku Price, stars and stock in the snippet
FAQPage mainEntity: Question items with acceptedAnswer.text nothing extra Expandable questions under the snippet
LocalBusiness name, address telephone, geo, openingHoursSpecification, priceRange Knowledge panel and map results
Review itemReviewed, reviewRating, author datePublished Star rating in the snippet
BreadcrumbList itemListElement: ListItem with position and name item URL on every crumb but the last Breadcrumb trail instead of the raw URL
Organization name url, logo, sameAs, contactPoint Logo and brand knowledge panel
WebSite name, url potentialAction (SearchAction) Sitelinks search box

Subtypes inherit the rules: NewsArticle and BlogPosting are linted as Article, Restaurant and Store as LocalBusiness. Blocks that use @graph arrays or multiple stacked script tags are validated entity by entity, each with its own eligibility verdict.

Schema markup on WordPress: one page, three conflicting blocks

WordPress sites rarely have too little schema. They have too much, from too many authors. The SEO plugin outputs WebSite, Organization and Article blocks. The theme adds its own. A page builder, a review plugin or an FAQ block contributes another copy. The result is duplicate FAQPage markup, two Organizations with different names, and Search Console errors that do not exist anywhere in your own code.

The fix is to validate what actually ships, not what you wrote. Fetch your live URL with this tool and you will see every JSON-LD block on the page, numbered, with its source conflicts laid bare. Pick one plugin as the source of truth, disable schema output in the rest, and re-check until one clean set of blocks remains.

The harder problem is drift: a plugin update quietly changes its markup and nobody re-validates. DevDome Site Health watches every connected site continuously, running uptime probes and a daily page audit, so structural problems surface when they appear instead of when rankings move.

Schema validator FAQ

What is a schema markup validator?

A schema markup validator checks the structured data on a page. It parses your JSON-LD, verifies the syntax down to the exact line and column, confirms the @context and @type, and compares the properties against the requirements for rich results. This tool runs those checks instantly in your browser for the most common types, including Article, Product, FAQPage, LocalBusiness and BreadcrumbList.

What is the difference between required and recommended properties?

Required properties decide eligibility: if one is missing, Google will not show the rich result for that page at all. Recommended properties do not block eligibility, but they feed extra detail into the result, and pages that include them tend to win richer, more clickable snippets. This validator flags missing required properties as errors and missing recommended ones as warnings.

Does valid schema markup guarantee rich results?

No. Valid markup makes a page eligible, and eligibility is all any structured data testing tool can confirm. Google decides per query whether to show the rich result, based on content quality, relevance and whether the markup matches the visible page. Markup that describes content visitors cannot see can earn a manual action, so keep it honest.

Should I use JSON-LD, Microdata or RDFa?

Use JSON-LD. Google explicitly recommends it, it lives in one script block instead of being woven through your HTML attributes, and it is far easier to generate, validate and maintain. Microdata and RDFa still work, but nearly all modern tooling, including this JSON-LD validator, is built around JSON-LD.

Why does Google report duplicate schema on my WordPress site?

Because several plugins output structured data at once. An SEO plugin, a theme, a page builder and a review plugin can each inject their own Organization or WebSite block, and Google sees conflicting duplicates. Pick one source of truth, disable schema output in the others, then validate the live URL here to confirm exactly what remains.

How is this different from Google’s Rich Results Test?

The Rich Results Test is the authoritative check: it renders JavaScript and reflects exactly what Google supports today. This schema validator is the fast iteration loop: paste code before it ships, get exact JSON error lines, and see required and recommended properties per type in one view. Validate here while you build, then confirm the live page with Google before you call it done.

Can I validate schema markup that is not live yet?

Yes. Paste mode validates any JSON-LD straight from your editor or a staging page, no URL needed. You can also paste a full HTML document and the tool extracts every script block of type application/ld+json automatically, the same way it does when fetching a URL.