In short
Each variant is submitted as a separate item with its own identifier, price, availability, image and link, and the variants of one product are joined together with a shared item_group_id. Google uses that grouping to understand that the items are the same product in different colours or sizes, then decides which single variant to show for a given query and shopper. You cannot pick the variant that shows, but you control the grouping, the attributes that describe each variant and the page each one lands on.
One item per variant, one group identifier across them
The feed carries a row for every buyable combination. A shirt in four colours and five sizes is twenty items, each with its own identifier, its own availability and its own price if the prices differ. What ties them together is item_group_id, which holds the same value for every row in the group and a different value for every other product.
That grouping is what lets Google show a colour swatch or a size selector on the listing and understand that a shopper looking at one variant is looking at the same product as the others. Without it, twenty rows look like twenty unrelated products, and the account loses the variant treatment on the listing along with a good deal of the reporting that depends on it.
Alongside the group identifier, each row carries the attributes that say how it differs: colour, size, material and pattern, plus size type and size system where they apply, and age group and gender for apparel. Those are the fields Google uses to build the variant selector, and apparel in particular has required combinations that vary by country.
On Shopify the native Google and YouTube channel builds this shape for you from the product and its variants. On WooCommerce a variable product exports the same way through a feed plugin, with the parent product supplying the group value.
Google decides which variant shows, and it changes with the query
You cannot nominate a hero variant. Google selects from the group based on what the query implies, what is in stock, what the shopper has looked at before and what it expects to perform, so the same product can appear as the black one for one shopper and the tan one for another.
That is a reason to keep every variant accurate rather than trying to make one perfect. A group where three of twelve rows have a missing image or a stale price is a group where a third of the possible impressions land on a weaker listing. It is also a reason to keep out-of-stock variants in the feed with availability marked correctly rather than removing them, because Google can then choose an in-stock sibling instead of losing the product.
The link on each row should land on that exact variant, with the page already showing the right colour, price and image. On Shopify that means the variant parameter on the product URL. A link that drops every shopper on a default variant makes the click feel like a mismatch, and mismatches show up as a lower conversion rate on the whole group.
Identifiers work per variant, not per product
GTINs belong to the variant. A size ten black boot and a size eleven black boot have different barcodes, and submitting the same GTIN across a group is treated as incorrect data rather than as a shortcut. Where you are the manufacturer and no barcode exists, brand and MPN identify the item instead, with the MPN unique per variant.
Getting this right is what lets Google match your listing to the same product from other sellers, which in turn drives the pricing reports and the comparison layouts. It also matters for free listings, where identification is doing more of the work than a bid.
Images should follow the variant too. A colour variant with the parent image attached is technically valid and practically weak, because the shopper who clicks a green swatch and sees a blue photo has been given a reason to leave. Where the store holds per-variant photography, make sure the feed is picking it up rather than falling back to the first product image.
Sizes deserve one extra note. Where a product comes in a size range, the size value should be the value a shopper would recognise in that market, and the size system attribute should say which market that is, so a European sizing catalogue is not read as a United States one.
Variants change how you bid and how you read reports
Bidding happens at item level, which means variants can be split apart when it helps. In Standard Shopping, product groups can be subdivided down to individual item identifiers. In Performance Max, listing groups do the same job inside an asset group, and custom labels let you separate variants by margin, price band or stock depth without restructuring anything.
The practical use of that is uneven demand within a group. Popular sizes sell through, edge sizes sit, and a single bid across the group either overpays for the slow variants or underbids the fast ones. Labelling by stock depth or by rate of sale and bidding the labels separately is usually a bigger win than any change to the group as a whole.
Reporting needs the same care. A product level report that rolls variants up will tell you the product converts; it will not tell you that one colour carries the group and three are dead weight. Look at item level performance at least once a season, and pair it with return rate by variant, because a size that sells well and comes back often is a loss dressed as a winner.
One variant group in the feed
- item_group_id
- TRW-4410 (same on every row)
- id
- TRW-4410-BLK-M
- colour
- Black
- size and size_system
- M, US
- gtin
- Unique to this size and colour
- link
- Product URL with the variant parameter
- availability
- In stock, set per variant
- image_link
- The black photograph, not the parent image
Illustrative row for one variant. Every other size and colour repeats the same shape with its own identifier, barcode, image and availability.
Related questions
Should out-of-stock variants be removed from the feed?
No. Keep them in the feed with availability set to out of stock. Google can then show an in-stock variant from the same group rather than dropping the product, and the item comes back automatically when stock returns instead of waiting for a re-review.
Can I force Google to show a particular colour?
No. Selection within a variant group is automatic and responds to the query, stock and shopper. What you can do is make sure every variant is worth showing, and exclude a variant from the campaign entirely with a listing group or a feed rule if you genuinely do not want it advertised.
Do variants need different GTINs?
Yes, where the manufacturer assigned different barcodes, which is normal for sizes and colours. Reusing one GTIN across a group misidentifies the products. If you make the product yourself and have no barcodes, use brand with a unique MPN for each variant instead.