AI models don't read your product page the way a shopper does. They look for machine-readable facts first — and the place those facts live is your Product schema, the JSON-LD block in the page head. Shopify product schema for AI search is mostly a question of which fields are present. Most themes emit five. Shoppers ask about fifteen. This checklist closes the gap.
What Shopify themes emit by default
Dawn and most Online Store 2.0 themes output a basic Product object from the main-product section: name, image, description, sku, brand (from vendor) and an offersblock with price, currency and availability. That's enough for a Google price snippet. It is not enough for a model deciding whether your merino runner is the right recommendation for “wool sneakers for travel,” because merino, lightweight and machine washablearen't in it.
The checklist: fields AI answers actually use
| Field | Why it matters | Where the value lives in Shopify |
|---|---|---|
name, description | Baseline identification | Product title / description |
brand as a Brand object | Entity the model can match across sources | Vendor, or a fixed brand name |
offers.price, priceCurrency, availability | “Under $120,” “in stock” | Variant price / inventory |
material | The most common shopper qualifier | Metafield custom.material |
color, size | Variant-level answers | Variant options |
audience (suggestedGender, age) | “for women,” “for kids” | Metafield or product type path |
countryOfOrigin, manufacturer | “made in,” origin questions | Metafield |
additionalProperty (certifications, weight, care) | Category-specific qualifiers | Metafields, one per fact |
aggregateRating | Trust signal; only if you have real reviews | Your review app's metafield |
hasMerchantReturnPolicy, shippingDetails | “ships fast,” “free returns” | Policy pages / fixed values |
Implementing it in a Shopify theme
Step 1 — create the metafields
In Shopify admin, Settings → Custom data → Products. Add definitions for custom.material, custom.country_of_origin, custom.certifications (list), custom.care, and whatever your category is chosen on. Fill them for your top fifty products first — the ones that carry most of your traffic.
Step 2 — add a snippet
Create snippets/product-schema-ai.liquid. Keep the theme's existing schema (removing it can break price snippets); this one adds the missing fields. The pattern:
{%- comment -%} snippets/product-schema-ai.liquid {%- endcomment -%}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"@id": "{{ shop.url }}{{ product.url }}#ai",
"name": {{ product.title | json }},
"brand": { "@type": "Brand", "name": {{ product.vendor | json }} },
"material": {{ product.metafields.custom.material | json }},
"countryOfOrigin": {{ product.metafields.custom.country_of_origin | json }},
"additionalProperty": [
{%- for cert in product.metafields.custom.certifications.value -%}
{ "@type": "PropertyValue", "name": "certification", "value": {{ cert | json }} }{% unless forloop.last %},{% endunless %}
{%- endfor -%}
],
"offers": {
"@type": "Offer",
"price": {{ product.selected_or_first_available_variant.price | money_without_currency | json }},
"priceCurrency": {{ cart.currency.iso_code | json }},
"availability": "https://schema.org/{% if product.available %}InStock{% else %}OutOfStock{% endif %}",
"url": "{{ shop.url }}{{ product.url }}"
}
}
</script>Render it from the product template: {% render 'product-schema-ai' %} inside the main product section, or in theme.liquid guarded by {% if template.name == 'product' %}.
Step 3 — validate
Paste a product URL into Google's Rich Results Test and the Schema.org validator. Fix errors before warnings. Then open /products.json and confirm product_type and vendor are filled on the same products — the feed is what AI crawlers read first, and it must agree with the schema.
Pitfalls that undo the work
- Empty strings in JSON-LD (
"material": ""). Wrap optional fields in Liquidifchecks. - Two conflicting
Productobjects on one page with different prices. Use one, or link them with@id. - Hidden app products (shipping protection, gift wrap) with schema. Remove them from the Online Store channel.
- Fabricated ratings. If you don't have reviews, leave
aggregateRatingout.
Conclusion
Complete Shopify product schema is the highest-leverage, lowest-drama fix for AI search: an afternoon of metafields and one Liquid snippet, and every product page becomes a set of facts a model can cite instead of guess. Pair it with an llms.txt for store-level facts, then re-run the audit in a month to see which answers changed.