Free tool · no email required
Structured data and AI readiness checker
Paste a product page. The checker reads its structured data the way a crawler does, then scores what a language model could actually answer about the product — 13 checks, five categories, and every weight printed below.
What a structured data testing tool checks
A structured data testing tool reads the machine-readable markup in a page and reports whether it is valid — Google’s Rich Results Test for search features, the schema.org Schema Markup Validator for the vocabulary itself. Valid markup is not the same as useful markup. This checker scores the second question: whether a product page carries enough declared data for a model to answer a buying question about it.
Check a page.
Showing a worked example — a typical Shopify product page with the theme’s own markup and a review app. Illustrative, not a real store. Paste your own source to replace it; everything stays in this browser tab.
View Page Source, not Inspect Element. Inspect shows you the page after your apps have run; source shows you what a crawler gets on first fetch, which is the thing being scored.
Readiness score
56
Thin A model can name the product and little else. It will describe you rather than recommend you.
- Identity and offer 25 / 25
- Product data depth 4 / 25
- Buying qualifiers 0 / 20
- Evidence 11.5 / 15
- Machine readability 15 / 15
A readiness score, not a traffic forecast. It says a model could answer a buying question from this page — not that it will, and not how often you get named. See the limits below.
What to fix — 6 of 13 checks
- Product is named in markup 6 / 6 pass
Daily Greens Powder — 30 servings
- Price and currency 7 / 7 pass
42.00 USD
- Availability 6 / 6 pass
InStock
- Brand 6 / 6 pass
Example Brand
- Itemised specifications 0 / 12 fail
No itemised specs. This is the single biggest gap on most Shopify PDPs.
- Description with substance 4 / 8 partial
9 words. Short descriptions get paraphrased into nothing.
- GTIN or MPN 0 / 5 fail
No GTIN. In Shopify this is the variant barcode field, empty by default.
- Shipping cost and speed 0 / 11 fail
No machine-readable shipping. It lives in a Shopify shipping profile no crawler can read.
- Return window 0 / 9 fail
No return policy attached to the product. It is in a policy page nothing associates with this item.
- Reviews present on the page 8 / 8 pass
4 review elements in the source.
- Rating markup matches what is shown 3.5 / 7 partial
Reviews are on the page but not marked up. Free marks available here.
- Exactly one Product block, and it parses 8 / 8 pass
One Product block.
- Title, description, canonical, one h1 7 / 7 pass
All four present.
How the score is built
13 checks. Each is worth points; a partial pass earns half. The weights sum to 100, and they are defined in one place in the source so the number on screen and the number in the table cannot drift apart.
- 1
Read the markup
Every application/ld+json block, then microdata, then Open Graph tags, then the visible page — in descending order of trust, the same parser the schema generator uses.
- 2
Run each check against a declared value
A check passes on what the page states in machine-readable form, not on what a human can see. That is the whole point: a price only a person can read is not a price a model can quote.
- 3
Weight by what a buying question needs
Specs, shipping and returns carry the most weight because they are what turn a description into a recommendation — and they are the three a Shopify store almost never publishes as data.
- 4
Penalise dishonest markup
A rating marked up with no review content on the page scores zero rather than full marks. It is the shape that earns a manual action, and rewarding it would make the score worse than useless.
The rubric, in full
Published because a score whose method is hidden is a lead-generation gimmick. Score a page against this by hand if you would rather not paste anything.
| Check | Category | Pts | Full marks require |
|---|---|---|---|
| Product is named in markup Is there a product here at all, as far as a machine is concerned? | Identity and offer | 6 | A Product name declared in JSON-LD or microdata, not only in the h1. |
| Price and currency Can a model answer “how much is it?” and “in what currency?” | Identity and offer | 7 | Both offers.price and offers.priceCurrency present. |
| Availability Would a model risk recommending something that is out of stock? | Identity and offer | 6 | offers.availability declared with a schema.org value. |
| Brand Is the product attributed to you, or described without a name attached? | Identity and offer | 6 | brand.name present. |
| Itemised specifications Can the product be matched to a specific requirement, or only described? | Product data depth | 12 | Four or more name/value specs in additionalProperty or a spec table. |
| Description with substance Is there text a model can paraphrase, or only adjectives? | Product data depth | 8 | A declared description of 40 words or more. |
| GTIN or MPN Can this product be matched to the same product sold elsewhere? | Product data depth | 5 | gtin present, or brand and mpn together where no GTIN exists. |
| Shipping cost and speed Can a model say what delivery costs and how long it takes? | Buying qualifiers | 11 | shippingDetails with a rate, a destination country and a transit time. |
| Return window Can a model answer “can I send it back?” without opening a policy page? | Buying qualifiers | 9 | hasMerchantReturnPolicy with a return window in days. |
| Reviews present on the page Is there evidence a model can quote, written by somebody other than you? | Evidence | 8 | Review content rendered in the page source, not loaded later by an app. |
| Rating markup matches what is shown Does the markup claim ratings the page does not display? | Evidence | 7 | aggregateRating present with reviews visible, or absent with none. |
| Exactly one Product block, and it parses Does the crawler have to guess which markup is authoritative? | Machine readability | 8 | One Product JSON-LD block, zero invalid JSON-LD blocks. |
| Title, description, canonical, one h1 Is the page itself well-formed enough to be quoted with a link? | Machine readability | 7 | A title, a meta description, a canonical URL, and exactly one h1. |
Where the weights come from. They are our judgement, not a published standard — no model vendor publishes a required-field list, and no search engine scores pages this way. They encode which fields decide whether a product can be matched to a requirement rather than merely described. Whether a higher score produces more citations is metric to confirm; we will publish that when we have enough before-and-after data of our own to mean it. Checked by hand on 2026-09-09.
The bands
| Score | Band | What it means |
|---|---|---|
| 85–100 | Readable | A model can answer a buying question from the page alone. |
| 65–84 | Mostly readable | The basics are declared; the qualifiers that decide a purchase are not. |
| 40–64 | Thin | A model can name the product and little else. It will describe you rather than recommend you. |
| 0–39 | Not readable | No machine-readable product here. Everything downstream is guesswork. |
What this checker does not do
It does not predict AI traffic. No published research establishes a reliable correlation between structured-data completeness and how often a model names a brand, and we have not measured one ourselves. The score means what it says and nothing more: a model reading this page could answer a buying question about the product. Anyone selling you a number that predicts citations is selling a mechanism nobody has demonstrated.
It does not replace Google’s validators. Run the live URL through the Rich Results Test for search-feature eligibility and the schema.org Schema Markup Validator for vocabulary correctness. This scores completeness, which neither of them measures.
It cannot see anything rendered after load. If your specs, reviews or price arrive by JavaScript from an app, they are not in the source you pasted — and they may not be in what a crawler stores either. When the checker marks reviews missing that you can plainly see, that is the finding, not a bug.
It scores one page. Product data quality is a catalogue problem. A single PDP scoring 90 while the other 400 score 45 tells you about the template somebody fixed by hand, not about the store.
Definitions
- Structured data
- Machine-readable statements about a page’s content, in a shared vocabulary, usually as a JSON-LD block. What crawlers and models read instead of guessing from your copy.
- Rich Results Test
- Google’s tool for checking whether a page qualifies for a search feature. Answers eligibility, not completeness.
- Schema Markup Validator
- The schema.org-hosted validator that replaced Google’s retired Structured Data Testing Tool. Checks the vocabulary is used correctly.
- Readiness score
- Our measure of whether a page carries enough declared data to answer a buying question. A readiness measure, not a performance forecast.
- Answer engine optimisation
- Getting cited inside an AI-generated answer rather than ranked in a list of links. Product data legibility is the part a store controls outright.
Questions about the checker
What happened to Google’s Structured Data Testing Tool?
Google retired it and split the job in two. The Rich Results Test checks whether a page qualifies for a Google search feature; the Schema Markup Validator, hosted by schema.org, checks whether the markup is valid schema.org. Both answer “is this correct”. Neither answers “is there enough here for anything to describe your product accurately”, which is what this checker scores.
My markup validates. Why does this give me a low score?
Because validity and completeness are different questions. A Product block containing a name, an image and a price is perfectly valid and tells a model almost nothing — no specs to match against a requirement, no shipping, no returns, no evidence. Validation asks whether what you wrote is well-formed. This asks whether what you wrote is enough.
Does a high score mean more AI traffic?
We don’t know, and we won’t claim it. Nobody has published a defensible correlation between structured-data completeness and how often a model names a brand, and we haven’t run enough before-and-after measurements of our own to publish one either. What the score does mean is narrower and defensible: a model reading this page could answer a buying question about the product. Treat it as a readiness score, not a forecast.
The checker says my reviews are missing, but I can see them on the page.
Then they are almost certainly being injected by a review app after the page loads. Paste the page source — View Page Source, not Inspect Element — and you will see what a crawler sees on first fetch. If the reviews are not in there, they may never be read. That is a real finding about your stack rather than a quirk of this tool.
Why does it want page source instead of a URL?
The checker runs entirely in your browser, and a browser is not permitted to read another site’s HTML — the request is blocked before it is sent. Pasting the source is the honest version of the same operation, and it has one advantage: you see exactly what we scored. When a fetch service sits behind this page the URL field will start working and nothing else will change.
What score should we be aiming for?
Above 85 puts every question a buyer asks into machine-readable form, and most Shopify stores land in the 40s or 50s because shipping, returns and itemised specs are almost never published as data. The three checks worth the most — specs at 12 points, shipping at 11, returns at 9 — are also the three nobody fills in. If you fix nothing else, fix those.
Is any of this sent to us?
No. The parsing and the scoring happen in this tab. There is no endpoint behind the page, nothing is logged, and no email stands between you and the result.
Related
Find out what you’re losing.
Before you commit to anything, we tell you exactly what you’re losing and what it costs to stop it. Two weeks. Fixed fee. Credited in full against any build you go ahead with.
- Fee
- $1,500–$3,000, fixed
- Duration
- Two weeks
- Credited
- In full, against any build
- You supply
- Read access + one 45-minute call