In beta. Limited places.Open to everyone in Q1 2027

↑↓ to move · Enter to open · Esc to close

Structured data

Structured data coverage of a product page

The structured data coverage of a product page is how many of the Product and Offer properties Google lists for merchant listings its JSON-LD actually carries. This tool counts them: paste the page's code and it tells you which required and which recommended properties are there and which are missing. It counts presence, not correctness. It runs in your browser: nothing you paste leaves this page.

Written by
Reviewed by
Published 9 min read

This check runs in your browser, so it needs JavaScript. Nothing you paste leaves this page.

What the check looks for

The Product and Offer properties Google lists for merchant listings, with the level Google gives each. Google Search Central: merchant listing structured data, accessed .

PropertyLevel
Product.nameRequired
Product.imageRequired
Product.offersRequired
Product.descriptionRecommended
Product.brandRecommended
Product.gtinRecommended
Product.mpnRecommended
Product.skuRecommended
Product.categoryRecommended
Product.colorRecommended
Product.sizeRecommended
Product.materialRecommended
Product.patternRecommended
Product.audienceRecommended
Product.aggregateRatingRecommended
Product.reviewRecommended
Product.inProductGroupWithIDRecommended
Product.isVariantOfRecommended
Offer.priceRequired
Offer.priceCurrencyRequired
Offer.availabilityRecommended
Offer.itemConditionRecommended
Offer.hasMerchantReturnPolicyRecommended
Offer.shippingDetailsRecommended
Offer.priceValidUntilRecommended
Offer.urlRecommended
Takeaway:

Key takeaways

  • The tool counts how many of the Product and Offer properties Google lists for merchant listings a product page's JSON-LD carries: 5 required and 21 recommended.
  • It counts presence, not correctness: a price that isn't the one on the page, or a rating nobody can see, still counts as "Yes".
  • Merchant listings ask for an Offer, not an AggregateOffer, and a price above zero. The tool warns you about both.
  • A recommended property the shopper can't see on the page shouldn't be marked up: Google asks that structured data be a true representation of the page.
  • It only reads what you paste. It doesn't know what Google saw, or whether JavaScript adds the markup after the page loads.

This tool measures the structured data coverage of a product page: how many of the Product and Offer properties Google lists for merchant listings its JSON-LD carries, and which ones are missing. It's for anyone who runs a store, or runs one for a client from an agency, and wants to know in a minute whether a page's markup has the minimum and how much of the recommended set. It counts presence, not correctness: it tells you whether a property has a value, not whether that value is true.

It all happens in your browser. The tool doesn't download your store or send what you paste anywhere: it reads the text you give it and nothing else.

How to use it

  1. Open the live product page, not your platform's admin, and look at its source: "View page source" in the right-click menu, or view-source: in front of the URL. Select all and copy it.
  2. Paste it into the box. The whole page source works, and so does just the contents of one JSON-LD block. If what you paste starts with <, the tool treats it as HTML and reads every <script type="application/ld+json"> it finds; if not, it treats it as a single JSON block.
  3. Press Check. If you'd like to see a result first, "Load an example" fills the box with a fictitious product page: a linen shirt with the required properties, the brand, the GTIN and the availability. It comes out at 5 of 5 required and 3 of 21 recommended.
  4. Read one block per product. If the page has several Product nodes, each gets its own count and its own table, up to twenty.

If the source has no JSON-LD block and other tools do show structured data for your page, JavaScript is most likely adding it when the page loads. In that case, copy the rendered page (developer tools, Elements, right-click the <html> element, Copy outerHTML) and paste that here. What changes between the two versions, and why it matters to a crawler, is in the guide what an AI crawler sees in your store and in the What an agent sees tool.

How to read the result

Each product's heading is "Product 1", "Product 2" and so on, followed by the node's name. The tool looks for Product nodes anywhere in what you paste: on their own, inside an @graph, or as variants inside a ProductGroup with hasVariant, which is how Google asks you to group product variants.⁠[1]Google Search Central. Product variant (ProductGroup, Product) structured data If a property points to another node by its @id identifier, for example "offers": {"@id": "#offer"}, the tool follows the reference to the node that defines it, as long as that node is in what you pasted.

