A customer sees one pair of running shoes with several sizes and colors. A product catalog may contain dozens of separate records for those combinations. If the records are not connected correctly, a shopping channel may receive a fragmented view of what is really one product family.
The opposite problem is just as damaging: unrelated products can be grouped together because they share a title pattern, tag, or metafield value.
Variant grouping is the process of telling a commerce system which purchasable options belong to the same parent product. The right structure helps preserve the difference between the parent listing and each selectable option, including its price, image, URL, and stock status.
The exact fields and rules differ by platform. Shopify Catalog, Google Merchant Center, and OpenAI's direct product-feed schema should not be treated as interchangeable implementations.
First decide what counts as a variant
A variant is a purchasable version of the same underlying product that differs by one or more selectable options.
Common examples include:
- A T-shirt offered in different sizes and colors
- A laptop offered with different memory configurations
- A desk lamp offered in different finishes
- A skincare product offered in different sizes, where the product itself and use are otherwise the same
A separate product is not automatically a variant just because it looks similar. A bundle, a replacement part, a different model generation, or a product with a materially different purpose may need its own listing.
Use this decision test:
- Would a shopper naturally expect to select the option on one product page?
- Does the store present the options as versions of the same product?
- Can each option be described by a consistent set of variant dimensions?
- Can each option retain its own current price, availability, image, and destination URL?
If the answer to the first two questions is no, do not force the records into one variant group.
Keep three levels of identity separate
A robust catalog distinguishes among:
| Level | Meaning | Example |
|---|---|---|
| Parent product | The product family shown as one listing | Trail running shoe model |
| Variant | One purchasable option | Black, size 10 |
| Offer or seller record | A particular seller's offer for that item | Brand store's offer for black, size 10 |
Not every platform uses all three levels in the same way. The important principle is that identifiers should have stable, separate jobs.
Do not use the same identifier for a parent and all its variants when the channel expects a unique item identifier for each purchasable option. Likewise, do not use a variant identifier as the shared group identifier.
Shopify Catalog: group separate Shopify products when needed
Shopify Catalog automatically structures product information and consolidates variants. By default, Shopify uses its Combined Listings configuration where applicable. For stores with custom product data or grouping conventions, Shopify also provides a Custom variant grouping option in the Shopify Catalog mapping settings.
This is particularly useful when a store has separate Shopify product records for color or configuration options that should appear as one listing.
Choose a grouping method that reflects your actual data
Shopify currently documents three ways to group separate products through Custom variant grouping:
- Product title: Group products by a shared title pattern and a selected delimiter.
- Product metafield: Group products that share a selected product or category metafield value.
- Product tag: Group products using a tag prefix.
For example, a store might maintain a metafield called Product family ID and give every color version of the same lamp the value LAMP-042. That metafield can be selected as the grouping key.
A title-based approach may be appropriate when the store consistently uses names such as Arc Desk Lamp - Black and Arc Desk Lamp - White, separated by a reliable delimiter. It is less dependable when product titles are edited by different people or use inconsistent naming patterns.
Configure option names as shoppers understand them
A product group is only useful when the option values are clear. Map the store's option names into recognizable labels such as Color, Size, Material, or Storage where applicable.
Avoid option labels that expose internal terminology, such as Option 1, Variant code, or a supplier-specific abbreviation. Do not rename a value in a way that changes its factual meaning.
Review Shopify's grouping results
After setting a grouping method, Shopify reports products that were combined, left separate, or need review.
Pay particular attention to products marked need review. Shopify describes this result as occurring when two variants in the grouped products have the same option combination. For example, two records might both be labeled Black / Large, even though they have different SKUs or product contents.
Resolve duplicate option combinations before relying on the group. A product preview can help inspect the resulting group name and included products, but it is still a view of the data Shopify Catalog receives, not a guarantee of how a specific AI channel will display the listing.
Important Shopify behavior to know
- Custom variant grouping is specific to Shopify Catalog and is not available for every sales channel.
- When you enable Custom variant grouping, the selected method overrides the Shopify Combined Listings setup for Shopify Catalog.
- Shopify supports different group-size limits depending on the selected method. Review its current limits before applying a rule to a very large catalog.
- Grouping changes are processed with a delay.
See Shopify's current variant grouping instructions.
Google Merchant Center: use a unique item ID and a shared item group ID
Google Merchant Center uses two identifiers for different purposes:
ididentifies one specific item or variant and must be unique.item_group_ididentifies the family shared by variants of the same product.
For example:
| Product record | id |
item_group_id |
Color | Size |
|---|---|---|---|---|
| Black running shoe, size 10 | TRAIL-BLK-10 |
TRAIL-001 |
Black | 10 |
| Black running shoe, size 11 | TRAIL-BLK-11 |
TRAIL-001 |
Black | 11 |
| Blue running shoe, size 10 | TRAIL-BLU-10 |
TRAIL-001 |
Blue | 10 |
The id is different for each purchasable variant. The item_group_id is the same for every variant in the group.
Google requires item_group_id for variants in free listings, and for Shopping ads in specified markets. Its documentation also says to avoid submitting a separate parent SKU as another product when that SKU is being used to group the variants.
The variant attributes in the feed must match the landing page. If the record represents the black, size 10 shoe, the page should open with that option selected and show the matching image, price, and availability.
Read Google's item group ID documentation and product data specification.
Direct ChatGPT product feeds: model each purchasable option as a row
OpenAI's current direct product-feed documentation uses a different naming scheme:
item_ididentifies the specific item or variant.group_ididentifies the parent listing shared by variants.variant_dictcontains the selected options, such as color and size.listing_has_variationsis set totruefor every row in a variant group.offer_idcan identify a seller's offer where needed.
The feed should include a separate record for each purchasable variant. Each record carries its own price, availability, URL, and image. Keep identifiers stable when product information changes, and do not put a changing price inside an offer ID.
OpenAI's direct feed onboarding is currently available to approved partners. These field definitions are useful for understanding the feed model, but they are not a task every Shopify merchant can complete directly from Shopify Admin.
See OpenAI's product feed schema.
A practical variant-grouping audit
Choose 10 to 20 product families that include the most complex options in your catalog. For each family, check the following:
| Check | What good looks like | Common failure |
|---|---|---|
| Parent identity | One stable ID identifies the same product family | A new parent ID is created for each color |
| Variant identity | Each purchasable option has its own stable ID | Several sizes share one item ID |
| Group identity | Only true variants share the group ID | Similar but different models are grouped together |
| Option dimensions | Option names and values are consistent | Colour, Color, Shade, and internal codes are mixed |
| Price | Each option has the correct payable price | Every option inherits the parent product's lowest price |
| Availability | Stock status is specific to the selected option | An out-of-stock size appears available because another size is in stock |
| Image | The image represents the selected option | Every color option uses the same unrelated image |
| URL | The page opens with the correct option selected | Every variant links to a generic page with a different default option |
| Duplicate combinations | Each option combination is unique within the group | Two records claim to be the same size and color |
The most important rule is that grouping should not erase differences that matter to the buying decision.
How to test the result
After correcting the catalog structure, run a small set of prompts that explicitly name option values:
- "Find this backpack in olive green, under $100."
- "Is the black version available in size 10?"
- "Compare the 256 GB and 512 GB versions of this laptop."
- "Show me the same desk lamp in brushed steel."
Check whether the answer identifies the correct family, selected option, image, price, and availability. Record the exact prompt, market, date, and channel. Repeat the test after any data or platform change.
Do not interpret one product carousel as proof that every variant is correctly grouped. Test options with different stock states and prices, because those are where parent-level shortcuts often hide errors.
Common mistakes to avoid
Grouping by a loose title match
Two products can share most of a title without being variants. A stable metafield or other controlled grouping key is usually safer than an informal naming convention.
Reusing one ID for every variant
A shared group ID does not replace the unique identifier needed for each purchasable option.
Grouping products with different purposes
A standard product and a bundle, a replacement component, or a newer model generation should not be collapsed into one variant family unless the store actually presents them as options of the same product.
Treating all channels as if they use the same fields
Shopify Catalog, Google Merchant Center, and OpenAI's direct feed have different schemas and eligibility rules. Reuse a consistent internal product model, then map it to each channel's documented format.
Forgetting option-specific inventory
A parent product may be in stock while one size or color is not. Availability must describe the item the shopper would actually select.
Final takeaway
Good variant data preserves both sides of the product: the shared identity that tells a channel these options belong together, and the option-level facts that tell a shopper what is actually available to buy.
Build the grouping rule from the way your store represents products, keep identifiers stable, and verify price, stock, image, and destination URL at the variant level. Do that before trying to diagnose why a particular product appears or disappears from an AI shopping answer.
For the broader catalog process, see How to Audit a Product Catalog for AI Shopping.
