Free 48h audit
Structured data11 min read

Product structured data and e-commerce in AI answers.

When a shopper asks ChatGPT, Gemini or Perplexity “which 40-litre hiking backpack should I choose for under 150 euros”, the answer contains product names, prices, ratings and sometimes a link to buy. Those elements come from somewhere: from your product pages, your feeds, or third-party sites. Here is what shopping assistants actually read, through which channels, and the Product and Offer markup that makes a product page unambiguously readable.

Article contents

What a shopping assistant reads in a product page

A shopping assistant reads five things in a product page: the product's identity (name, brand, identifier), the price with its currency, availability, the aggregate rating with its number of reviews, and the delivery and returns conditions. Everything else, description, selling points, visuals, serves the human reader; for the engine, these five data points decide whether the page can enter a “which product should I choose” answer, and in what position.

The documented level varies between publishers. Google describes precisely the Product and Offer structured data it uses for its merchant results, and its shopping features, including in AI Mode, rely on the Shopping Graph fed by Merchant Center. OpenAI stated, when it launched shopping results in ChatGPT in spring 2025, that they rely on structured metadata supplied by third parties and on reviews, then opened a product feed scheme for merchants. Perplexity launched a merchant programme that lets you send it product data. Anthropic has documented nothing product-specific. The details of these schemes change quickly; what does not change is the nature of the data expected.

Hence a practical consequence: a product page is read through three channels, and you need to be readable through all three. The HTML with its JSON-LD markup, which AI search crawlers explore; the merchant feeds, which you send to the platforms; and third-party sources, comparison sites, marketplaces and review sites, which engines cite heavily for choice questions. It is the catalogue-level version of the four conditions described in our complete method.

Diagram 1The three channels through which a product data point reaches a shopping assistant, and what is missing when one of them is absent.
  1. 1Page and markupThe HTML product page, with Product and Offer in JSON-LD, read by AI search crawlers and by Googlebot.Otherwise: the engine can neither cite you nor verify the feed.
  2. 2Merchant feedsMerchant Center and the feed schemes of OpenAI and Perplexity, fed from your catalogue.Otherwise: you are absent from the built-in shopping features.
  3. 3Third-party sourcesComparison sites, marketplaces, review sites, forums, which name the product with its attributes.Otherwise: your product page remains an uncorroborated claim.

The three channels must say the same thing. A price that differs between the page and the feed, availability that is up to date in the feed but stale in the markup, a different product name on a marketplace: each of these discrepancies is, for an engine, a reason to prefer a more consistent source, often a competitor or a comparison site.

Product: the product's identity and its variants

The Product block describes what is sold, independently of price. The properties that matter are those that allow the product to be recognised unambiguously: name, brand, gtin13 or gtin, mpn, sku, image, description. The GTIN, the product's barcode, is the most valuable identifier: it lets an engine match your page with pages for the same product elsewhere, and therefore compare your price and availability with those of other sellers.

PropertyRoleAdvice
nameProduct nameThe same as the page title and the feed
brandBrandA Brand object with the exact brand name
gtin13, gtinBarcodeOne per variant; never shared between two products
mpn, skuManufacturer part number, internal referenceUseful when no GTIN exists
imageVisualsURLs accessible to crawlers, several views
descriptionDescriptionThe seller's own, not a copy of the manufacturer's
color, size, materialVariant attributesOn each variant, consistent with variesBy
offersOfferOne Offer object per variant, or AggregateOffer for a price range
aggregateRating, reviewReviewsCollected on the site, for this product, dated

Table: scroll horizontally.

Variants (sizes, colours, capacities) are the first source of confusion. Google has documented since 2024 the ProductGroup type, which groups variants with hasVariant and declares the axes of variation with variesBy; each variant is a Product with its own GTIN, price and availability. Declaring a single Product with a single price for twenty variants, or twenty Products with the same GTIN, produces false information in both cases, and an engine that compares prices notices.

Offer: price, availability, delivery, returns

The Offer block carries everything that changes over time: the price (price, priceCurrency), availability (availability, with the normalised values InStock, OutOfStock, PreOrder, BackOrder), condition (itemCondition), price validity (priceValidUntil) and the seller. Google also documents two objects that shopping assistants use to answer questions about conditions: OfferShippingDetails for delivery costs and times by region, and MerchantReturnPolicy for the returns window and returns fees. For a crossed-out price, Google expects a UnitPriceSpecification object of type StrikethroughPrice rather than text.

