Schema markup validator

Checks run in your browser. Validate by URL is the only step that uses ToolPetal's server, which fetches the page as ToolPetalBot and does not store it. This is not Google’s Rich Results Test or Schema Markup Validator, and a pass does not mean the page will get rich results.

ToolPetal loads the page's HTML once, finds every JSON-LD block, and checks each one. Markup added later by JavaScript is not seen.

By Cobra · Last updated

Local checks vs Google's test

This page parses JSON-LD and checks @context, @type, and field rules for several schema.org types. It does not render JavaScript the way Google does and does not apply Google's full rich-result rules. A local pass is necessary but not sufficient.

Use the report box to copy pass/fail lines, fix JSON, then confirm on Google's rich results tool after deploy.

Checking a live page by URL

Paste a page URL under Validate by URL. ToolPetal's server requests that page once as ToolPetalBot/1.0, follows up to 5 redirects, and stops after 8 seconds or 1 MB. Your browser then pulls out every <script type="application/ld+json"> block and runs the same checks on each one, labeled Block 1, Block 2, and so on. The HTML is not stored. A rich result summary below the report lists each type found, the Google feature it maps to, and whether the fields Google requires for that feature are present. FAQPage and HowTo are flagged honestly: Google limited FAQ rich results to well-known government and health sites in 2023 and stopped showing HowTo results the same year.

Worked example: an FAQPage that passes, then fails

A minimal FAQPage with one Question and acceptedAnswer text should pass the FAQ rules. Remove acceptedAnswer and the report shows a FAIL line for that pair. Invalid JSON fails before type rules run.

Limits

Not every schema.org type has deep required/recommended coverage yet. Product, HowTo, and Event rules are expanding on this page over time. Validate by URL reads the raw HTML only. JSON-LD that a tag manager or script adds after the page loads is invisible to it, and microdata and RDFa are not checked.

Worked example: a Product that fails, then passes

Paste this block: {"@context":"https://schema.org","@type":"Product"}. The report shows a required FAIL because name is missing, plus recommended warnings for offers and image. Add "name":"Trail Mug" and the required line passes. Then add "image":"https://example.com/mug.png" and "offers":{"@type":"Offer","price":"18.00","priceCurrency":"USD","availability":"https://schema.org/InStock"} and re-run: the recommended warnings clear too. Google's own Product snippet rules also want offers, a review, or an aggregateRating, so treat the offers warning as important.

Common pitfalls the report catches

FAQ

Is this the same as Google's Rich Results Test?

No. This schema markup validator only runs local checks in your browser: valid JSON, a schema.org @context, a present @type, and type-specific field rules. It does not contact Google and cannot predict rich results.

What does this schema markup validator check?

It parses the pasted JSON-LD, confirms @context contains schema.org, confirms @type is present, then applies extra rules for supported types such as FAQPage, Organization, Article, and BreadcrumbList (and more as coverage grows).

Which schema types have required-field checks?

FAQPage, Organization, Article, BreadcrumbList, Product, HowTo, and Event have required and recommended checks. A pass here is not eligibility for Google rich results.

Does this tool upload my JSON-LD?

No. Pasted JSON-LD is parsed and checked in your browser and is not sent anywhere. Validate by URL is different: ToolPetal's server fetches the public page you name, passes the HTML back to your browser, and does not store it.

Why does my markup pass here but show no rich result in Google?

A local pass only means the JSON is well formed and has the fields this page checks. Google also weighs page quality, whether the content is visible, and whether that rich result type is shown for your site at all. Rich results are never guaranteed.

Should I validate the JSON or the live page?

Both. Validate the JSON here while editing, then use Validate by URL on the deployed page, because templates, minifiers, and CMS plugins sometimes change the markup after you paste it. If your markup is injected by JavaScript, finish with Google's Rich Results Test, which renders the page.

Why does Validate by URL find no JSON-LD on my page?

It reads the HTML the server sends and does not run JavaScript. If a tag manager, a React app, or a plugin adds the markup in the browser, it will not be in that HTML. Some sites also block unknown bots or serve them a challenge page. Google renders JavaScript, so its Rich Results Test may still see markup this page cannot.

What does the rich result summary tell me?

For each schema type on the page it names the Google search feature that type can power, such as Product snippets, Breadcrumbs, or Event, and says whether the fields Google lists as required are present. Types Google supports but this page does not check yet are marked so you know to use Google's tool. It is a quick read, not a promise: Google also weighs page quality and policy before showing any rich result.