18 Checks · Code Examples · Free

Ecommerce Product Schema Checklist

Product schema enables rich results in Google Search including price, availability, ratings, and review count. These snippets increase click-through rates.

Why Product Schema Matters

Product schema enables rich results in Google Search including price, availability, ratings, and review count. These rich snippets increase click-through rates and drive more qualified traffic to your product pages.

+30% CTR from product rich results
8 essential product schema fields
90% of stores miss schema fields

The 18 Checks

Every check ranked by impact. Start at the top and work down.

# Check Category Impact Difficulty
1Add Product schema to all productsSchemaCriticalEasy
2Include price and currencyProductCriticalEasy
3Add availability statusProductCriticalEasy
4Include AggregateRatingReviewsCriticalEasy
5Add Review schemaReviewsHighEasy
6Include product imagesProductHighEasy
7Add brand and SKUProductHighEasy
8Include product descriptionProductHighEasy
9Add Offer schema with sellerOffersHighEasy
10Use correct itemConditionProductMediumEasy
11Include shipping detailsOffersMediumEasy
12Add return policy schemaTrustMediumEasy
13Implement BreadcrumbList schemaNavigationMediumEasy
14Use GTIN or MPN identifiersProductMediumEasy
15Add priceValidUntil for salesOffersLowEasy
16Include product variantsProductLowHard
17Validate with Rich Results TestTestingLowEasy
18Monitor schema errors in GSCMonitoringLowEasy

Complete Product Schema JSON-LD

Copy-paste this template and replace the values with your product data. This covers every field Google uses for product rich results.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Nike Air Max 90 - White/Black",
  "image": [
    "https://example.com/photos/1x1/photo.jpg",
    "https://example.com/photos/4x3/photo.jpg",
    "https://example.com/photos/16x9/photo.jpg"
  ],
  "description": "The Nike Air Max 90 stays true to its OG running roots with the iconic Waffle sole, stitched overlays, and classic TPU accents. Fresh colors give a modern look while Max Air cushioning adds comfort.",
  "sku": "NIKE-AM90-WB-001",
  "gtin13": "00884802123456",
  "mpn": "AM90-WB-2026",
  "brand": {
    "@type": "Brand",
    "name": "Nike"
  },
  "offers": {
    "@type": "Offer",
    "url": "https://example.com/nike-air-max-90-white-black",
    "priceCurrency": "USD",
    "price": "129.99",
    "priceValidUntil": "2026-12-31",
    "availability": "https://schema.org/InStock",
    "itemCondition": "https://schema.org/NewCondition",
    "seller": {
      "@type": "Organization",
      "name": "Example Store"
    },
    "hasMerchantReturnPolicy": {
      "@type": "MerchantReturnPolicy",
      "applicableCountry": "US",
      "returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
      "merchantReturnDays": 30,
      "returnMethod": "https://schema.org/ReturnByMail",
      "returnFees": "https://schema.org/FreeReturn"
    },
    "shippingDetails": {
      "@type": "OfferShippingDetails",
      "shippingRate": {
        "@type": "MonetaryAmount",
        "value": "0",
        "currency": "USD"
      },
      "shippingDestination": {
        "@type": "DefinedRegion",
        "addressCountry": "US"
      },
      "deliveryTime": {
        "@type": "ShippingDeliveryTime",
        "handlingTime": {
          "@type": "QuantitativeValue",
          "minValue": 0,
          "maxValue": 1,
          "unitCode": "DAY"
        },
        "transitTime": {
          "@type": "QuantitativeValue",
          "minValue": 2,
          "maxValue": 5,
          "unitCode": "DAY"
        }
      }
    }
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.7",
    "reviewCount": "312",
    "bestRating": "5",
    "worstRating": "1"
  },
  "review": [
    {
      "@type": "Review",
      "reviewRating": {
        "@type": "Rating",
        "ratingValue": "5",
        "bestRating": "5"
      },
      "author": {
        "@type": "Person",
        "name": "Marcus T."
      },
      "datePublished": "2026-07-15",
      "reviewBody": "Most comfortable sneakers I have ever owned. The Air Max cushioning is incredible for all-day wear."
    }
  ]
}
</script>

AggregateRating Implementation

The star rating that appears in search results. Google requires real reviews from real customers — never fabricate ratings.