{
  "@context": "https://schema.org",
  "@type": "Product",
  "@id": "https://www.alpir.example/sacs/cairn-40#product",
  "name": "Cairn 40 L hiking backpack",
  "brand": { "@type": "Brand", "name": "Alpîr" },
  "gtin13": "…",
  "sku": "ALP-CAIRN-40-GRIS",
  "color": "Slate grey",
  "image": ["https://www.alpir.example/img/cairn-40-face.jpg", "https://www.alpir.example/img/cairn-40-dos.jpg"],
  "description": "40-litre hiking backpack, 1.1 kg, ventilated back, rain cover included, designed for two to three days of self-sufficiency.",
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": 4.6,
    "reviewCount": 212,
    "bestRating": 5
  },
  "offers": {
    "@type": "Offer",
    "url": "https://www.alpir.example/sacs/cairn-40",
    "price": 139.00,
    "priceCurrency": "EUR",
    "priceValidUntil": "2026-09-30",
    "availability": "https://schema.org/InStock",
    "itemCondition": "https://schema.org/NewCondition",
    "seller": { "@type": "Organization", "name": "Alpîr" },
    "shippingDetails": {
      "@type": "OfferShippingDetails",
      "shippingRate": { "@type": "MonetaryAmount", "value": 0, "currency": "EUR" },
      "shippingDestination": { "@type": "DefinedRegion", "addressCountry": "FR" },
      "deliveryTime": {
        "@type": "ShippingDeliveryTime",
        "handlingTime": { "@type": "QuantitativeValue", "minValue": 0, "maxValue": 1, "unitCode": "DAY" },
        "transitTime": { "@type": "QuantitativeValue", "minValue": 2, "maxValue": 4, "unitCode": "DAY" }
      }
    },
    "hasMerchantReturnPolicy": {
      "@type": "MerchantReturnPolicy",
      "applicableCountry": "FR",
      "returnPolicyCategory": "https://schema.org/MerchantReturnFiniteReturnWindow",
      "merchantReturnDays": 30,
      "returnMethod": "https://schema.org/ReturnByMail",
      "returnFees": "https://schema.org/FreeReturn"
    }
  }
}
Diagram 2Anatomy of a product page as a shopping assistant reads it: six data points, each present in the visible text and in the markup.
Identity
Cairn 40 L hiking backpack, Alpîr, GTIN and reference
Price
€139.00 incl. VAT, valid until 30 September 2026; identical on the page, in the JSON-LD and in the feed
Availability
In stock, updated on every page render from actual stock
Rating
4.6 out of 5, 212 dated reviews, negative reviews visible
Delivery
Free in France, dispatched within 1 day, received within 2 to 4 days
Returns
30 days, by post, free of charge

The rule is the same as for any structured data: what the markup says must be what the page says, and both must be what the feed says. The marked-up price is the displayed price, including all taxes for a consumer buyer; the marked-up availability is that of the stock at the moment the page is served, not that of yesterday's cache.

Reviews and ratings on a product page

The aggregate rating and the reviews are read by every shopping assistant, and they weigh as much as price in recommendation answers. On a product page, AggregateRating markup (rating, number of reviews, scale) and Review markup (author, date, text, rating) is accepted by Google provided the reviews are collected from your customers and relate to the product on the page; reviews copied from other sites must not be marked up. The restriction on self-serving reviews, which targets Organization and LocalBusiness, does not apply to products.

What gives a review its value for an engine is detailed in the article on customer reviews; for a product page, remember three points. The number of reviews must be displayed with the rating: “4.6 out of 5” means nothing without “from 212 reviews”. Reviews must be dated and, where possible, tied to the variant concerned. And negative reviews must remain visible; a page that shows only five stars is treated with suspicion by a human reader, and gives no usable fact to a model looking for weaknesses to mention.

Merchant feeds: the second way in

A merchant feed is a file, or an API, that sends your catalogue to a platform in a format it dictates. Merchant Center, at Google, is the oldest and best documented: it feeds Shopping, the merchant results of classic search and, according to Google, the shopping features of AI Mode. OpenAI and Perplexity have opened comparable schemes, whose specifications are public but recent; check them at the point of committing, and treat them as channels to watch rather than as settled.

Diagram 3The journey of a price data point, from the source of truth to the generated answer; the decisive step is the consistency check between the page and the feed.
  1. 01Source of truthPrice and stock live in the ERP or the PIM, in a single place.
  2. 02PageThe template generates the HTML and the JSON-LD from that source, on every render.
  3. 03FeedThe merchant feed is generated from the same source, at the same frequency.
  4. 04Consistency checkAn automatic check compares page and feed; any price or availability discrepancy blocks publication.
  5. 05AnswerThe engine reads a price, an availability and conditions that are identical everywhere, and can cite you without risk.

