Product Structured Data

ProductGroup & Variants Schema Markup

If your product comes in multiple colours, sizes, or materials, ProductGroup structured data is the right choice. It groups all variants under one parent entity, allowing Google to show colour swatches, size options, and variant-specific pricing directly in Shopping results.

Generate Product Variants Schema Free

Single product, no variants? Use Product Snippet schema instead.

Product Variants in Google Shopping

Popular products
🧥
★★★★☆
+more
🧥
★★★★★
+more
Colour swatches Variant pricing Per-variant stock Size options

What Product Variants schema unlocks

Colour swatches in Shopping
Google shows colour dots on the Shopping card — shoppers filter by colour before clicking through.
Variant-specific pricing
Each variant shows its own price and availability — sold-out variants and price ranges display correctly.
Reduced duplicate markup
Shared attributes (brand, description, pattern) live on the ProductGroup — variants only specify what differs.
Apparel, footwear, furniture and more
Any product with selectable options — colour, size, material, pattern — benefits from ProductGroup schema.

Key properties for Product Variants schema

ProductGroup holds shared attributes. Each variant is a Product nested inside hasVariant — or linked back via isVariantOf in flat mode.

PropertyLevelStatusNotes
nameGroupRequiredProduct family name (e.g. "Wool Winter Coat").
urlGroupRequiredCanonical URL for the product family page.
variesByGroupRequiredDimensions that vary. Use schema.org URIs: color, size, material, pattern, suggestedAge, suggestedGender.
hasVariantGroupRequiredArray of Product objects, one per variant.
productGroupIDGroupRecommendedYour unique identifier for this group.
imageGroupRecommendedHero image for the product family.
aggregateRatingGroupRecommendedGroup-level rating. Applies across all variants.
nameVariantRequiredVariant-specific name (e.g. "Wool Coat — Red, M").
offersVariantRequiredPrice, currency, and availability for this variant.
color / sizeVariantRecommendedThe attribute values that differentiate this variant.
urlVariantRecommendedURL for this specific variant, if one exists.
imageVariantRecommendedImage of this specific variant.
sku / gtin13VariantRecommendedVariant-level identifiers for Shopping matching.

Frequently asked questions

No. ProductGroup schema supports both a single page with all variants selectable and separate pages per variant. For separate pages, each variant Product should have its own url property. For a single page, the ProductGroup and all variants can share the same URL.
Google officially supports these URIs: https://schema.org/color, https://schema.org/size, https://schema.org/suggestedAge, https://schema.org/suggestedGender, https://schema.org/material, and https://schema.org/pattern. Other text values are accepted but may not trigger Shopping swatches.
In nested structure, variant Products sit inside ProductGroup via hasVariant. In flat structure, the ProductGroup and each variant Product are separate JSON-LD objects, with each variant linking back via isVariantOf. Both are valid — our generator supports both with a toggle.
Yes. Add ProductGroup JSON-LD to your product.liquid template. Each Shopify variant maps to a Product object inside hasVariant. Use the variant URL (with ?variant= parameter) as the url for each variant, and the main product URL for the ProductGroup.
Google recommends placing aggregateRating at the ProductGroup level when the rating applies to the product as a whole. Only add variant-level ratings if individual variants have genuinely distinct review sets — which is rare.

Also in this series

Generate valid Product Variants schema

Add variants, choose nested or flat output, and get clean JSON-LD in seconds. No account needed.