Required Fields

  • ratingValue — The average rating (e.g. "4.7")
  • reviewCount — Total number of reviews
  • bestRating — Maximum score (default 5)
  • worstRating — Minimum score (default 1)

Common Mistakes

  • Using ratingCount instead of reviewCount
  • Embedding fake reviews to inflate ratings
  • Not updating reviewCount when new reviews arrive
  • Rating value outside best/worst range
"aggregateRating": {
  "@type": "AggregateRating",
  "ratingValue": "4.7",
  "reviewCount": "312",
  "bestRating": "5",
  "worstRating": "1"
}

Review Schema Implementation

Individual reviews appear in product rich results alongside the aggregate rating. Include at least one review for maximum visibility.

Best Practices

  • Include 3-5 of your best reviews
  • Each review needs reviewRating, author, datePublished
  • Use real customer names (or initials)
  • reviewBody should be 1-3 sentences
  • Date must be in ISO 8601 format (YYYY-MM-DD)

What Google Checks

  • Reviews must exist on the page visible to users
  • Rating value must be within best/worst range
  • Author name cannot be empty or generic
  • Schema reviews must match visible page content
"review": [
  {
    "@type": "Review",
    "reviewRating": {
      "@type": "Rating",
      "ratingValue": "5",
      "bestRating": "5"
    },
    "author": {
      "@type": "Person",
      "name": "Sarah K."
    },
    "datePublished": "2026-07-20",
    "reviewBody": "Perfect fit and amazing quality. Runs true to size."
  },
  {
    "@type": "Review",
    "reviewRating": {
      "@type": "Rating",
      "ratingValue": "4",
      "bestRating": "5"
    },
    "author": {
      "@type": "Person",
      "name": "James R."
    },
    "datePublished": "2026-06-10",
    "reviewBody": "Great shoes. Took a few days to break in but now they are super comfortable."
  }
]

Offer Schema: Pricing and Availability

The Offer type controls how price, availability, and seller information appear in search results. This is what triggers the price badge in Google Shopping.

Availability Values

  • InStock — Item is available for purchase
  • OutOfStock — Item is temporarily unavailable
  • PreOrder — Item can be pre-ordered
  • BackOrder — Item is on backorder
  • Discontinued — Item is permanently unavailable
  • LimitedAvailability — Few items remain
  • OnlineOnly — Available online only
  • SoldOut — Item is sold out (deprecated, use OutOfStock)

Item Condition Values

  • NewCondition — Brand new, unused item
  • RefurbishedCondition — Restored to working condition
  • UsedCondition — Previously owned item
  • DamagedCondition — Item has damage

Price Rules

  • Always include priceCurrency with price
  • Use sale price with priceValidUntil
  • Price must match the visible page price
"offers": {
  "@type": "Offer",
  "url": "https://example.com/product-page",
  "priceCurrency": "USD",
  "price": "129.99",
  "priceValidUntil": "2026-12-31",
  "availability": "https://schema.org/InStock",
  "itemCondition": "https://schema.org/NewCondition",
  "seller": {
    "@type": "Organization",
    "name": "Example Store"
  }
}

Product Variants: Size, Color, and More

Each product variant that has its own URL should have its own Product schema with a unique SKU and GTIN. Google treats each variant URL as a separate product.

Variant Approach 1: Separate URLs

When each variant has its own URL (e.g. /product?color=red&size=L), add full Product schema to each page with the variant-specific sku, gtin, and url. This is the recommended approach for Google Shopping.

Variant Approach 2: Single URL

When all variants share one URL, use the hasVariant property to nest variant products inside the parent Product. Each variant still needs its own sku and gtin. Use the variesBy property to list variant dimensions.

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Classic T-Shirt",
  "variesBy": ["https://schema.org/color", "https://schema.org/size"],
  "hasVariant": [
    {
      "@type": "Product",
      "name": "Classic T-Shirt - Red / Large",
      "sku": "TSHIRT-RED-L",
      "gtin13": "0012345678901",
      "color": "Red",
      "size": "L",
      "offers": {
        "@type": "Offer",
        "price": "29.99",
        "priceCurrency": "USD",
        "availability": "https://schema.org/InStock"
      }
    },
    {
      "@type": "Product",
      "name": "Classic T-Shirt - Blue / Medium",
      "sku": "TSHIRT-BLUE-M",
      "gtin13": "0012345678902",
      "color": "Blue",
      "size": "M",
      "offers": {
        "@type": "Offer",
        "price": "29.99",
        "priceCurrency": "USD",
        "availability": "https://schema.org/InStock"
      }
    }
  ]
}

