Shopify Structured Data: Built-in vs Custom Schema and What AI Systems Actually Need
Structured data is the language that AI systems use to understand your Shopify store. When ChatGPT recommends a product, when Perplexity generates a shopping comparison, when Google AI Overviews surfaces your store in a query — they are all reading your structured data to decide what your products are, whether they are available, how much they cost, and whether customers like them.
The problem is that Shopify's built-in structured data covers the basics but leaves significant gaps. Merchants with comprehensive Product schema see a 34% higher rate of inclusion in AI shopping features compared to merchants without it. A study of 50 ecommerce domains found that updating schema markup delivers a median 22% citation lift in AI search results. The difference between "good enough" and "comprehensive" schema is measurable in revenue.
This guide covers exactly what Shopify themes include by default, what is missing, and how to add custom schema through Liquid code — with copy-paste templates for every schema type your store needs.
What Dawn and Default Themes Include
Product Schema
Every Shopify theme generates basic Product JSON-LD automatically. When a customer loads a product page, the theme outputs structured data that includes the product name, description, at least one image URL, price and currency, availability status (in stock, out of stock, preorder), and the store URL as the seller.
Dawn v15.0+ uses Shopify's structured_data Liquid filter, which generates a more comprehensive Product schema than older themes. This filter pulls data directly from the product object and outputs well-formed JSON-LD without requiring manual template edits.
Here is what a typical Dawn Product schema output looks like:
{
"@context": "https://schema.org",
"@type": "Product",
"name": "Lightweight Running Shoe",
"description": "Breathable mesh running shoe with responsive cushioning...",
"image": "https://cdn.shopify.com/s/.../shoe.jpg",
"offers": {
"@type": "Offer",
"price": "129.00",
"priceCurrency": "USD",
"availability": "https://schema.org/InStock",
"url": "https://yourstore.com/products/lightweight-running-shoe"
}
}
This baseline schema is functional but limited. It tells AI systems what the product is and how much it costs. It does not tell them what customers think about it, how it compares to alternatives, what questions buyers commonly ask, or what brand sells it.
Organization Schema
Modern Shopify themes include Organization schema on the homepage. This typically outputs the store name, URL, and logo. Some themes also include contactPoint and sameAs properties, but many do not.
Organization schema matters for GEO because it helps AI systems build an entity graph for your brand. When an AI is deciding which brands to recommend for "best running shoes," it needs to understand what your brand is, not just what products you sell. Without Organization schema, your brand is a collection of product pages with no unifying entity.
BreadcrumbList Schema
Dawn includes BreadcrumbList schema on product and collection pages, showing the navigation path from homepage to the current page. This helps AI systems understand your store hierarchy — which products belong to which collections, and how collections relate to each other.
Not all themes include this. If yours does not, you are leaving hierarchy signals on the table.
Article Schema
Shopify themes typically include basic Article schema on blog posts, with headline, author, datePublished, and image. This is important for GEO because blog content (buying guides, comparison articles, category explainers) is where many AI citations originate.
What Is Missing From Default Themes
FAQPage Schema
This is the single most impactful gap. No Shopify theme — free or paid — generates FAQPage structured data. This matters enormously because FAQ schema maps directly to how AI systems answer questions. When someone asks ChatGPT "Is the Allbirds Tree Runner good for wide feet?" the AI is looking for structured question-and-answer content to cite. Without FAQPage schema, your product page's FAQ section is just more text to parse rather than a structured data source.
Implementing FAQ schema delivers a median 28% citation lift in AI search results, making it the highest-ROI schema addition for most stores.
AggregateRating and Review Schema
Default Shopify themes do not include review schema because Shopify does not have a built-in review system. This data comes from review apps (Judge.me, Stamped, Loox, etc.), and the quality of schema output varies dramatically between apps.
Almost 9 in 10 products shown in Google AI Mode have customer ratings. If your products do not have review schema, you are invisible in the AI shopping feature that appears for 61.7% of ecommerce searches.
HowTo Schema
If you sell products that require assembly, installation, or have specific usage instructions, HowTo schema can make your content eligible for rich results and more likely to be cited by AI systems answering "how to" queries. No Shopify theme includes this.
VideoObject Schema
If your product pages include videos (demos, unboxings, tutorials), VideoObject schema helps AI systems understand and reference that content. Most themes embed videos without any structured data wrapper.
LocalBusiness Schema
If you have a physical retail location in addition to your Shopify store, LocalBusiness schema helps AI systems answer location-specific queries. This is absent from all standard Shopify themes.
CollectionPage Schema
Most themes do not output CollectionPage or ItemList schema on collection pages. This means AI systems see your collection pages as generic web pages rather than structured product listings.
How to Add Custom Schema via Liquid
The Two Approaches
Approach 1: Edit Theme Liquid Files. You add JSON-LD script blocks directly to your theme templates. This gives you full control and zero app overhead. It requires basic Liquid knowledge and comfort editing theme code.
Approach 2: Use a Schema App. Apps like JSON-LD for SEO, Schema Plus, or Analyzify generate schema automatically across all page types. This is faster to implement but adds another app to your stack (and another JavaScript file to your page load).
For most merchants, a hybrid approach works best: use an app for broad coverage across all page types, then add custom Liquid schema for high-priority pages where you need more control.
Adding FAQPage Schema via Liquid
First, create a JSON metafield for FAQs:
- Go to Settings > Custom data > Products
- Add a metafield definition: namespace
custom, keyfaqs, type JSON - The JSON structure should follow this format:
[
{
"question": "Is this shoe good for wide feet?",
"answer": "Yes, the Tree Runner runs half a size wide compared to most running shoes. Customers with wide feet typically find their standard size comfortable without needing to size up."
},
{
"question": "Can I machine wash these shoes?",
"answer": "Yes. Remove the insoles, place the shoes in a delicates bag, wash on cold with a mild detergent, and air dry. Do not put them in the dryer."
}
]
Then add this section to your product template (sections/product-faqs.liquid):
{% if product.metafields.custom.faqs %}
{% assign faqs = product.metafields.custom.faqs.value %}
<section class="product-faqs" aria-label="Frequently Asked Questions">
<h2>Frequently Asked Questions</h2>
{% for faq in faqs %}
<details>
<summary>{{ faq.question }}</summary>
<div class="faq-answer">{{ faq.answer }}</div>
</details>
{% endfor %}
</section>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{% for faq in faqs %}
{
"@type": "Question",
"name": {{ faq.question | json }},
"acceptedAnswer": {
"@type": "Answer",
"text": {{ faq.answer | json }}
}
}{% unless forloop.last %},{% endunless %}
{% endfor %}
]
}
</script>
{% endif %}
The visible <details> elements are critical. Google and AI systems increasingly verify that structured data matches visible page content. Schema without corresponding visible content risks being ignored or penalized.
Adding Enhanced Product Schema
Extend your product schema to include brand, SKU, GTIN, review data, and more:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": {{ product.title | json }},
"description": {{ product.description | strip_html | truncate: 5000 | json }},
"image": [
{% for image in product.images limit: 5 %}
{{ image | image_url: width: 1200 | json }}{% unless forloop.last %},{% endunless %}
{% endfor %}
],
"brand": {
"@type": "Brand",
"name": {{ product.vendor | json }}
},
"sku": {{ product.selected_or_first_available_variant.sku | json }},
{% if product.selected_or_first_available_variant.barcode != blank %}
"gtin": {{ product.selected_or_first_available_variant.barcode | json }},
{% endif %}
"offers": {
"@type": "Offer",
"url": {{ canonical_url | json }},
"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 %}",
"seller": {
"@type": "Organization",
"name": {{ shop.name | json }}
}
}
{% if product.metafields.reviews.rating %}
,"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": {{ product.metafields.reviews.rating.value | json }},
"reviewCount": {{ product.metafields.reviews.rating_count | json }}
}
{% endif %}
}
</script>
Adding CollectionPage Schema
Add this to your collection template to give AI systems structured data about your product listings:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "CollectionPage",
"name": {{ collection.title | json }},
"description": {{ collection.description | strip_html | json }},
"url": {{ canonical_url | json }},
"mainEntity": {
"@type": "ItemList",
"numberOfItems": {{ collection.products_count }},
"itemListElement": [
{% for product in collection.products limit: 20 %}
{
"@type": "ListItem",
"position": {{ forloop.index }},
"url": {{ shop.url | append: product.url | json }},
"name": {{ product.title | json }}
}{% unless forloop.last %},{% endunless %}
{% endfor %}
]
}
}
</script>
Adding HowTo Schema for Usage Instructions
If your products have step-by-step usage instructions stored in metafields:
{% if product.metafields.custom.how_to_use %}
{% assign steps = product.metafields.custom.how_to_use.value %}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "HowTo",
"name": "How to Use {{ product.title }}",
"step": [
{% for step in steps %}
{
"@type": "HowToStep",
"position": {{ forloop.index }},
"name": {{ step.name | json }},
"text": {{ step.text | json }}
}{% unless forloop.last %},{% endunless %}
{% endfor %}
]
}
</script>
{% endif %}
Validating Your Schema Implementation
Google Rich Results Test
Test every page type after making changes: homepage, product page, collection page, blog post, and FAQ page. The Rich Results Test shows exactly which schema types are detected and whether they have any errors or warnings.
Schema Markup Validator
For schema types that Google does not support as rich results (like CollectionPage), use the Schema Markup Validator at validator.schema.org. This validates against the full Schema.org specification rather than just Google's subset.
Test Across Multiple Pages
Do not just test one product page. Schema bugs often appear on pages with missing data — a product without images, a product without a price (preorder), or a product with no reviews. Test edge cases.
Priority Order for Implementation
If you are starting from scratch, implement schema in this order based on GEO impact:
- FAQPage schema on product pages — highest citation lift (28% median)
- AggregateRating and Review schema — required for AI shopping features (89% of shown products have ratings)
- Enhanced Product schema with brand, SKU, GTIN — improves entity resolution
- Organization schema on homepage — establishes brand entity
- BreadcrumbList schema — reinforces site hierarchy
- CollectionPage and ItemList schema — structures your catalog for AI
- Article schema enhancements on blog posts — improves content citation
- HowTo and VideoObject schema — situational, high impact if applicable
Each schema type compounds on the others. A product page with Product, FAQPage, AggregateRating, and BreadcrumbList schema gives AI systems four different structured data signals about a single page. That density of structured information is what separates stores that get recommended from stores that get ignored.