Product schema markup on Shopify: what AI agents read
Schema markup is the least mysterious part of getting understood by AI assistants: it is a block of JSON on your product page that states, in machine-readable terms, what the page is about. No interpretation, no prose to parse. When a search-grounded assistant reads your product page like a fast, literal visitor, that block is the first thing it can trust without guessing.
The good news for Shopify merchants is that you are probably not starting from zero. The useful work is checking what your theme already emits, and filling the fields it leaves empty because your product data is empty.
Step one: see what your store already outputs
Most current Shopify themes already render a Product JSON-LD block on product pages. Before you install anything or paste any snippet, check yours:
- View the page source of a product page (not the rendered DOM — the source) and search for
application/ld+json. You should find at least one block whose@typeisProduct. - Read the fields it fills. Typically you will see name, description, image, brand, offers with price and availability — populated from your product data.
- Note what is missing or empty. Blank
brand, absentgtin, adescriptionthat is one sentence long. Nine times out of ten these are not theme bugs — the theme is faithfully outputting fields you never filled in.
This is the part most “add schema markup” advice skips. Installing a second app that injects another Product block on top of the one your theme already renders gives you duplicated, sometimes contradictory markup — not better markup. Fix the source data first.
The fields that actually carry weight
Schema.org defines dozens of properties for a product. A handful do almost all the work when an assistant is deciding whether it can confidently recommend you:
- name — should match a real, specific product name, not a keyword-stuffed title. If your title signal is weak, the markup inherits that weakness.
- brand — an unnamed brand is one of the fastest ways to look like an unverifiable listing. On Shopify this comes from the vendor field, and leaving it as the default placeholder is worse than setting it to your own store name.
- gtin8 / gtin12 / gtin13 / mpn — identifiers let a model cross-check that your product is a real, current item that exists elsewhere in the world. Populated on Shopify from the variant barcode field.
- offers — price, currency and availability. Stale availability is actively harmful: an assistant that suggests an out-of-stock product once tends not to be trusted with the next answer.
- aggregateRating / review — only if you genuinely have reviews. Emitting rating markup for reviews that do not exist on the page is a policy violation with search engines and a credibility problem with models.
- description — usually mirrored from your product description, which means writing a better description improves your markup for free.
Schema is not a substitute for structured product data
Schema markup describes your product page. Shopify’s catalog feed describes your product. They overlap, but they are not the same channel, and the AI shopping surfaces that read a syndicated catalog do not depend on your theme’s JSON-LD at all. That is why category metafields matter alongside markup: the metafield is the fact in the feed, the markup is the same fact on the page. Filling one and skipping the other leaves half of your readers underserved.
What about FAQ and breadcrumb markup?
Both are worth having and neither is a lever. Breadcrumb markup helps a reader place a product inside your catalog structure — cheap, useful, do it if your theme supports it. FAQ markup is only as good as the questions inside it: three real questions shoppers actually ask, with specific answers, are worth more than a dozen invented ones written for the markup’s sake. If you would not put the answer on the page for a human, do not put it in the schema.
A realistic checklist
- Confirm your theme emits one
ProductJSON-LD block per product page — and only one. - Fill the source fields it depends on: vendor, barcode, a real description, accurate inventory.
- Validate a few product URLs with a schema testing tool and fix genuine errors (missing required fields, malformed prices).
- Skip the markup you cannot honestly populate. An absent field is neutral; a fabricated one is a liability.
None of this is glamorous, and none of it is where the differences between stores usually live — the gap is nearly always in the underlying product data, not the markup wrapper around it. But it is a short, finite list, and it is fully in your control.