BreadcrumbList for Product Pages

Breadcrumb schema shows the navigation path in search results (Home > Category > Subcategory > Product). This helps users understand where the product sits in your catalog.

Implementation Rules

  • Start with Home page, end with the product
  • Each ListItem needs position, name, and item URL
  • Position is 1-indexed (starts at 1, not 0)
  • URLs must be absolute, not relative
  • Must match the visible breadcrumbs on the page

Common Breadcrumb Mistakes

  • Skipping category levels
  • Using relative URLs instead of absolute
  • Position numbers not sequential
  • Breadcrumb text not matching visible page breadcrumbs
  • Missing the product page itself in the chain
{
  "@context": "https://schema.org",
  "@type": "BreadcrumbList",
  "itemListElement": [
    {
      "@type": "ListItem",
      "position": 1,
      "name": "Home",
      "item": "https://www.example.com/"
    },
    {
      "@type": "ListItem",
      "position": 2,
      "name": "Shoes",
      "item": "https://www.example.com/shoes/"
    },
    {
      "@type": "ListItem",
      "position": 3,
      "name": "Running Shoes",
      "item": "https://www.example.com/shoes/running/"
    },
    {
      "@type": "ListItem",
      "position": 4,
      "name": "Nike Air Max 90",
      "item": "https://www.example.com/shoes/running/nike-air-max-90"
    }
  ]
}

Return Policy and Shipping Details

Google uses hasMerchantReturnPolicy and shippingDetails to show return and shipping info in product rich results. These fields are increasingly important for Google Shopping eligibility.

"hasMerchantReturnPolicy": {
  "@type": "MerchantReturnPolicy",
  "applicableCountry": "US",
  "returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
  "merchantReturnDays": 30,
  "returnMethod": "https://schema.org/ReturnByMail",
  "returnFees": "https://schema.org/FreeReturn"
},
"shippingDetails": {
  "@type": "OfferShippingDetails",
  "shippingRate": {
    "@type": "MonetaryAmount",
    "value": "0",
    "currency": "USD"
  },
  "shippingDestination": {
    "@type": "DefinedRegion",
    "addressCountry": "US"
  },
  "deliveryTime": {
    "@type": "ShippingDeliveryTime",
    "handlingTime": {
      "@type": "QuantitativeValue",
      "minValue": 0,
      "maxValue": 1,
      "unitCode": "DAY"
    },
    "transitTime": {
      "@type": "QuantitativeValue",
      "minValue": 2,
      "maxValue": 5,
      "unitCode": "DAY"
    }
  }
}

How to Validate Product Schema

Always validate your schema before deploying. One syntax error can prevent all rich results from showing.

Step-by-Step Validation

  1. Paste your page URL into Google Rich Results Test
  2. Check for errors (red) and warnings (yellow)
  3. Fix all errors before deploying — warnings are optional
  4. Preview the rich result to confirm it looks correct
  5. After deploying, check Google Search Console Enhancements tab within 2-4 weeks
  6. Monitor for new errors after any page template changes

What Rich Results Test Shows

  • Valid items — Schema is correct and eligible for rich results
  • Errors — Missing required fields or invalid values (blocks rich results)
  • Warnings — Recommended fields missing (does not block rich results)
  • Preview — How your product may appear in search results

Common Product Schema Errors and Fixes

These are the errors we see most often in product schema audits. Fix these first before looking at anything else.

Error Why It Happens How to Fix
Missing "offers" field Product schema without an Offer nested inside Add an Offer object with price, priceCurrency, availability, and url
Missing "priceCurrency" Price is set but currency is not Add priceCurrency: "USD" (or your currency code) alongside price
Invalid availability value Using text like "available" instead of schema.org URL Use full URL: "https://schema.org/InStock"
Missing "image" field No image property on the Product Add at least one image URL. Use an array for multiple images.
aggregateRating without reviews Rating exists but no review objects Add at least one Review object with reviewRating, author, and datePublished
Price mismatch Schema price differs from visible page price Ensure schema price matches the price users see. Dynamic pricing needs server-side rendering.
Relative URLs in offers.url Using "/product" instead of full URL Always use absolute URLs: "https://example.com/product"
Wrong date format Using "Jan 1, 2026" instead of ISO format Use ISO 8601: "2026-01-01" for datePublished, datePublished, priceValidUntil