The count line reads "Required: 5 of 5. Recommended: 3 of 21.", or whatever your numbers are. There are five required properties: three on the product and two on the offer. There are twenty-one recommended ones, and the full list is in the reference table under the tool, "What the check looks for".

The table has one row per property, with its level and a "Found" column. A "No" on a required property is marked as a failure; on a recommended one, as a warning. A property counts as present if it has any value at all: an empty string (""), a null or an empty list count as missing. That's what happens when a theme prints "gtin13": "" because the product's field was never filled in.

Messages without a table tell you why there's no count: there's no JSON-LD in what you pasted; there is JSON-LD but no Product node, and without one nothing on the page describes the product to a machine; or a block can't be read, and the tool shows you the JSON parser's error, which is usually an extra comma or an unclosed quote. The other blocks are still read.

Two warnings that sit above the table

There are two cases where an offer that is present still doesn't work for merchant listings, and the tool flags each with its own warning:

  • The offer is an AggregateOffer. Schema.org defines it for a product with several offers, for example the same pair of shoes sold by different merchants.⁠[2]Schema.org. AggregateOffer Product snippets accept an Offer or an AggregateOffer, but merchant listings require an Offer, because whoever marks up the page has to be the one selling the product.⁠[3]Google Search Central. Merchant listing (Product, Offer) structured data An AggregateOffer usually carries lowPrice and highPrice instead of price, so the price row also comes out as "No".
  • The price is missing or zero. Unlike product snippets, merchant listings require a price above zero.⁠[3]Google Search Central. Merchant listing (Product, Offer) structured data The tool warns you if the price isn't there, if it's zero or if it isn't a number, like a price written with its currency sign inside it. Schema.org wants the currency separately, in priceCurrency, and a period as the decimal separator.⁠[4]Schema.org. Offer The tool accepts a decimal comma so you don't get a warning you don't need, but the correct form is "29.90".

If offers is a list of offers, the tool only looks at the first one.

The Product and Offer properties it counts

The list comes from Google's documentation for merchant listings, which separates what is required from what is recommended.⁠[3]Google Search Central. Merchant listing (Product, Offer) structured data

Node Required Recommended, as the tool counts them
Product name, image, offers description, brand, gtin (or gtin8, gtin12, gtin13, gtin14, isbn), mpn, sku, category, color, size, material, pattern, audience, aggregateRating, review, inProductGroupWithID, isVariantOf
Offer price, priceCurrency availability, itemCondition, hasMerchantReturnPolicy, shippingDetails, priceValidUntil, url

Three details from the same source. The price and the currency can go inside priceSpecification instead of directly on the offer, and the tool accepts both forms; if they're in both places, Google uses offers.price. The currency is a three-letter ISO 4217 code.⁠[3]Google Search Central. Merchant listing (Product, Offer) structured data For product snippets Google only recommends it, but for merchant listings it's required.⁠[5]Google Search Central. Product snippet (Product, Review, Offer) structured data And for the brand, Google asks for its name, brand.name, and only one; the tool accepts the brand row with any value.⁠[3]Google Search Central. Merchant listing (Product, Offer) structured data

Some of Google's recommended properties the tool deliberately leaves out, because they only apply to some catalogs and would pull down every store's score:

  • hasAdultConsideration, for adult products. Note: if you sell products of that kind, Google says you must use it to label them, even though it's listed as recommended.⁠[3]Google Search Central. Merchant listing (Product, Offer) structured data The tool doesn't check for it.
  • hasCertification, for certifications such as energy efficiency labels.⁠[3]Google Search Central. Merchant listing (Product, Offer) structured data
  • subjectOf, for a 3D model of the product.⁠[3]Google Search Central. Merchant listing (Product, Offer) structured data

It also leaves out validFrom and validThrough, the dates a price starts and ends, which Google also recommends on the offer.⁠[3]Google Search Central. Merchant listing (Product, Offer) structured data

