A founder-voice guide to the Product, Offer, and AggregateRating Schema.org markup that ChatGPT, Claude, and Perplexity actually read on a product page.

If you have shipped Schema.org Product markup on every PDP and your brand is still invisible to ChatGPT and Perplexity, the issue is usually not whether the markup exists. It is what is in it, where it lives, and whether the price actually makes it into the static HTML the AI fetch reads. This guide covers exactly which schema fields AI search engines pick up, and the mechanical fixes for the common ways the markup ships broken.
AI search engines reliably pick up three Schema.org types when shipped together as JSON-LD in the page head: Product with name, brand, image, description, and sku; Offer nested inside Product with price, priceCurrency, availability, and url; and AggregateRating with ratingValue and reviewCount. Pages that ship all three in server-rendered JSON-LD get cited by ChatGPT Shopping, Perplexity, and Claude consistently. Pages missing any one of the three either do not get retrieved or get retrieved and dropped at the citation pass.
The validator that maps to what AI engines see is Google's Rich Results Test. If the test parses your product page cleanly with Product, Offer, and AggregateRating, the AI fetch usually parses the same data. If the test shows errors or warns that fields are missing, the AI fetch sees the same gaps.
Product. The wrapper for the product itself. Required properties: name, image, description, brand. Strongly recommended: sku, gtin (if you have one), category, audience. Image must be an absolute URL, not a relative path. Description should match the visible page description, not a separate marketing pitch tuned for SEO.
Offer. Nested inside Product. Required properties: price, priceCurrency, availability, url. Price is a number (49.99), not a string with a currency symbol ("$49.99"). priceCurrency is a 3-letter ISO 4217 code (USD, EUR, GBP). availability is one of the standard Schema.org enums: InStock, OutOfStock, PreOrder, BackOrder, SoldOut. url is the canonical product URL with a trailing slash.
AggregateRating. Nested inside Product. Required properties: ratingValue (1 to 5), reviewCount (integer), bestRating (5), worstRating (1). For a brand with no reviews, do not ship a fake rating; ship the schema without AggregateRating instead. AI search engines drop pages with synthetic ratings.
These three together cover the core of what Google's Product structured data documentation recommends, and the same fields are what ChatGPT and Perplexity extract for product cards.
The single biggest reason AI search engines miss a product page is the schema lives inside JavaScript that runs after the page hydrates. The AI fetch sees the static HTML the server returned. If the schema gets injected by React or another framework after the document loads, the AI fetch never sees it.
The fix is mechanical:
curl -A "Mozilla/5.0 ..." https://your-store.com/products/sku-123/ and grep the response for application/ld+json. If the schema is in the response body, the AI fetch sees it. If it is not, fix the rendering before anything else.Server-rendered, in the head, in a single application/ld+json script tag. That is the only shape that ships reliably for AI search.
The most common variant of the rendering issue is the price specifically. The product page renders with the schema in place but the price field reads as 0 or null because the price is loaded by JavaScript after the variant selector mounts.
The fix has two parts:
Default the master variant price into the schema at render time. The first variant the buyer sees should have its price written into the JSON-LD Offer at server render. Even if the visible page updates the price as the buyer picks a size, the schema price stays correct from the first byte.
Use priceSpecification for variant pricing. Schema.org supports an array of priceSpecification blocks per Offer that describe price ranges and conditions. This lets the page expose all variant prices to AI search engines without changing the displayed price. The buyer picks a size; the visible price updates client-side; the structured data reflects the full range correctly.
A page where the schema price reads as $49 but the visible price reads as $69 because of a default mismatch is a page that gets retrieved with the wrong number. Fix the default before adding priceSpecification.
A few additional schemas that help with AI search citations on product pages:
Image. The Product schema requires at least one image URL. Ship multiple if your product has them: hero, lifestyle, detail, alternate. Images should be absolute URLs, served from a CDN with proper Content-Type headers.
BreadcrumbList. A separate JSON-LD block that lists the path from home to the product. AI search engines use breadcrumbs to understand category context. A buyer asking "best leather backpack for daily commute" gets your product cited if the breadcrumb tells the engine your product sits under "Bags" → "Backpacks" → "Leather."
FAQPage. A separate JSON-LD block with question and answer pairs. Useful when the product page has a real FAQ section the buyer reads. AI search engines pull FAQ answers directly into responses. Ship 3 to 5 questions, not 30.
Skip Review schema for individual reviews unless you have a real moderation flow. AI search engines now distrust pages with too many self-reported reviews. AggregateRating with a real third-party signal beats a long list of in-house reviews.
A few patterns that look like SEO best practice and do nothing for AI search:
If you have one product with clean schema and 200 without, the right pattern is to fix the template, not 200 pages. Most Shopify themes and headless stacks let you write the schema once in the product template and have it render correctly on every PDP.
The order to ship:
The whole roll-out usually takes a backend developer 2 to 4 days for a typical premium DTC catalog.
If your brand is invisible to AI search, fix the schema first and the content second. How ChatGPT Shopping actually picks products covers the broader signal set including third-party reviews and merchant feeds. What Perplexity Shopping looks for on a product page covers the on-page mechanics specific to Perplexity.
If your brand has clean schema and is still invisible, the gap is usually the third-party review signal or the absence of a merchant feed. The agent-readable product feed guide covers what to ship beyond the page when you want to be more than retrievable.
The buyer is asking the assistant. The assistant is reading the page. The page either has clean Product, Offer, and AggregateRating in the head, or it does not. The middle ground does not exist for AI search.