Product Schema Tools

Free tools to generate, validate, and monitor your product schema markup.

Google Rich Results Test

Validation

Paste a URL or code snippet to check if your product schema is eligible for rich results. Shows preview of how your product may appear in search. The most authoritative validator — if it passes here, Google can process it.

Open Tool

Schema.org Validator

Validation

Official Schema.org validator that checks syntax and structure against the full schema specification. Catches issues Google's tool may miss, like invalid property names or wrong data types. Best for debugging complex nested schemas.

Open Tool

Merkle Schema Generator

Generator

Free tool to generate Product, Review, and other schema types by filling out a form. Outputs clean JSON-LD you can copy directly into your page. Good starting point for teams without developer resources.

Open Tool

Schema.dev

Generator + Validation

Schema markup generator with built-in validation and rich result preview. Supports Product, Offer, AggregateRating, and Review types. Lets you test different field combinations before deploying.

Open Tool

Google Search Console

Monitoring

Monitor product schema errors and warnings across your entire site. The Enhancements tab shows which pages have issues, what the errors are, and tracks fix progress over time. Essential for ongoing schema health.

Open Tool

Screaming Frog

Audit

Crawl your entire site and extract all structured data into a spreadsheet. Filter by schema type, find pages missing product schema, and compare schema fields across thousands of products at once. Free for up to 500 URLs.

Open Tool
Need Better Rankings

Let's Optimize Pages That Rank and Convert

Got pages stuck on page two? Traffic that won't convert? Let's fix it with a personalized on-page SEO audit.

Get a Free SEO Audit

Frequently Asked Questions

What schema do product pages need?

Product pages need Product schema with at minimum: name, image, description, price, currency, and availability. Add AggregateRating and Review schema for rich result stars. Include brand, SKU, GTIN, and hasMerchantReturnPolicy for maximum eligibility across all rich result types.

How do I add product schema to my ecommerce site?

Add JSON-LD structured data in the <head> or <body> of your product page template. Use the Product type from Schema.org with nested Offer, AggregateRating, and Review types. Most ecommerce platforms like Shopify, WooCommerce, and Magento have plugins or built-in support for injecting product schema automatically.

Does product schema affect rankings?

Product schema does not directly affect rankings, but it enables rich results that increase click-through rates by 20-30%. Higher CTR sends positive engagement signals to Google, which can improve rankings over time. Schema also helps Google understand your product data more accurately for better matching to search queries.

How do I test product schema?

Use Google Rich Results Test (search.google.com/test/rich-results) to validate your product schema and preview eligible rich results. Also check Google Search Console Enhancements tab for ongoing schema errors and warnings across your entire site. Schema.org Validator catches syntax issues Google's tool may miss.

What are common product schema errors?

Common errors include missing required fields (name, image, offers), using wrong availability values, not including priceCurrency with price, missing aggregateRating when reviews exist, and nesting errors in Offer objects. Always validate after deployment and monitor Google Search Console for new errors that appear after template changes.

How do I handle product variants in schema?

Each variant (size, color) should have its own Product schema with a unique SKU, GTIN, and URL pointing to the variant-specific page. Use the variesBy property to indicate what dimensions the product comes in. If all variants share one URL, use hasVariant to nest variant products inside the parent Product object.

Do I need GTIN or MPN for product schema?

GTIN (Global Trade Item Number) and MPN (Manufacturer Part Number) are optional but highly recommended. Google uses these identifiers to match your products across the web and improve Shopping results. GTIN is preferred over MPN — use gtin13, gtin12, or gtin8 depending on your barcode type.

How long does it take for product rich results to appear?

After adding valid product schema, rich results typically appear within 2-4 weeks once Google re-crawls your pages. New pages may take longer. You can speed up indexing by submitting your URL through Google Search Console's URL Inspection tool and requesting indexing.

AA

Amir Ali

Founder of Clienvora, a content marketing agency that combines SEO and copywriting to drive rankings, traffic, and revenue. This checklist is maintained and updated regularly.