Product Schema Markup for AI Search: What Actually Gets Picked Up

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

O
Oeave Team
April 29, 2026
8 min read
Product Schema Markup for AI Search: What Actually Gets Picked Up

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.

What Product schema markup actually gets picked up by AI search?

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.

The three required types in plain terms

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.

Why server-rendered JSON-LD in the head is the only reliable shape

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:

  • Render the JSON-LD on the server. Next.js, Nuxt, Astro, Hydrogen, and most modern stacks support this. Put the script tag in the document head with the schema string inline.
  • Avoid client-side schema injection. A common mistake on Shopify themes is to inject Product schema via a tag manager or a JavaScript app. The browser sees the schema; the AI fetch does not.
  • Test with curl. 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 price problem and how to fix it

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.

What about images, breadcrumbs, and FAQ

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.

What does not help

A few patterns that look like SEO best practice and do nothing for AI search:

  • Stuffing keywords into the description property. AI search engines parse the description as plain text. A keyword-stuffed description reads as low quality and gets dropped at the citation pass.
  • Multiple Product schemas on one PDP. If your page has Product structured data three times (theme, app, custom), the engine picks one and ignores the rest. Ship one Product schema, server-rendered, in the head.
  • Custom @type values like "PremiumProduct". Schema.org has Product. Use Product. Custom types do not validate.
  • Wrapping JSON-LD in HTML comments. A surprisingly common Shopify theme mistake. The schema is invisible to engines that respect the comment markers.

How to roll this across a catalog

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:

  1. Audit one PDP with the Rich Results Test. Note every error and warning.
  2. Fix the template so a single PDP passes cleanly.
  3. Add AggregateRating from your real review provider. Skip if you have no reviews.
  4. Add BreadcrumbList from your real category structure.
  5. Roll across the catalog and re-test 5 PDPs at random to confirm the template fix worked.
  6. Add FAQPage selectively to the PDPs with real FAQ content.

The whole roll-out usually takes a backend developer 2 to 4 days for a typical premium DTC catalog.

Where to start

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.