The key point is consistency between the feed and the page. Google checks that the feed's price and availability match those of the landing page, rejects offers when there is a discrepancy, and recommends Product markup on the page precisely for that check. There is no reason to think the other platforms will be more tolerant. The only way to maintain that consistency across a catalogue is to generate page, markup and feed from the same source, and to check for discrepancies before publication.

What gets a product page dismissed, and how to measure it

In our audits of e-commerce sites, the product pages absent from shopping answers share a few defects, none of them spectacular. Each can be checked on a sample of ten pages in under an hour.

  • A price and availability injected by JavaScript after load, invisible in the initial HTML and absent from the JSON-LD.
  • Availability marked up as “in stock” on products that sold out weeks ago, because the markup is cached.
  • A GTIN that is missing, wrong or shared between several variants.
  • A description copied from the manufacturer, identical to that of twenty other sellers: nothing justifies citing yours.
  • No delivery or returns information, neither in the text nor in the markup.
  • A rating displayed without a number of reviews, or reviews without dates.
  • Images blocked to crawlers by a CDN rule or a disallowed image domain.
  • A merchant feed whose prices differ from those of the pages, with rejected offers that nobody monitors.
Diagram 4Share of a catalogue's product pages carrying each data point completely and consistently, compared with the main competitor.
GTIN identifier
45 %
90 %
Price and currency marked up
80 %
98 %
Availability up to date
60 %
95 %
Rating with number of reviews
30 %
85 %
Delivery and returns
15 %
70 %
Your catalogueMain competitor

Illustrative data. How to read it: the widest gaps are on identifiers, reviews and conditions, that is, on the data that lets an assistant compare and reassure, not on price.

Measurement follows the logic of citation share, applied to a catalogue. You build a panel of real purchase questions (“which X for Y”, “X or Y”, “best X under Z euros”), run them through the engines every week, and record three things: whether a product from the catalogue is named, whether the price and availability cited are accurate, and which source the engine used, your page, a comparison site or a marketplace. That last point tells you where to direct the effort; content strategies for choice questions are developed in the GEO for e-commerce article.

What to remember

Key points
  • A shopping assistant reads five data points: identity, price, availability, rating with number of reviews, delivery and returns. The rest serves the human reader.
  • Three channels, which must say the same thing: the page with its JSON-LD, the merchant feeds, the third-party sources.
  • Product carries identity and variants (GTIN per variant, ProductGroup); Offer carries what changes: price, availability, delivery, returns.
  • Product reviews can be marked up if they are collected on the site, for this product, and dated; negative reviews remain visible.
  • Generate page, markup and feed from the same source and block discrepancies; measure with a panel of purchase questions, including the source cited.

Frequently asked questions

Is Product markup enough to appear in ChatGPT's shopping answers?

No. OpenAI has stated that its shopping results rely on structured metadata supplied by third parties and on reviews, and has opened a feed scheme for merchants. Markup makes your product page readable by AI search crawlers and consistent with those feeds, but appearing also depends on the third-party sources that cite the product. Work all three channels.

How do you mark up a product available in several sizes and colours?

With a ProductGroup that declares the axes of variation in variesBy and lists each variant in hasVariant. Each variant is a Product with its own GTIN, its colour or size, its price and its availability. A single Product for all variants, or several Products with the same GTIN, gives false information.

Can you mark up reviews collected by a third-party platform?

Google requires that reviews marked up on your page were collected directly from your customers and relate to the product on the page. If a platform collects reviews on your behalf and displays them on your site, they can generally be marked up; reviews copied from a marketplace or another site cannot. Check the platform's terms.

What happens if the feed price differs from the page price?

Google rejects the offer concerned until it is corrected, and a shopping assistant that notices the discrepancy prefers a consistent source. The fix is structural: generate the page, the JSON-LD and the feed from the same source of truth, at the same frequency, and automatically check for discrepancies before publication.

Should delivery costs and the returns policy be declared in the markup?

Yes. Google documents OfferShippingDetails and MerchantReturnPolicy, and purchase questions often concern these conditions: “free delivery”, “returns accepted”. An assistant that finds these answers in your markup can cite them; if it does not find them, it cites a seller that displays them.

Portrait of Kamel Malek
Kamel Malek
Founder & agency director

An SEO practitioner since 2001, Kamel Malek runs SEO360 (Alicante, Valencia, Madrid, Paris). He has published three books on visibility in generative engines, including Generative Engine Optimization and Rétablir les faits.