All tools

Structured Data Validator & Rich Result Gap Checker

Validate JSON-LD, extract structured data from live pages, and find missing fields that may block Google rich result eligibility.

Paste mode validation runs entirely in your browser — no schema data is sent to CodeAva servers. Fetch URL mode uses a serverless layer to extract JSON-LD blocks from live pages; fetched pages are not archived or stored.

Paste JSON-LD
⌘+Enter to validate
Paste JSON-LD or fetch a URL to start validation

Paste mode validation runs entirely in your browser — no JSON-LD, field values, or URLs are sent to CodeAva servers. Fetch URL mode uses a serverless layer to extract JSON-LD from live public pages. Fetched HTML is not archived or stored. The tool is safe to use with draft JSON-LD and pre-launch URLs that are accessible but not yet widely indexed.

Why valid schema is not the same as rich result eligibility

Syntactically valid JSON-LD is not the same as markup that is aligned with Google's rich result requirements. Schema.org defines a broad vocabulary of types and properties. Google supports a narrower subset of those types for search features — and each supported type has its own set of required or strongly expected properties that must be present for a rich result to be eligible. A JSON-LD block that passes JSON syntax checks and uses valid schema.org property names can still fail Google's eligibility checks if critical fields like image, offers.priceCurrency, or datePublished are missing.

Many SEOs and developers get stuck between these two layers. Schema.org documentation covers the full vocabulary. Google's structured data documentation covers what Google actually uses for search features — and the two are related but not identical. A page can have a perfectly structured Organization block that validates against schema.org and still never produce a rich result, because Organization does not directly trigger a Google rich result snippet. The gap checker makes this distinction explicit for each detected type.

A fast local validator with a live URL extractor is useful in real SEO and development workflows because it catches missing-field gaps before running Google's Rich Results Test. Finding that a Product block is missing offers here takes seconds. Finding it during a post-deployment Rich Results Test review — after a sprint cycle — takes much longer. The fetch-URL mode also lets you extract and inspect structured data from any live page without switching between browser source view, DevTools, and a validator tab.

What is the difference between valid Schema.org and Google Rich Result eligibility?

A JSON-LD block is schema.org-valid if it uses @context: "https://schema.org", declares a recognised @type, and uses property names and value types that schema.org defines for that type. Google rich result eligibility is a higher, narrower bar: the structured data must match the visible page content, the page must meet Google's content policies, Google must currently support a rich result feature for the schema type and context, and required fields defined in Google's own documentation must be present. Passing schema.org validation is a necessary starting point, not a sufficient condition.

Rich result gap cheat sheet

Schema typeRequired / strongly expected fieldsUseful recommended fieldsPractical note
Productname, image, offers (priceCurrency required inside)description, brand, aggregateRating, reviewGoogle Shopping features require a live Offer with price and priceCurrency.
SoftwareApplicationname, applicationCategory, operatingSystem + offers or ratingaggregateRating, offers.priceBoth offers and aggregateRating are strongly expected for visible app snippets.
Article / BlogPostingheadline, image, datePublished, authordateModified, publisher, descriptionImages in 1:1, 4:3, and 16:9 ratios are recommended. Headline max 110 chars.
JobPostingtitle, description, datePosted, hiringOrganization, jobLocationvalidThrough, employmentType, baseSalaryExpired listings without validThrough may continue appearing in Google for Jobs.
Eventname, startDate, location, eventStatus, eventAttendanceModeimage, organizer, endDate, offersVirtual events need eventAttendanceMode: OnlineEventAttendanceMode and a url in location.
FAQPagemainEntity[] (each with name + acceptedAnswer.text)Rich result visibility significantly reduced since 2023. Markup remains valid but visible FAQ results are limited in practice.
OrganizationNo hard-required fields in Google documentationname, url, logo, sameAs, contactPointGuidance-oriented. Useful for Knowledge Panel entity understanding, not a direct rich result trigger.

Adding JSON-LD in React and Next.js

In Next.js App Router, add JSON-LD using a <script> tag with dangerouslySetInnerHTML inside your page component. Derive the schema object from the same data that renders the visible page content to ensure they match — a common cause of Google rejecting structured data is a mismatch between what the markup says and what the page shows.

// app/products/[slug]/page.tsx
export default function ProductPage({ product }) {
  const jsonLd = {
    "@context": "https://schema.org",
    "@type": "Product",
    name: product.name,
    image: product.images,
    description: product.description,
    offers: {
      "@type": "Offer",
      priceCurrency: product.currency,
      price: product.price,
      availability: "https://schema.org/InStock",
      url: `https://example.com/products/${product.slug}`,
    },
  };

  return (
    <>
      <script
        type="application/ld+json"
        dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }}
      />
      {/* page content */}
    </>
  );
}