Google asks that structured data be a true representation of the page's content, and that you don't mark up what the reader can't see.⁠[6]Google Search Central. General structured data guidelines That decides how to read the recommended column: fill in a recommended property if the page shows it. If your page shows no ratings, the "No" next to aggregateRating is the right answer, and the fix is not to invent an average for the markup. The same goes for the size of a product that doesn't come in sizes.

What Google does say is that the more recommended properties you provide, the higher the quality of the result for the user.⁠[6]Google Search Central. General structured data guidelines So the column is for finding what your page already shows and the markup doesn't say: a GTIN that's in your admin and the theme doesn't publish, an availability the page displays and the offer doesn't carry, a return policy that exists but isn't marked up.

What this tool can't tell you

  • Whether the values are true. A price from two sales ago counts as present. Comparing the markup with what the shopper sees, property by property, is the step no tool does, and it's explained in the guide to auditing a product page.
  • Whether each value's format is valid. It doesn't check dates, currency codes, availability values or check digits. For GTINs there's the GTIN validator.
  • What Google saw. The tool reads what you paste. What Google found the last time it indexed the page, including rich results, is in the URL Inspection tool in Search Console, which also shows the code of the crawled page.⁠[7]Search Console Help. URL Inspection tool
  • What a variant inherits. Google lets you put the properties all variants share, such as the brand or the reviews, on the ProductGroup.⁠[1]Google Search Central. Product variant (ProductGroup, Product) structured data The tool counts each Product separately, so a variant without its own brand comes out as "No" even if the group has one.
  • Markup that isn't JSON-LD. It doesn't read microdata or RDFa.
  • Whether Google will show it. Having the required properties makes a page eligible for a rich result, not guaranteed one: Google doesn't promise it even when the markup is correct.⁠[6]Google Search Central. General structured data guidelines The difference between markup that is valid and markup that is live is in validate vs. verify.

If a page's coverage dropped after a theme change or a new app, the JSON-LD diff shows you which property disappeared.

What we tested

Tested on: three product pages, the platform and theme of each, date.

Page Platform and theme Required Recommended Warnings Rich Results Test
1
2
3

Sources

  1. [1] Google Search Central. Product variant (ProductGroup, Product) structured data. Accessed . ↑ ↑
  2. [2] Schema.org. AggregateOffer. Accessed . ↑
  3. [3] Google Search Central. Merchant listing (Product, Offer) structured data. Accessed . ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
  4. [4] Schema.org. Offer. Accessed . ↑
  5. [5] Google Search Central. Product snippet (Product, Review, Offer) structured data. Accessed . ↑
  6. [6] Google Search Central. General structured data guidelines. Accessed . ↑ ↑ ↑
  7. [7] Search Console Help. URL Inspection tool. Accessed . ↑

Change history

  • First English version.

Other questions

What's the difference between merchant listings and product snippets?
They are two Google experiences built on the same Product markup. Merchant listings are for pages where the customer buys from you, and they ask for more: an Offer, not an AggregateOffer, and a price above zero, where product snippets accept both. This tool counts against the merchant listings list, because that is the one that applies to a store.
Do I need to hit 21 of 21 recommended?
No. The recommended properties are the ones Google knows how to use when they exist, not a to-do list. Google asks that the markup be a true representation of the page and that you don't mark up what the reader can't see. So a T-shirt with no visible reviews doesn't carry aggregateRating, and a cable doesn't carry a size. Fill in the ones your page really shows.
Why can't the tool find the JSON-LD on my product page?
There are three usual causes. JavaScript adds the markup after the page loads, so it isn't in the source: copy the rendered page from the developer tools instead. The theme uses microdata or RDFa instead of JSON-LD, which this tool doesn't read. Or the block has a syntax error, like an extra comma, and the tool shows you the error instead of the count.

Make your catalog easy for bots to read

Clione fills every product page with what bots read best: the JSON-LD graph with its structured data, the meta description and the FAQs. You review and press Push; then we check your live store so it all stays published.