Structured Data
Google Structured Data for Ecommerce Product Pages
A practical ecommerce product-page guide to Product, Offer, Review, Breadcrumb, variant, shipping, and return structured data for Google Search and AI shopping readiness.

Google structured data for ecommerce product pages should make the sellable product obvious: what the product is, what it costs, whether it is available, which reviews are visible, and how the page fits into the catalog.
For ecommerce SEO, structured data is not decoration. It is a consistency layer between the visible product page, merchant feeds, reviews, variants, shipping promises, return policies, and the product facts that search systems can safely reuse.
Core schema types for ecommerce

Core schema types for ecommerce
| Schema type | Use it for | Common ecommerce mistake |
|---|---|---|
| Product | Product identity, images, brand, description, identifiers | Multiple conflicting Product entities on one product page. |
| Offer | Price, currency, availability, seller, URL | Price or currency differs from visible page content. |
| AggregateRating | Summary rating and review count | Rating markup exists without visible review evidence. |
| Review | Individual review content | Review app renders reviews but does not expose consistent structured data. |
| BreadcrumbList | Page hierarchy and internal context | Breadcrumb schema does not match visible breadcrumbs. |
| MerchantReturnPolicy | Return terms | Policy is generic, missing, or inconsistent with the site policy. |
| OfferShippingDetails | Shipping destination, rate, and delivery time | Shipping promise is visible but not represented in offer data. |
Product and Offer JSON-LD example
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Merino Travel Hoodie",
"image": ["https://example.com/images/merino-hoodie.jpg"],
"description": "A lightweight merino wool hoodie for travel and daily wear.",
"brand": {
"@type": "Brand",
"name": "Example Brand"
},
"sku": "MH-001",
"offers": {
"@type": "Offer",
"url": "https://example.com/products/merino-travel-hoodie",
"priceCurrency": "USD",
"price": "129.00",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition"
}
}Structured data must match visible content
The most important rule is consistency. If the structured data says InStock but the page says Sold out, the markup becomes less trustworthy. If schema says USD but the shopper sees EUR, your store is creating ambiguity.
Consistency checks
- 1Product name matches the primary product identity on the page.
- 2Price and currency match the shopper-facing price.
- 3Availability matches the visible purchase state.
- 4Ratings and reviews match visible review content.
- 5Images in schema are crawlable and representative.
- 6Canonical URL in schema matches the canonical page.
- 7Shipping and return details match policy pages.
How to think about variants
Variant handling is where ecommerce structured data often gets messy. A single product page may include size, color, material, subscription, bundle, or regional pricing differences. Your markup should avoid creating unrelated Product entities that contradict each other.
Reviews and AggregateRating
Review markup is powerful only when it reflects real, visible review content. Review apps can create duplicate or stale markup, especially when themes already output rating data. Audit both the rendered page and JSON-LD sources.
Technical QA case: an empty review form is not a customer rating
A saved WooCommerce demo-page fixture for Bulbasaur contains an empty review state, a rating dropdown and a review textarea. Treating the presence of that widget or its highest selectable value as feedback produced a false review signal. The useful question is whether the page contains actual customer content or a displayed rating, independently of the form and JSON-LD.
<!-- Shortened from the saved QA fixture; not a current live fetch. -->
<p class="woocommerce-noreviews">There are no reviews yet.</p>
<form id="commentform">
<label for="rating">Your rating</label>
<select name="rating" id="rating">
<option value="">Rate…</option>
<option value="5">Perfect</option>
<!-- Other input choices omitted. -->
</select>
<textarea id="comment" name="comment"></textarea>
</form>Separate the evidence before making a recommendation
| Observed evidence | Interpretation | Action |
|---|---|---|
| Empty-state text and a rating form, no customer feedback | A review widget is present; no visible review or rating is established | Do not create ratingValue or reviewCount from input choices. |
| Visible review text or a positive displayed rating, without corresponding review schema | Real feedback may support a review-schema investigation | Confirm the source, product association and current provider data. |
| Review or AggregateRating JSON-LD, without visible feedback | Structured output exists but visible support has not been established | Inspect the rendered widget and provider before publishing or retaining unsupported values. |
| Parent Offer and variation stock values differ | Different product states may have been captured | Compare the same selected variation; do not infer all variants from one parent Offer. |
What we fixed in the scanner
We separated review_widget_present, visible_reviews and visible_ratings from has_review_schema and has_aggregate_rating. Form controls, scripts and hidden review content do not establish visible feedback. The parser uses actual review bodies, positive counts or displayed rating evidence, while keeping the structured-data inventory separate. Schema diagnostics, platform diagnostics and the AI advisor receive those same facts.
For the saved empty-form fixture, both review diagnostics are informational and no review repair issue is generated. Fallback JSON-LD does not invent brand, review or aggregateRating. Positive review and rating fixtures still trigger the relevant missing-schema investigation, so suppressing the false positive does not suppress real evidence.
Reproduce the distinction on your own page
- 1Capture the page state and date. Inspect the rendered Reviews area, including whether customer text, a count or a rating is actually displayed.
- 2Inspect all Product, Review and AggregateRating JSON-LD separately. Do not use an empty widget, an input option or script text as proof of feedback.
- 3Compare the report’s visible evidence with its schema and platform checks. If feedback is absent, it should not recommend manufacturing ratings to fill a field.
- 4If actual review data is missing or stale in your markup, verify the WooCommerce reviews and the plugin or theme emitting the schema. Change only the responsible source, clear the relevant cache and recheck the same URL.
- 5Use Google’s Rich Results Test for supported markup checks, then compare the visible facts again. Passing validation does not guarantee a rich result.
Verification and limits
Our local regression set covers empty forms, real review bodies, positive and zero counts, displayed ratings, hidden content and schema-only ratings. A separate production Free scan of the public Abominable Hoodie demo on October 24, 2026 showed USD 69.00, SKU MH09, no brand and no real review or rating evidence; its schema and platform review checks agreed. The Free AI citation did not invent a brand or rating. These are technical checks, not customer outcomes. Paid JSON-LD was locked and was not verified in that Free session; variation inventory was not independently checked.
Avoid these false fixes
- errorConverting the “Perfect” option in a rating form into a five-star product score.
- errorAdding AggregateRating simply because a WooCommerce Reviews tab exists.
- errorAssuming multiple linked Product nodes are wrong without comparing entity IDs and facts.
- errorPublishing fabricated ratings to remove a scanner warning.
- errorTreating a demo scan, a score or a valid schema test as proof of new sales or search traffic.
BreadcrumbList for ecommerce context
Breadcrumb schema helps explain product hierarchy. It should align with visible breadcrumbs and canonical navigation. For products in multiple collections, choose a stable primary path instead of changing breadcrumbs unpredictably.
Shipping and return data
Shipping and return structured data can help clarify commercial terms. Even when you do not mark up every detail, the visible page should make shipping, returns, and warranty information easy to find.
A practical structured data audit process
Audit flow
- 1Fetch the rendered HTML and extract all JSON-LD blocks.
- 2Identify every Product, Offer, Review, AggregateRating, and BreadcrumbList entity.
- 3Compare schema facts against visible page facts.
- 4Check theme output, SEO app output, review app output, and variant app output separately.
- 5Validate a representative sample across categories, variants, markets, currencies, and out-of-stock states.
- 6Fix contradictions before adding more markup.
Google Rich Results Test vs a product page scanner
How to use both checks
| Tool | Best for | What it can miss |
|---|---|---|
| Google Rich Results Test | Checking whether Google can parse eligible structured data on a URL or code sample. | It does not fully explain whether visible product facts, app output, variant state, reviews, and platform settings agree. |
| ShopGox Product Schema Checker | Comparing Product, Offer, Review, Breadcrumb, metadata, and visible product facts on a live ecommerce product page. | It is a diagnostic layer; final rich-result eligibility still depends on Google's policies, crawlability, page quality, and display decisions. |
FAQ
Which structured data is most important for ecommerce?keyboard_arrow_down
Product and Offer are the foundation. Review, AggregateRating, BreadcrumbList, shipping details, return policies, and variant handling become important as the product page becomes more complex.
Can ecommerce pages have multiple Product schema blocks?keyboard_arrow_down
They can, but it often creates contradictions. A product page should have one clear primary Product entity unless the page intentionally compares multiple products.
Does structured data guarantee rich results?keyboard_arrow_down
No. Structured data helps eligibility and understanding, but search engines decide whether to show rich results based on many factors, including policy compliance and page quality.
Should product schema include reviews?keyboard_arrow_down
Only if the reviews are real, visible, and consistent with the page. Review markup should not invent ratings or expose stale data that users cannot verify.
Does an empty WooCommerce review form count as a review?keyboard_arrow_down
No. A rating dropdown and review textarea are input controls. Confirm actual visible review text, positive review counts or displayed ratings separately from Review and AggregateRating JSON-LD.
Check your product page
Turn this article into a product-page check
Problem this guide helps you solve
Make ecommerce structured data clean enough for search engines and AI systems to trust.
Use the matching ShopGox scanner to verify the issue on a real product URL, then use the related hub and example report for implementation context.
What to check
- ruleWhether structured data describes visible entities and does not introduce unsupported Product, Review, AggregateRating, or Offer claims.
- ruleWhether schema output agrees with canonical, metadata, Merchant Center fields, and the rendered page.
- ruleWhether schema fixes belong in content fields, templates, apps, plugins, or tag manager snippets.
How to verify
- fact_checkRun the Product schema checker before adding or changing JSON-LD.
- fact_checkInspect all Product-like JSON-LD blocks and choose the authoritative source of truth.
- fact_checkValidate a representative page after the fix and keep fake review or offer markup out of proof pages.
Common mistakes
- warningTreating schema as a separate layer instead of a reflection of visible product content.
- warningLetting multiple apps emit competing Product entities.
- warningUsing review, rating, price, or offer markup because it might win rich results rather than because it is visible and accurate.
Related tools
Free Product Schema Checker for Ecommerce Pages
Free Product schema checker: compare JSON-LD with visible price, stock and real review evidence. Find conflicting facts and plan the right template or plugin fix.
Free Shopify Schema Checker for Product Pages
Free Shopify schema checker for Product JSON-LD, theme and app conflicts, review evidence and Offer data. Inspect the public output and locate the layer to fix.
AI Crawler Access Checker for Ecommerce Product Pages
Check product pages for Googlebot, GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot, robots.txt, noindex, sitemap, canonical, and rendered access issues.
Shopify SEO Checker for Product Pages, Variants, Markets, and AI Shopping
Free Shopify SEO checker for product pages, variant schema, theme Liquid, SEO apps, review apps, Markets currency, hreflang, and AI shopping readiness.
AI Shopping Readiness Scanner for Ecommerce Stores
Scan ecommerce product pages for AI search readiness, Product schema, crawler access signals, product attributes, semantic clarity, and structured data consistency.
WooCommerce Product Schema and SEO Checker
Free WooCommerce product-page checker for Product schema, Offer data, empty review forms and plugin conflicts. See evidence and identify where to investigate.
Related posts
How to Add Product Schema in Shopify
A practical Shopify guide to adding Product and Offer JSON-LD without creating conflicts with themes, SEO apps, review apps, variants, or Markets.
Product Page SEO Audit Checklist for Ecommerce
A complete product page audit checklist for ecommerce SEO, structured data, AI shopping visibility, and conversion-focused content.