Product schema (JSON-LD) for Shopify: how to get read by ChatGPT and AI search
Product JSON-LD is the single biggest signal an AI shopping assistant reads. Here is exactly what to add, with a copy-paste example.
When a shopper asks ChatGPT, Perplexity or Google's AI mode to find them a product, software reads your store instead of a person. That software does not look at your design. It reads your HTML, and the first thing it looks for is Product structured data, also called Product schema or JSON-LD.
If it is not there, the assistant has to guess what you sell and for how much. It usually guesses wrong, or just picks a competitor whose page it can read cleanly. This is the number one reason a store gets skipped. In a small sample of apparel stores we graded, 8 in 10 had no Product schema on the page an assistant reads, which is a large, common gap rather than a rare one. (That figure is from a limited sample of stores we scanned, not a market-wide census.)
What Product schema actually is
It is a small block of JSON in your page's HTML that states the facts of a product in a format machines trust: the name, the price, whether it is in stock, and its rating. You do not show it to the shopper. You put it in the page for the assistants and search engines that read it.
Here is a minimal, valid example for a single product:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Merino Crew Sweater",
"image": "https://yourstore.com/img/merino-crew.jpg",
"description": "Midweight merino crew, machine washable.",
"brand": { "@type": "Brand", "name": "Your Store" },
"offers": {
"@type": "Offer",
"price": "129.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock"
},
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "4.7",
"reviewCount": "212"
}
}
</script>The fields that matter most
You do not need every field. In order of impact:
- price and priceCurrency inside
offers. Without a machine-readable price, an assistant cannot put you in a comparison at all. - availability. Assistants filter out anything they cannot confirm is buyable.
- name and description. These let the assistant confirm the product matches what the shopper asked for.
- aggregateRating. When two products are otherwise equal, the one with structured ratings wins.
A common mistake is having the price only inside an image or styled text with no schema. The shopper can read it. The assistant cannot.
How to add it on Shopify
Most themes let you edit the product template. Add the script block to the product page template and populate it from your product fields with Liquid, so it stays in sync as prices change. If you would rather not touch theme code, an app or a developer can drop it in once and it keeps working.
After you add it, test it with Google's Rich Results Test and the Schema Markup Validator. Both will tell you if a required field is missing.
The catch with doing it by hand
The example above is one product. A real store is the work. You need the schema on every product template, populated from your live fields so it stays correct when prices and stock change. You need the price in the HTML, not just styled text. You need to handle variants, sale prices and out-of-stock states, or you feed assistants wrong data and get filtered out anyway. Then you have to validate it and confirm an assistant actually reads it.
None of that is hard once. It is tedious at catalog scale, and easy to half-do in a way that still gets you skipped. That is the part most owners do not want to own.
How to check where you stand
The fastest way to see what an assistant sees is to read your own page source: search for application/ld+json with a Product type, confirm your price and availability are in there, then validate it with Google's Rich Results Test and the Schema Markup Validator.
If you would rather see every signal scored in one pass, ShelfGrader reads your live page the way an AI assistant does, tells you whether your Product schema is present and complete, and ranks the fixes by impact, free in about a minute.
Frequently asked questions
What is Product schema?
Product schema is a small block of JSON-LD in your page's HTML that states a product's facts in a machine-readable format: name, price, currency, availability and rating. Shoppers never see it; AI assistants and search engines read it to confirm what you sell and for how much.
Which Product schema fields matter most for AI assistants?
Price and priceCurrency inside offers come first, because without a machine-readable price an assistant cannot place you in a comparison at all. Then availability, then a clear name and description, then aggregateRating as a tiebreaker.
How do I add Product schema on Shopify?
Edit your product template and add a JSON-LD script block populated from your product fields with Liquid, so it stays in sync as prices and stock change. Then validate it with Google's Rich Results Test and the Schema Markup Validator. An app or developer can also drop it in once.
Does Shopify add Product schema automatically?
Not reliably. Many Shopify themes emit partial Product schema, often just a name and price, and some emit none on the page an assistant actually reads. So the safe answer is to check rather than assume: view your live product page source and search for application/ld+json, or grade the page. Where the schema is missing or thin, you add it.
How do I handle variants, sale prices, and out-of-stock in schema?
Each buyable variant should expose its own price and availability, your sale price should be the price in the markup rather than only a struck-through style, and an out-of-stock item should say so with availability set to OutOfStock. Get this wrong and you feed assistants stale or incorrect data, which can get you filtered out even though schema is present.
How do I validate my Product schema?
Run the page through Google's Rich Results Test and the Schema Markup Validator at schema.org. Both read a live URL and flag missing or malformed fields. Valid schema is what an assistant trusts; broken schema can be worse than none, because it can feed wrong facts and get you skipped.