Is your structured data actually valid?
Structured data is how Google and AI assistants read a product page. A theme update or a custom template can strip it without anything visibly breaking, and you find out weeks later when listings vanish.
On a store it fetches a real product page and parses its JSON-LD, including ProductGroup markup where variants carry the offer. On any other site it reads your own pages and reports the JSON-LD that is there. Nothing is stored.
How this check works
Shipwork fetches pages from outside your network and parses every JSON-LD block. On a Shopify store it goes further, reading the real product page and reporting missing fields: name, image, price, priceCurrency, availability, shippingDetails and hasMerchantReturnPolicy, including ProductGroup markup with nested hasVariant offers that simpler checkers miss. On any other site it reports the types present and the ones a page of that kind should carry.
What the structured data check reads
Shipwork fetches public pages and parses their JSON-LD blocks. On a Shopify store it reads a real product page and checks Product or ProductGroup markup, including variants nested under hasVariant. It checks whether expected product fields are present: name, image, description, offer, price, currency, availability and brand, plus shipping details and return policy on offers. On other sites it reports the structured data types it finds and whether expected types are present for the page kind.
The check reads raw HTML returned by the public page. It does not promise that Google has indexed the markup or that a result will be eligible for a particular rich feature. Eligibility depends on the current search feature requirements and other signals, and Google may choose not to show enhanced results even when structured data is valid.
- Whether JSON-LD is present and valid JSON.
- Product/ProductGroup types, including nested variant objects.
- Presence of relevant name, image, description, offer, price, currency, availability and brand data.
- Offer shippingDetails and hasMerchantReturnPolicy fields.
How to read schema findings
An invalid JSON-LD block cannot be parsed as structured data. A missing Product or ProductGroup on a product page means the check did not find the product type it expects. Missing offer, price or currency is a core completeness problem; missing availability, brand, shipping or return details can limit how much useful listing information is available. Read the finding’s page URL and message before editing: the issue may be on one template or product rather than the whole store.
ProductGroup is not an error simply because variants exist. Shopify themes may put Product objects under hasVariant, with offer data on a variant. Shipwork traverses nested data and reads fields from variants when needed. If another validator reports no Product while this check sees ProductGroup, compare what each tool expects before replacing valid variant markup.
- Fix JSON syntax errors first, because parsers ignore invalid blocks.
- Check the named product page’s rendered HTML and identify which app or template emits the block.
- Compare markup values with the price, inventory and product facts customers actually see.
Fix missing or invalid Product JSON-LD
Edit the theme or the app that owns the product markup; avoid adding a second competing Product block without first checking what already renders. Keep the structured data synchronized with the visible product page. For example, do not publish a price in JSON-LD that differs from the price the customer can select. Use valid JSON with quoted keys and strings, and make sure the block is inside a script element with the JSON-LD type.
- A minimal shape is
<script type="application/ld+json">{"@context":"https://schema.org","@type":"Product","name":"Blue shirt","image":["https://example.com/blue-shirt.jpg"],"offers":{"@type":"Offer","price":"29.00","priceCurrency":"USD","availability":"https://schema.org/InStock"}}</script>. - Use the correct currency and current availability; do not copy this example’s values unless they describe the actual product.
- On a variant product, confirm each selectable variant’s own price and availability are represented consistently.
- After updating the source, rerun the check and inspect the affected page’s returned HTML.
Use schema checks alongside product checks
Structured data describes page content in a machine-readable format. It is separate from a Merchant Center product feed and separate from whether Google can fetch the URL. A complete JSON-LD block cannot repair a broken destination or make inaccurate product data correct. Likewise, a clean feed report does not establish that the page emits valid schema.
Use this checker after theme updates, when rich results disappear, or when a product template has been customized. Then compare with Google’s current structured data documentation and Search Console enhancement reports for feature-specific validation. Those reports reflect Google’s processing; this tool only checks the markup and fields it fetches.
- Feed check: shopper-visible product data and common catalogue issues.
- Product page check: response reachability for sampled product URLs.
- Site audit: markup among broader site checks.
Errors this check finds, and their fixes
- No Product markup found: Why your product page has no Product schema, even on a modern theme
- Missing field 'hasMerchantReturnPolicy': Why Search Console reports hasMerchantReturnPolicy missing, and what to do
- Missing field ‘shippingDetails’: Why shippingDetails is reported missing and whether it matters
- Merchant listings structured data issues: What the "Merchant listings" report and email mean, and which fields to add first