Short answer: AI shopping agents need Product JSON-LD with an Offer (price, priceCurrency, availability), a product identifier (gtin, mpn, or sku), a brand, and AggregateRating for reviews. Render it server-side in the initial HTML, because many AI crawlers do not run JavaScript and will miss schema an app injects in the browser.

Structured data is doing quiet, heavy work right now. Independent analysis found that the large majority of pages cited by AI shopping surfaces include structured data, because that is how an agent turns a web page into a comparable product with a price, a rating, and a stock status. Your design tells a human what the product is. Your schema tells an AI. Both need to be right, but only one of them is machine-readable, and that is the one deciding whether you show up in an AI answer.

Let us go field by field, then put it together into a block you can adapt.

The required fields

These are the core signals an AI shopping agent looks for on a product page:

  • name: the exact product name, matching what a shopper would search.
  • image: a real product image URL, not a placeholder.
  • description: specific, benefit-led detail. Thin copy gives an agent little to quote.
  • brand: your brand name, which helps match brand-specific queries.
  • sku and ideally gtin: the identifiers that let AI match your item across the web.
  • offers: an Offer with price, priceCurrency, and availability. This is the part agents cannot do without, because they will not recommend a product they cannot price or confirm is in stock.
  • aggregateRating: ratingValue and reviewCount, the structured social proof agents lean on.

A copy-paste example

Here is a minimal, valid Product block with an Offer, an identifier, brand, and rating. Replace the values with your own, keep it in the page head or body, and make sure it is in the server-rendered HTML.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Merino Wool Runner",
  "image": "https://yourstore.com/img/runner.jpg",
  "description": "Lightweight everyday shoe in soft merino wool.",
  "brand": { "@type": "Brand", "name": "Your Brand" },
  "sku": "RUN-MER-42",
  "gtin": "0123456789012",
  "offers": {
    "@type": "Offer",
    "url": "https://yourstore.com/products/merino-wool-runner",
    "price": "98.00",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock",
    "itemCondition": "https://schema.org/NewCondition"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.7",
    "reviewCount": "213"
  }
}
</script>

Keep availability synced with real stock. An agent drops products with stale availability, because it will not send a buyer to a listing it cannot trust.

The rule that trips up most stores: render it server-side

This is the single most common reason a well-built store gets ignored by AI shopping. Many stores inject their Product schema with JavaScript, through an app or a theme script that runs after the page loads. It validates perfectly when you test it in a browser, because your browser runs the JavaScript. But many AI crawlers do not. To them, the raw HTML has no Product schema, so the page looks empty and the product cannot be recommended.

The fix is to output the JSON-LD in the initial HTML response, server-side. On Shopify this usually means the schema lives in the theme's Liquid rather than being added by a client-side app. If you are not sure which one you have, you can check: fetch the page source without running scripts, or use a checker that reports whether your schema is server-rendered or client-rendered.

Validate twice: use Google's Rich Results Test to confirm the markup parses, and a free AI shopping checker to confirm it is server-rendered. Valid but client-rendered schema passes the first test and fails the one that matters for AI crawlers.

Check your Product schema free, in seconds

Our free AI Shopping Readiness Checker reads a product URL and tells you whether your Product and Offer schema is present, complete, and server-rendered, plus whether a GTIN, reviews, and trust signals are in place. If your schema is client-rendered and invisible to AI crawlers, it flags that as the top fix and gives you paste-ready JSON-LD. No signup, nothing stored.

Check my product free →

Two of these fields are really operational, not technical. Accurate availability depends on your inventory being correct, which is where EZStock keeps stock and availability in sync so your in-stock signal stays true. And aggregateRating only helps if you are actually collecting reviews and outputting the schema, which PopBoost handles with visible, schema-backed rating widgets.

For the wider strategy, the guide on getting recommended in ChatGPT Shopping puts this schema in context, and the AI shopping readiness checklist turns it into a page-by-page pass you can run.

Frequently asked questions

What is the minimum schema for AI shopping? Product JSON-LD with an Offer that has price, priceCurrency, and availability, plus an identifier like a GTIN, a brand, and AggregateRating. That is the core set ChatGPT, Perplexity, and Google AI use to understand and compare products.

Why does my schema validate but still not get read? It is almost always client-rendered. The markup is correct, but it is injected by JavaScript after load, so a non-JavaScript AI crawler never sees it. Move it into the server-rendered HTML.

Do I need Review schema and AggregateRating both? AggregateRating (the summary star rating and count) is the priority, because it is the compact signal agents cite. Individual Review nodes add depth but the aggregate is what you want first.