After deployment, validate the live URL with Google's Rich Results Test to confirm the structured data is detected correctly from the rendered page.

What this tool helps with

Good uses

  • Validating pasted JSON-LD before deploymentcatch JSON syntax errors, missing @context or @type, and Google-critical field gaps before the code ships — without waiting for a post-deployment crawl.
  • Extracting and inspecting structured data from live pagespaste a URL into Fetch mode to see exactly which JSON-LD blocks are in the live HTML source, their detected types, and any validation issues — without digging through DevTools.
  • Diagnosing why structured data is valid but not producing rich resultscheck whether the detected schema type is actually supported for Google rich results, and whether the required fields for that type are present and correctly formed.
  • Preparing code before running Google's Rich Results Testfix critical errors and fill recommended fields using the scaffold helpers, then test the corrected code with Google — reducing validation round-trips.
  • Checking Product, Article, SoftwareApplication, Event, and JobPosting markup for field gapsget type-specific guidance for the schema types most commonly associated with high-value Google rich results and Shopping features.

Limitations to know

  • Guaranteeing rich result appearance from a passing scorethis tool checks for field presence and structure based on Google's documentation. Rich result eligibility also depends on content quality, visible-page-content alignment, Google's content policies, and Google's current ranking of the page. A passing gap check is not a guarantee.
  • JavaScript-rendered structured data extractionFetch URL mode extracts raw JSON-LD from HTML source. Structured data injected via JavaScript after initial render — including some React and SPAs — may not appear in the fetched source. Check the live page with Google's Rich Results Test for authoritative results.
  • Full schema.org vocabulary validationthis tool validates the properties that matter most for Google rich result eligibility, not the complete schema.org vocabulary. For comprehensive schema.org conformance checking, use validator.schema.org.

How to validate and fix structured data

  1. 1

    Paste JSON-LD or switch to Fetch URL mode

    In Paste Code mode, paste raw JSON-LD or a full <script type="application/ld+json"> block. The tool extracts content from script tags automatically if pasted. In Fetch URL mode, enter a live public URL to extract all JSON-LD blocks from the page HTML.

  2. 2

    Review detected types and Google support context

    Each detected @type is listed with a Google support context label: Supported rich result type, Limited visibility, Guidance-oriented, or Not covered. This tells you upfront whether the type can produce a Google rich result at all.

  3. 3

    Work through critical errors first

    Critical errors are the gaps most likely to prevent rich result eligibility. Click any issue to expand the detail. Use 'Add ... scaffold' buttons to copy placeholder structures for missing fields — clearly labelled as scaffolds requiring real values.

  4. 4

    Address warnings and recommendations

    Warnings flag issues that may reduce eligibility or completeness. Recommendations flag fields that improve markup quality and may increase rich result appearance probability without being strictly required.

  5. 5

    Copy the updated JSON-LD and test with Google

    Use 'Copy all JSON-LD' to copy the current parsed output, or 'Test with Google' to open Google's Rich Results Test. Paste the corrected JSON-LD directly or test the live URL after deployment.

Common issues and how to fix them

Structured data passes schema.org validation but fails Google's Rich Results Test

Schema.org validity and Google rich result eligibility are different bars. A Product block without offers.priceCurrency is schema.org-valid (priceCurrency is a schema.org property, not a schema.org required field) but fails Google's product snippet requirements. Focus on the Google-gap analysis layer, not just schema sanity checks.

Malformed JSON in a JSON-LD block

Common causes: unescaped quotes inside string values, trailing commas after the last property in an object or array (invalid in JSON), single quotes instead of double quotes, and unbalanced brackets. Use the Prettify JSON button to reformat, which will expose the parse error location.

Product markup missing offers and priceCurrency

Google requires an Offer object with priceCurrency (ISO 4217 code) for product snippet eligibility. Use the 'Add offers scaffold' button to copy a starter structure, then replace placeholder values with real product data.

Article or BlogPosting missing image or datePublished

Google requires at least one image and a datePublished (ISO 8601 format) for Article rich results. Provide images in multiple aspect ratios (1:1, 4:3, 16:9) for maximum surface coverage. datePublished must match what is visible on the page.

FAQPage markup present but not producing visible FAQ rich results

Google significantly reduced FAQPage rich result visibility after 2023. The markup may be structurally correct, but visible FAQ rich results now appear primarily for authoritative government and health content. FAQPage markup still provides semantic value but should not be the primary rich result strategy.

Organization treated as if it has hard required fields

Google's documentation for Organization is guidance-oriented, not required-field-heavy. Organization markup does not directly produce a rich result snippet on its own. Focus on completeness — name, url, logo, sameAs — for Knowledge Panel and entity understanding purposes, rather than chasing a validation pass.

Frequently asked questions