Schema Tool
Extracts every JSON-LD, microdata and RDFa block from a live URL, validates it against schema.org, and shows which rich results the page qualifies for.
Last updated 2026-08-06
Summary#
Schema Tool fetches a live URL, pulls out every JSON-LD block, microdata item and RDFa type on the page, validates each one against schema.org's required and recommended properties, and shows you a preview of the rich result the page qualifies for. It costs nothing.
Purpose#
Structured data is how you tell a search engine what a page is rather than what it says. It is also the difference between a plain blue link and a result with a star rating, a price, a recipe time or an expanded FAQ. Those enhanced results take up more space and earn more clicks at the same ranking position.
The problem is that structured data fails silently. A missing comma makes a block invalid and Google ignores it entirely, with no warning anywhere. A missing required property makes the block ineligible for the rich result you added it for. Nothing on the page looks wrong.
This tool exists to make those silent failures loud. The decision it helps you make is what to add or fix so this page can win an enhanced search result.
Overview#
You give it a URL. Metric Vault fetches the page with a normal browser user-agent — many sites reject bot requests, which used to make pages look empty — and falls back to a Googlebot user-agent if that fails.
From the returned HTML it extracts three kinds of structured data: JSON-LD <script> blocks, microdata (itemscope / itemtype) and RDFa (typeof / vocab). Each JSON-LD block is parsed as JSON, and every @type inside it is collected recursively — through @graph containers, arrays and nested objects, so a type buried three levels deep is still found.
Each node is then validated against a rule table covering 20 common schema types. A missing required property is an error; a missing recommended property is a warning. And if a page has no structured data at all but is clearly built with a JavaScript framework, the tool says so instead of pretending the page is empty.
Benefits#
- Finds every type, however nested.
@graph, arrays and nested objects are all walked. - Real validation, not just detection. Required and recommended properties are checked per type.
- Honest about what it cannot see. A blocked fetch and a JavaScript-rendered page are reported as themselves, never as "no schema".
- Shows the payoff. A Google search preview per detected rich-result type.
- Free on every plan, with the raw JSON of each block available to copy.
Use Cases#
- Before publishing a product or article page. Confirm the block you added parses and carries every required property.
- Chasing rich results you are not getting. The page has FAQ markup but no FAQ result; this tells you which required property is missing.
- After a CMS or plugin update. Schema plugins change output silently, and invalid JSON is one deploy away.
- Copying what works. Run it on a competitor's page that has star ratings in the results and see exactly which types and properties they use.
- Auditing a template. One product page tells you about every product page.
Requirements#
- A signed-in Metric Vault account.
- Any plan, including Free.
- A publicly reachable URL. Private, internal and loopback hosts are refused.
- No credits, no integration, no ownership check.
Permissions#
| Your situation | What you see |
|---|---|
| Signed out | Please sign in to run this tool. in the result area |
| Free plan | The tool runs normally — it is one of the zero-credit technical tools |
| Any paid plan | The tool runs normally |
| Over the hourly fair-use limit | Hourly fair-use limit reached (100 light-tool calls/hour)… |
No role restriction applies. See Roles and what each can do.
Cost#
0 credits. The button reads Validate Schema · FREE. The run never touches your monthly credit allowance and counts only toward the fair-use limit of 100 light-tool calls per hour. See How credits work and What you get on Free.
There is no result cache and no "You already ran this" prompt — every run fetches the page again, so you can validate a fix the moment you deploy it.
Navigation Path#
Dashboard → Site Health → Schema Tool
Inputs#
| Field | Accepts | Required | Default | Validation | Notes |
|---|---|---|---|---|---|
URL field (placeholder e.g. https://nike.com/product) | A full page URL, or a bare domain | Yes | Empty | Empty input returns Enter a value first. https:// is added if omitted. Private and loopback hosts are refused | Give it the page type you want to validate — a product page, not the home page |
| See example | — | No | — | — | Renders a stored sample report at no cost |
Step-by-Step Guide#
- Open
Dashboard → Site Health → Schema Tool. - Optionally click See example for a free preview of the report.
- Paste the page URL into the field marked
e.g. https://nike.com/product. - Click Validate Schema · FREE, or press
Enter. - Read the Structured-Data Verdict, then Key Findings.
- Work down Recommended Next Steps, which names each missing property explicitly.
- Open All JSON-LD Blocks to see the raw markup of any block that failed.
- Export from the row at the top of the screen: Export PDF, Export Excel, Export CSV, Export JSON or Share public link.
Reading the Results#
The KPI tiles.
| Tile | Shows | What good looks like |
|---|---|---|
| Total Schemas | JSON-LD blocks found on the page | At least 1; most well-marked-up pages have 2-4 |
| Valid | Blocks that parsed as valid JSON | Equal to Total Schemas |
| Issues | Blocks that failed to parse | 0 — an invalid block is ignored entirely by Google |
| Rich-Result Types | Detected types that can produce an enhanced result | 1 or more, matching what the page is |
Structured-Data Verdict. One of four headlines, with a sentence naming the counts and the types found:
- No structured data found — zero JSON-LD blocks. Rich-result eligibility is lost entirely.
- Invalid JSON-LD detected — at least one block failed to parse. Google ignores invalid blocks completely, so this is as bad as having none.
- Rich structured data — three or more types detected, all valid.
- Basic structured data — valid markup, but only one or two types.
Key Findings. The specific observations, tone-coded. The ones that matter most:
- "No JSON-LD blocks. Search engines fall back to weaker signals; rich-result eligibility is lost."
- "*N* block(s) contain invalid JSON — Google ignores them entirely."
- "No high-value primary types (Article/Product/LocalBusiness/FAQ/HowTo etc.). Rich snippets unlikely."
- "Primary type(s) present: X — eligible for rich results."
- "*N* required-property error(s): …" — each written as
Product is missing required property "name". - "*N* recommended field(s) missing: …" — each written as
Product is missing recommended property "aggregateRating". - Microdata and RDFa types, listed separately when present.
Two special findings deserve attention because they change how you read everything else:
- Blocked fetch: "The page returned HTTP N, so its HTML could not be read. This is usually bot protection on the site, not missing structured data." Every count below it will read zero and none of them mean anything.
- JavaScript-rendered: "No structured data in the initial HTML, but the page is JavaScript-rendered — schema may be injected client-side. Confirm in Google Rich Results Test, which renders JS." Your markup may be perfectly fine; this tool reads the HTML as delivered, before scripts run.
Recommended Next Steps. A numbered list built from the findings — fix invalid JSON, add a primary type, add each named missing required property, add recommended fields, and validate every change in Google's Rich Results Test before deploying.
Rich-Result Types You Could Add. The types that can produce an enhanced result and are not yet on the page: Product, Article, NewsArticle, BlogPosting, FAQPage, HowTo, Recipe, Event, Course, VideoObject, LocalBusiness, BreadcrumbList and SoftwareApplication. Only add what the page genuinely is — marking a blog post as a Product is a manual-action risk, not a shortcut.
Detected Schema Types. Every type found, color-coded, with primary types (the ones search engines act on) distinguished from supporting ones.
Google Search Preview. A mock search result per rich-result type detected, built from your real values — a Product preview shows your product name, price and rating; an Article preview shows your headline. This is what the markup buys you.
All JSON-LD Blocks. Each block in order with its index, whether it parsed, the types inside it, its item count, its errors and warnings, and the full raw JSON formatted for reading. When a block is invalid the parse error is shown as Invalid JSON: … with the message from the parser, which usually points at the character that broke it.
The validation rules. Required properties are errors, recommended ones are warnings:
| Type | Required | Recommended |
|---|---|---|
| Article / NewsArticle / BlogPosting | headline | image, datePublished, dateModified, author, publisher |
| Product | name | image, offers, review, aggregateRating, description, brand, sku |
| Offer | price, priceCurrency | availability, url, priceValidUntil |
| LocalBusiness | name, address | telephone, openingHours, geo, priceRange, image, url |
| Organization | name | url, logo, sameAs, contactPoint |
| WebSite | name, url | potentialAction |
| BreadcrumbList | itemListElement | — |
| FAQPage | mainEntity | — |
| Question | name, acceptedAnswer | — |
| HowTo | name, step | image, totalTime, supply, tool |
| Recipe | name | image, recipeIngredient, recipeInstructions, author, aggregateRating, nutrition, prepTime, cookTime |
| Event | name, startDate, location | endDate, offers, performer, image |
| Person | name | url, sameAs, jobTitle, image |
| VideoObject | name, thumbnailUrl, uploadDate | description, duration, contentUrl |
| Review | reviewRating, author | itemReviewed, datePublished |
| AggregateRating | ratingValue | reviewCount, ratingCount, bestRating |
| Course | name, description | provider |
| SoftwareApplication | name | operatingSystem, applicationCategory, offers, aggregateRating |
Examples#
Example: You validate a product page. Total Schemas 3, Valid 2, Issues 1, Rich-Result Types 2. The verdict is Invalid JSON-LD detected. Key Findings show Invalid JSON: Unexpected token } in JSON at position 412 on block 3, plus Product is missing required property "name" and two recommended-property warnings. The Google Search Preview shows a Product result with a price but no star rating, because aggregateRating is among the missing recommendations. Fixing one stray brace and adding two properties turns a plain link into a rich product result.
Screenshots#
Tips#
- Validate one page of each template rather than every page — schema is generated by templates, and the results repeat.
- Copy the raw JSON from All JSON-LD Blocks straight into a ticket; it is the exact markup that shipped.
- Fix invalid blocks before adding new types. An unparseable block contributes nothing, so extending it is wasted work.
- If the page is JavaScript-rendered, confirm with Google's Rich Results Test, which executes JavaScript before checking.
Organization,WebSiteandBreadcrumbListbelong on essentially every page. They are the cheapest structured data you will ever add.
Best Practices#
- Prefer JSON-LD over microdata and RDFa. It is what Google recommends, it lives in one block, and it does not entangle your markup.
- Fill the recommended properties, not just the required ones. Required makes a block valid; recommended is usually what makes the rich result actually appear.
- Only mark up what is genuinely on the page. Structured data that does not match the visible content is a manual-action risk.
- Re-validate after every CMS, theme or plugin update.
- Keep one block per entity and use
@graphwhen a page describes several things — the tool walks@graphcorrectly.
Common Mistakes#
- Assuming valid means eligible. A valid block missing a required property is still ineligible for its rich result. Read the errors, not just the Valid tile.
- Reading a blocked fetch as "no schema". If the page returned a non-200 status, every count is meaningless until you can fetch the page.
- Ignoring the JavaScript-rendered warning. Your schema may exist and simply arrive after the HTML does.
- Marking up content that is not visible. Prices and ratings in schema must match what a visitor sees.
- Adding a fourth type instead of fixing the invalid first one. Google ignores the invalid block entirely, so it is a zero, not a partial credit.
Limitations#
- No JavaScript rendering. The page is fetched, not rendered. Client-side schema is detected only as a warning that the page is framework-built.
- 20 types are validated. Types outside the rule table are detected and listed, but their properties are not checked.
- Microdata and RDFa are detected, not validated. Only their types and item counts are reported.
- One page per run. There is no bulk mode.
- Each raw block is shown up to 60,000 characters, then truncated.
- This is not Google's validator. Google's Rich Results Test is the final authority on eligibility; use this to find and fix problems quickly, and Google to confirm.
Troubleshooting#
| Symptom | Likely cause | Fix |
|---|---|---|
Enter a value first. | The URL field is empty | Paste a URL and run again |
Please sign in to run this tool. | Session expired | Sign in again — see I cannot sign in |
| Everything reads zero and a blocked note appears | The site returned a non-200 status, usually bot protection | Open the URL in a browser to confirm it loads, then re-test; a Googlebot user-agent is already tried automatically |
| "the page is JavaScript-rendered" warning | Your schema is injected client-side | Confirm in Google's Rich Results Test, or render schema server-side |
A block shows Invalid JSON: … | A syntax error in the block | Fix at the character position named in the message, then re-run |
| Types detected but no Google Search Preview | The detected types are not rich-result types | Add a primary type from the Rich-Result Types You Could Add list |
Schema check failed: … | The host is unreachable | Confirm the domain resolves publicly |
Hourly fair-use limit reached (100 light-tool calls/hour)… | Over 100 zero-credit calls this hour | Wait for the next hourly reset |
FAQs#
Does this cost credits? No. It is one of the zero-credit technical tools and runs on every plan, including Free.
It says I have no structured data, but I installed a schema plugin. What is wrong? Most likely the plugin injects schema with JavaScript. This tool reads the HTML as delivered, so client-side schema is invisible to it — and it will tell you when it detects a JavaScript-rendered page. Confirm with Google's Rich Results Test, which renders JavaScript.
What is the difference between an error and a warning here? An error is a missing required property — the block cannot produce its rich result. A warning is a missing recommended property — the block is valid but weaker, and often will not earn the enhanced result in practice.
Will valid schema make me rank higher? Structured data is not a ranking factor by itself. What it changes is how your result looks: stars, prices, FAQs and breadcrumbs take more space and earn more clicks at the same position.
How does it handle @graph? It walks it. Types nested inside @graph, inside arrays and inside other objects are all collected and validated, which is why the type count here can be higher than a naive parser reports.
Should I use JSON-LD, microdata or RDFa? JSON-LD. The tool detects all three, but JSON-LD is what Google recommends and the only one it validates property-by-property here.
See also
Was this article helpful?
Thanks — feedback noted for the docs team.