Your Shopify theme shows a nice visual, a price, a buy button. But what answer engines read is another, invisible layer: `schema.org/Product` markup. It's what turns your page into data an AI can understand, compare and cite. And on most stores, that layer is incomplete — or missing. Here's what to structure, and how.
Why markup matters (especially for AI)
Structured markup isn't new: Google has used it for years for rich results (stars, price, availability). But with answer engines it takes on new importance. A model that must answer "which running shoes for wide feet?" needs named facts — size, fit, use — not a marketing paragraph. schema.org/Product is the standard format to give it those.
What Shopify already exposes — and what's missing
Good news: most recent Shopify themes already inject basic Product markup. Bad news: it's often minimal. You get the name, the price, sometimes availability — but rarely the brand, almost never the GTIN, and hardly ever the decisive attributes of your industry. Variants make it worse: a product with several sizes or colors is often poorly represented.
- Often present:
name,offers.price, sometimesavailability. - Often missing:
brand,gtin/mpn, a cleanimage, a factualdescription. - Almost always absent:
additionalProperty(your decisive product attributes).
The properties that really matter
Identity: name, brand, gtin
These three fields anchor your product in reality. The name should be descriptive (not "Product 1"), brand associates you with your brand, and gtin (EAN/UPC barcode) is the universal identifier linking your product to comparisons, databases and other merchants. Without a GTIN, your product floats alone, hard to match.
Decisive attributes: additionalProperty
This is the most neglected field, and the most powerful for GEO. additionalProperty holds free name/value pairs: "Skin type: sensitive", "Fit: wide", "Compatibility: USB-C". These are exactly the constraints a shopper puts in a question. Fill in the 3 to 6 attributes that decide the purchase in your industry, and you give the model something to cite.
The offer: price, priceCurrency, availability
Price and availability are volatile but essential facts: an AI avoids recommending a sold-out product or one with an uncertain price. Above all, make sure they're consistent with your feed and visible page — a contradiction here is costly (see below).
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Chaussure de running — Pieds larges",
"brand": { "@type": "Brand", "name": "Northpeak" },
"gtin13": "0123456789012",
"mpn": "NP-RUN-WIDE-42",
"image": "https://cdn.example.com/run-wide.jpg",
"description": "Chaussure de running, chaussant large, amorti…",
"additionalProperty": [
{ "@type": "PropertyValue", "name": "Chaussant", "value": "Large" },
{ "@type": "PropertyValue", "name": "Usage", "value": "Route" },
{ "@type": "PropertyValue", "name": "Drop", "value": "8 mm" }
],
"offers": {
"@type": "Offer",
"price": "89.00",
"priceCurrency": "EUR",
"availability": "https://schema.org/InStock",
"itemCondition": "https://schema.org/NewCondition"
}
}This block directly answers "running shoe for wide feet, road, under €100?": fit, use, price and availability are explicit. That's the difference between being citable and being invisible.
The Shopify case: metafields over theme
On Shopify, two paths to enrich markup. Editing the theme (Liquid): doable, but fragile — every theme update can break your additions, and handling variants quickly becomes a headache. Or going through metafields: you store structured attributes on the product, and an app injects them as JSON-LD without touching the visible theme. It's more robust, additive, and survives theme changes.
That's the approach Citely favors: enriching the machine layer via metafields, from your real data, without modifying your storefront. But the principle holds whatever the tool: separate the presentation layer from the data layer.
Validating your markup
- Google's Rich Results Test: checks that your
Productis read correctly and flags errors. - Schema Markup Validator (schema.org): validates conformance to the vocabulary.
- Check consistency: the JSON-LD price and stock must match the page and the feed.
A nice theme seduces the shopper. Good markup convinces the machine.
Common mistakes
- Duplicate markup: theme + app each injecting a
Product, creating conflicts. - Price without currency or in a non-normalized format.
- Missing GTIN when it exists on the packaging.
- Attributes in free text in the description instead of usable
additionalProperty.