{
  "id": "C05",
  "url": "https://cartforagents.com/guides/product-variant-structured-data",
  "title": "Product variant structured data: tie size, colour, price and stock to the right SKU",
  "description": "Build an identity and inheritance matrix that preserves buyer-relevant sibling differences and prevents facts leaking between variants.",
  "answer": "Give every purchasable variant its own stable ID, price, stock status, image and URL, plus its own value for any fact that changes between siblings, such as size range, capacity, fit or the reviews it carries. Put a fact at the group level only when it is true of every variant, because schema.org and Google read group-level properties as shared by all of them. Keep the offer (seller, price, stock, returns) separate from the product facts, and check one received record before trusting the rest.",
  "take": "Put every fact at the level where it's true. Group-level facts are read as true of every variant, so a size range or review count at the wrong level gets copied onto products it doesn't describe.",
  "summary": "A size, a colour and a price can each belong to a different level of your listing. Put every fact at the level where it is true, so the variant a shopper needs is the one that gets matched.",
  "claims": [
    {
      "text": "Google says to group variants with ProductGroup and its properties variesBy, hasVariant and productGroupID, alongside Product markup. ProductGroup can hold properties common to all variants, such as brand and review information. Each variant must have a unique ID in its markup (for example sku or gtin), variant names should be more specific than the group name, and each variant must be preselectable at a distinct URL that shows the right image, price and availability.",
      "source_title": "Google Search Central: Product variant structured data (ProductGroup, Product)",
      "source_url": "https://developers.google.com/search/docs/appearance/structured-data/product-variants",
      "source_date": "2026-09-08",
      "method": "documented",
      "limitation": "The date is the page's \"last updated\" stamp; we read it on 2026-10-27. It describes eligibility for Google Search merchant listing experiences, not how any AI assistant reads variants, and Google does not guarantee that structured data produces a rich result."
    },
    {
      "text": "Google lists the variant-identifying properties it supports in variesBy as color, size, suggestedAge, suggestedGender, material and pattern.",
      "source_title": "Google Search Central: Product variant structured data, ProductGroup properties",
      "source_url": "https://developers.google.com/search/docs/appearance/structured-data/product-variants",
      "source_date": "2026-09-08",
      "method": "documented",
      "limitation": "Applies to Google Search markup. It does not say a variant cannot differ in other ways, only which properties Google recognizes as the varying dimension."
    },
    {
      "text": "Schema.org defines a ProductGroup as a group of products that vary only in well-described ways, such as size or color. The group is not itself offered for sale, and properties applied to it represent characteristics shared by each of its variants.",
      "source_title": "Schema.org: ProductGroup",
      "source_url": "https://schema.org/ProductGroup",
      "source_date": "2026-10-27",
      "method": "documented",
      "limitation": "A vocabulary definition, dated by our check. It describes meaning, not how any search engine or assistant processes it."
    },
    {
      "text": "Schema.org says a MerchantReturnPolicy can be associated with an Organization, a Product or an Offer.",
      "source_title": "Schema.org: MerchantReturnPolicy",
      "source_url": "https://schema.org/MerchantReturnPolicy",
      "source_date": "2026-10-27",
      "method": "documented",
      "limitation": "Vocabulary definition only. It does not say which level a given platform reads."
    },
    {
      "text": "OpenAI's product feed reference asks for one row per purchasable item or variant, with item_id for the specific item, group_id for its parent listing and offer_id for a seller's offer, all kept stable when price, stock, title or images change, and never with the price inside an offer ID. Each variant row carries its own price, availability, URL and images, and the reference says neither the top-level attributes nor variant_dict reconcile conflicting values.",
      "source_title": "OpenAI Commerce: Products (file upload feed reference), Variants and Item information",
      "source_url": "https://developers.openai.com/commerce/specs/file-upload/products",
      "source_date": "2026-10-27",
      "method": "documented",
      "limitation": "Living developer reference, dated by our check. It defines a direct-feed format; it does not describe how ChatGPT ranks variants or what Shopify sends on a merchant's behalf."
    },
    {
      "text": "The same reference says a review count and star rating must describe the same review population. If a product page shares reviews across variants, the same group aggregate goes on each variant row and is not summed again. An empty value does not mean zero or false.",
      "source_title": "OpenAI Commerce: Products (file upload feed reference), Reviews and Q&A; Value conventions",
      "source_url": "https://developers.openai.com/commerce/specs/file-upload/products",
      "source_date": "2026-10-27",
      "method": "documented",
      "limitation": "Feed-format guidance, not evidence about how ratings affect selection."
    },
    {
      "text": "OpenAI's merchant page says that merchants who sell through Shopify or Etsy already have their catalog integrated, with no additional setup or application required.",
      "source_title": "OpenAI: Power product discovery in ChatGPT (merchants page)",
      "source_url": "https://chatgpt.com/merchants/",
      "source_date": "2026-10-27",
      "method": "documented",
      "limitation": "Marketing page checked on this date. It does not say which Shopify fields reach ChatGPT or how variants are represented."
    },
    {
      "text": "Shopify says Catalog syndicates products with title, description, options, images, price and availability, and that Catalog Mapping can group separate products that are variants of the same product into a single listing.",
      "source_title": "Shopify Help Center: Shopify Catalog and product discovery for agentic storefronts",
      "source_url": "https://help.shopify.com/en/manual/online-sales-channels/agentic-storefronts/products",
      "source_date": "2026-10-27",
      "method": "documented",
      "limitation": "Living help page checked on this date. It does not promise that every field reaches every assistant unchanged."
    },
    {
      "text": "Shopify's listing insights include a \"Variant & option completeness\" signal that measures variants, options and in-stock availability, and checks whether variant or option names contain acronyms or numbers that are hard for agents to understand or recommend.",
      "source_title": "Shopify Help Center: Managing agentic storefronts, Understanding listing quality indicators",
      "source_url": "https://help.shopify.com/en/manual/online-sales-channels/agentic-storefronts/agentic-home",
      "source_date": "2026-10-27",
      "method": "documented",
      "limitation": "Shopify describes the indicator as a directional sign of listing completeness. It is not a ranking formula, and agentic storefronts re-rank results with their own logic."
    },
    {
      "text": "Shopify's Agentic section includes a search preview that displays the raw outputs of Shopify Catalog search. Shopify says agentic storefronts often re-rank results with their own logic, so the preview may differ from what customers see and should be used as a directional signal.",
      "source_title": "Shopify Help Center: Managing agentic storefronts, Reviewing your products' discoverability and ranking",
      "source_url": "https://help.shopify.com/en/manual/online-sales-channels/agentic-storefronts/agentic-home",
      "source_date": "2026-10-27",
      "method": "documented",
      "limitation": "Living help page checked on this date. We have not used the preview on a merchant account; it shows Catalog search output, not an assistant's answer."
    },
    {
      "text": "Global Catalog separates discovery (search or lookup, with results clustered into one product and offers from several merchants) from evaluation of a specific product or variant, where options, price and the seller checkout link are retrieved.",
      "source_title": "Shopify: Global Catalog MCP, How it works",
      "source_url": "https://shopify.dev/docs/agents/catalog/global-catalog",
      "source_date": "2026-10-27",
      "method": "documented",
      "limitation": "Describes the catalog interface, not the final choice an assistant shows a shopper."
    },
    {
      "text": "In 162 searches of Shopify's agent catalog on October 26, 2026, every one of the 1,620 result occurrences carried exactly one variant record. 758 of them listed at least one option with more than one value, such as several sizes or colours. In all 1,620, the returned variant's title was identical to the product title.",
      "source_title": "Cart for Agents: How we checked (product variant guide)",
      "source_url": "https://cartforagents.com/guides/product-variant-structured-data#how-we-checked",
      "source_date": "2026-10-26",
      "method": "observed",
      "limitation": "One unpersonalized snapshot of the search route; occurrences, not distinct products. A product lookup may return more variants than a search result, and the identical titles look like how the catalog presents results, not a merchant choice. We cannot see what any assistant does with the record."
    },
    {
      "text": "In the same snapshot, 1,063 result occurrences carried both a product-level rating and a rating on the returned variant. The review counts differed in 1,001 of them and the averages in 730; only 53 matched on both. No rating had a count of zero.",
      "source_title": "Cart for Agents: How we checked (product variant guide)",
      "source_url": "https://cartforagents.com/guides/product-variant-structured-data#how-we-checked",
      "source_date": "2026-10-26",
      "method": "observed",
      "limitation": "We do not know how either figure is computed or which review population each describes. A difference is not an error by itself; it shows that two rating figures travel with the same listing."
    },
    {
      "text": "For the search \"blackout curtains for nursery that block 100 percent light\", one listing offered 15 sizes, in widths of 42, 52 and 70 inches and lengths from 63 to 120 inches, but its returned variant was \"37W x 63L inch x 2 Panels\", a size not in that list. Shopify's generated specification list for the same record gave \"Available Lengths: 84 in, 108 in, 120 in\", \"Panel Width: 52 in\" and \"Panel Count: 2\". The product-level rating was 5 from 70 ratings; the returned variant's was 5 from 1.",
      "source_title": "Cart for Agents: How we checked (product variant guide)",
      "source_url": "https://cartforagents.com/guides/product-variant-structured-data#how-we-checked",
      "source_date": "2026-10-26",
      "method": "observed",
      "limitation": "One listing. We do not know why the returned size is missing from the option list, and we did not check the store's page or the product."
    },
    {
      "text": "For the search \"resistance bands for physical therapy after knee surgery\", one listing's option list held 22 values mixing band sets and single bands, with discounts in the names (for example \"5 Band Set, 5-140 lb (Save 6%)\") and two ranges for some colours (for example \"RED - (15-30 lb)\" and \"RED - (15-35 lb)\"). Its returned variant was \"5 Band Set (Save 10%)\", which is not in the list. Its description said \"40 layers of premium latex\"; Shopify's generated specification list said \"30-layer premium latex\" and \"Length: 34 inches or 41 inches\".",
      "source_title": "Cart for Agents: How we checked (product variant guide)",
      "source_url": "https://cartforagents.com/guides/product-variant-structured-data#how-we-checked",
      "source_date": "2026-10-26",
      "method": "observed",
      "limitation": "One listing. We did not inspect the bands or the store's page, so we cannot say which layer count or range is correct."
    },
    {
      "text": "In the snapshot for \"anti theft backpack for city travel\", two catalog records for what appears to be the same 28-litre backpack carried different dimensions: 19.7 x 11.2 x 7.5 in in one record's generated specification list, and 11.2 in high, 7.5 in wide and 2.4 in deep in the other record's description and generated list.",
      "source_title": "Cart for Agents: Receipts cited by our guides (Shopify agent-catalog snapshot, Oct 26, 2026)",
      "source_url": "https://cartforagents.com/research/agent-shopping-research#receipts-cited-by-our-guides",
      "source_date": "2026-10-26",
      "method": "observed",
      "limitation": "We did not confirm the records are the same variant or check either against the manufacturer. It shows a conflict, not which value is correct."
    },
    {
      "text": "OpenAI says ChatGPT ranks merchants offering a product on factors such as availability, price, quality and whether they are the maker or primary seller, and that price or shipping changes may take time to appear.",
      "source_title": "OpenAI Help Center: Shopping with ChatGPT Search",
      "source_url": "https://help.openai.com/en/articles/11128490-shopping-with-chatgpt-search",
      "source_date": "2026-10-27",
      "method": "documented",
      "limitation": "Living help article checked on this date. It lists inputs, not weights."
    }
  ],
  "sources": [
    {
      "title": "Google Search Central: Product variant structured data (ProductGroup, Product)",
      "url": "https://developers.google.com/search/docs/appearance/structured-data/product-variants",
      "accessed": "2026-10-27"
    },
    {
      "title": "Schema.org: ProductGroup",
      "url": "https://schema.org/ProductGroup",
      "accessed": "2026-10-27"
    },
    {
      "title": "Schema.org: MerchantReturnPolicy",
      "url": "https://schema.org/MerchantReturnPolicy",
      "accessed": "2026-10-27"
    },
    {
      "title": "OpenAI Commerce: Products (file upload feed reference)",
      "url": "https://developers.openai.com/commerce/specs/file-upload/products",
      "accessed": "2026-10-27"
    },
    {
      "title": "OpenAI: Power product discovery in ChatGPT (merchants page)",
      "url": "https://chatgpt.com/merchants/",
      "accessed": "2026-10-27"
    },
    {
      "title": "OpenAI Help Center: Shopping with ChatGPT Search",
      "url": "https://help.openai.com/en/articles/11128490-shopping-with-chatgpt-search",
      "accessed": "2026-10-27"
    },
    {
      "title": "Shopify Help Center: Shopify Catalog and product discovery for agentic storefronts",
      "url": "https://help.shopify.com/en/manual/online-sales-channels/agentic-storefronts/products",
      "accessed": "2026-10-27"
    },
    {
      "title": "Shopify Help Center: Managing agentic storefronts",
      "url": "https://help.shopify.com/en/manual/online-sales-channels/agentic-storefronts/agentic-home",
      "accessed": "2026-10-27"
    },
    {
      "title": "Shopify: Global Catalog MCP",
      "url": "https://shopify.dev/docs/agents/catalog/global-catalog",
      "accessed": "2026-10-27"
    },
    {
      "title": "Cart for Agents: Receipts cited by our guides",
      "url": "https://cartforagents.com/research/agent-shopping-research#receipts-cited-by-our-guides",
      "accessed": "2026-10-27"
    }
  ],
  "limitations": [
    "The catalog observations come from one unpersonalized Shopify agent-catalog snapshot (162 searches, October 26, 2026). They count result occurrences, not distinct products, and show what the search route returned, not what any assistant showed a shopper.",
    "Each search result carried one variant. We did not run product lookups for the other variants, so we cannot say how complete Shopify's variant data is beyond the returned one.",
    "The documentation describes markup and feed formats. None of it publishes ranking weights, and none of it promises that correct variant data gets a product picked.",
    "We did not inspect any product or size chart. Where two values conflict, we report the conflict, not which value is right.",
    "Store names are withheld and quoted excerpts are kept short."
  ],
  "related": [
    "https://cartforagents.com/guides/agent-ready-product-data",
    "https://cartforagents.com/guides/product-constraint-coverage",
    "https://cartforagents.com/guides/ai-product-descriptions",
    "https://cartforagents.com/research/missing-product-review-data",
    "https://cartforagents.com/research/agent-shopping-research",
    "https://cartforagents.com/guides/shopify-agentic-storefronts"
  ],
  "published": "2026-10-27",
  "updated": "2026-10-27",
  "checked": "2026-10-27",
  "kind": "guide"
}