Shopify product schema for AI search: the JSON-LD checklist

The Product structured-data fields AI models actually extract, what Shopify themes emit by default, and how to fill the gaps with metafields and a Liquid snippet.

By Rokas · Geomint··8 min read

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

FieldWhy it mattersWhere the value lives in Shopify
name, descriptionBaseline identificationProduct title / description
brand as a Brand objectEntity the model can match across sourcesVendor, or a fixed brand name
offers.price, priceCurrency, availability“Under $120,” “in stock”Variant price / inventory
materialThe most common shopper qualifierMetafield custom.material
color, sizeVariant-level answersVariant options
audience (suggestedGender, age)“for women,” “for kids”Metafield or product type path
countryOfOrigin, manufacturer“made in,” origin questionsMetafield
additionalProperty (certifications, weight, care)Category-specific qualifiersMetafields, one per fact
aggregateRatingTrust signal; only if you have real reviewsYour 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 Liquid if checks.
  • Two conflicting Product objects 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 aggregateRating out.

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.

Free · 60 seconds · no signup

See what Google's AI actually says about your store

Twelve real shopping questions about your category, every answer verbatim, and who got named instead of you.

/