Shopify Schema Markup: Fix the Gaps and Get Rich Results in Google
Last Updated: February 25, 2026 · 16 min read
Shopify themes ship with Product schema built in — at least the popular ones do. Dawn, Debut, and most themes in the Shopify theme store include basic Product JSON-LD output through their Liquid templates. That is good news. The bad news is that the default output covers only the bare minimum: product name, price, and image. The fields that actually make a difference in search — star ratings, shipping details, return policies, and product identifiers — are almost always missing. This guide walks through exactly what Shopify generates, what it misses, and how to fix it.
1. What Shopify themes generate by default
In most Shopify themes, product schema is output inside the product.liquid or a snippet it includes. It typically looks like this:
{
"@context": "http://schema.org/",
"@type": "Product",
"name": "{{ product.title }}",
"url": "{{ shop.url }}{{ product.url }}",
"image": "{{ product.featured_image | img_url: 'grande' }}",
"description": "{{ product.description | strip_html }}",
"sku": "{{ product.selected_or_first_available_variant.sku }}",
"offers": {
"@type": "Offer",
"priceCurrency": "{{ cart.currency.iso_code }}",
"price": "{{ product.selected_or_first_available_variant.price | money_without_currency | remove: ',' }}"
}
}Two problems with the default output
- 1. It uses
http://schema.org/(no trailing slash, and HTTP not HTTPS). Google accepts this but HTTPS is the current standard. - 2. The
offersblock is missingavailability,url,priceValidUntil, andshippingDetails— all recommended or required for maximum rich result eligibility.
2. The improved product schema template for Shopify
Edit your product.liquid template (go to Online Store → Themes → Edit code) and replace the existing schema block with this improved version:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Product",
"name": {{ product.title | json }},
"url": "{{ shop.url }}{{ product.url }}",
"image": {{ product.featured_image | img_url: '1024x' | json }},
"description": {{ product.description | strip_html | json }},
"sku": {{ product.selected_or_first_available_variant.sku | json }},
"brand": {
"@type": "Brand",
"name": {{ product.vendor | json }}
},
{% if product.metafields.reviews.rating.value %}
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "{{ product.metafields.reviews.rating.value }}",
"reviewCount": "{{ product.metafields.reviews.rating_count.value }}"
},
{% endif %}
"offers": {
"@type": "Offer",
"priceCurrency": {{ cart.currency.iso_code | json }},
"price": "{{ product.selected_or_first_available_variant.price | money_without_currency | remove: ',' }}",
"availability": {% if product.available %}"https://schema.org/InStock"{% else %}"https://schema.org/OutOfStock"{% endif %},
"url": "{{ shop.url }}{{ product.url }}",
"seller": {
"@type": "Organization",
"name": {{ shop.name | json }}
}
}
}
</script>3. Getting star ratings into Shopify schema
Shopify does not have built-in product reviews. You need a review app. The review app you choose determines whether star ratings appear in your schema. Here is how the most popular options handle this:
| Review app | Adds AggregateRating schema? | Notes |
|---|---|---|
| Shopify Product Reviews (free) | ✅ Via metafields | Stores rating in product.metafields.reviews — use the template above |
| Judge.me | ✅ Built in | Automatically injects AggregateRating JSON-LD. No template edits needed. |
| Loox | ✅ Built in | Adds AggregateRating automatically. Strong for photo review displays. |
| Yotpo | ⚠️ Premium only | Free plan does not include schema. Premium plan adds structured data. |
| Okendo | ✅ Built in | Outputs AggregateRating in product JSON-LD automatically. |
| Stamped.io | ✅ Built in | Adds AggregateRating. Check the schema settings are enabled. |
4. Fixing the most common Shopify schema errors
Error: Two Product schema blocks on the same page
Cause: Your theme has one, and the review app added another. Both get processed — but Google may pick only one, and conflicting properties cause errors.
Fix:
Remove the theme's original schema block and let the review app handle the full Product output. Or, edit the theme schema to remove AggregateRating since the app will add it.
Error: Price formatted with comma (e.g. "1,299.00")
Cause: Liquid's money filter includes thousands separators. The schema.org specification requires numeric price values — "1299.00" not "1,299.00".
Fix:
Always use | money_without_currency | remove: ',' in your Liquid schema output.
Error: Availability is always InStock even for sold-out products
Cause: The conditional check for product.available is missing from the offers block.
Fix:
Use {% if product.available %} to output InStock or OutOfStock based on real stock status.
Error: No breadcrumb path in search results
Cause: BreadcrumbList schema is not included in the theme, or the category hierarchy is not set up in Shopify collections.
Fix:
Add BreadcrumbList schema to your product.liquid, or install a Shopify SEO app that adds this automatically.
Error: Missing shippingDetails in schema
Cause: No Shopify theme includes shippingDetails in its default schema. This field is increasingly used by Google to show delivery estimates.
Fix:
Add shippingDetails manually in product.liquid, or use a schema app that supports it.
5. Adding Organisation and WebSite schema to Shopify
Shopify themes rarely include Organisation or WebSite schema. These are important for your brand entity and the sitelinks searchbox. Add them to your theme.liquid file, inside the <head> tag, so they appear on every page:
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "Organization",
"@id": "{{ shop.url }}/#organization",
"name": {{ shop.name | json }},
"url": {{ shop.url | json }},
"logo": {
"@type": "ImageObject",
"url": {{ settings.logo | img_url: '512x' | prepend: 'https:' | json }}
},
"sameAs": [
"REPLACE_WITH_FACEBOOK_URL",
"REPLACE_WITH_INSTAGRAM_URL"
]
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"@id": "{{ shop.url }}/#website",
"name": {{ shop.name | json }},
"url": {{ shop.url | json }},
"potentialAction": {
"@type": "SearchAction",
"target": {
"@type": "EntryPoint",
"urlTemplate": "{{ shop.url }}/search?q={search_term_string}"
},
"query-input": "required name=search_term_string"
}
}
</script>6. After making changes: validation checklist
View page source on a product page — you should see the updated JSON-LD with correct availability, no commas in prices, and your brand name in the seller field.
Paste the product URL into SchemaValidator.org. Check for errors on Product type — especially missing required fields and formatting issues.
Go to the Google Rich Results Test and enter a product URL. Confirm it detects Product, Offer, and AggregateRating (if you have reviews).
Check Google Search Console → Enhancements → Products for existing errors. After your edits deploy, errors should reduce and valid items should increase.
Test on a product with zero reviews and a product with reviews. Both should validate cleanly — one without AggregateRating, one with it.
Frequently Asked Questions
Does Shopify automatically add JSON-LD structured data to my store? ▼
Most paid Shopify themes (Dawn, Debut, Prestige, etc.) include basic Product JSON-LD output, but only for product pages and only with minimal fields — typically name, price, and image. Category/collection pages, the homepage, About page, and blog posts typically have no schema. Shopify itself does not add Organisation, WebSite, or BreadcrumbList schema. For a complete schema strategy, you will need to either edit your Liquid templates or use a dedicated Shopify SEO app.
My Shopify product pages show schema errors in Google Search Console. What are the most likely causes? ▼
The four most common causes: (1) Price formatted with commas — "1,299.00" instead of "1299.00" — fix by adding | remove: ',' to your Liquid money filter. (2) Missing availability field — Google requires InStock/OutOfStock in the offers block. (3) Two conflicting Product schema blocks — one from your theme and one from a review app — causing duplicate or contradictory data. (4) Missing required fields like offerCount or seller in multi-variant products. Use SchemaValidator.org to paste your product page URL and see exactly which errors are present.
Which is better for Shopify schema: editing Liquid templates or using an app? ▼
Editing Liquid templates gives you full control and zero ongoing app cost, but requires developer access and maintenance. Apps like TinyIMG, Smart SEO, or JSON-LD for SEO handle it automatically and update when Shopify changes. The best approach depends on your situation: if you have a developer and a custom theme, editing templates is cleaner. If you are on Dawn or a standard theme and not comfortable with code, a well-maintained SEO app is more reliable. Review apps like Judge.me add review schema automatically regardless of which approach you choose for other schema types.
Does Shopify support shippingDetails in product schema? ▼
Not by default — no Shopify theme includes shippingDetails in its product schema output. Google increasingly uses shippingDetails to show estimated delivery times in search result rich snippets. You can add it manually to your product.liquid template using Shopify variables for your shipping zones and rates, but it is complex to implement correctly for stores with multiple shipping zones and carrier-calculated rates. The JSON-LD for SEO app (by Ilana Davis) supports shippingDetails with Shopify Markets integration.
I am using Yotpo reviews. Will star ratings appear in my Shopify product schema automatically? ▼
Yotpo adds AggregateRating schema automatically on paid plans — but not on the free tier. On the free plan, Yotpo only provides on-page review widgets without JSON-LD output. If you are on a free Yotpo plan and need review schema, switch to Judge.me (which includes schema on all plans including free), or upgrade to a Yotpo paid plan. Always verify by running your product URL through the Rich Results Test to confirm AggregateRating is detected.
Should my Shopify collection pages have schema? ▼
Collection pages are a common schema blind spot on Shopify. They should have BreadcrumbList schema (showing Home > Collection Name), and optionally ItemList schema listing the products in the collection. Most Shopify themes do not include ItemList schema for collections. While Google does not currently use ItemList for rich results on collection pages, it improves Google's understanding of your product catalogue structure and can help with internal entity linking between products and their categories.
How do I add schema to a Shopify blog post? ▼
Shopify blog posts are a missed opportunity — they usually have no Article schema by default. Add Article or BlogPosting JSON-LD in your blog post template (article.liquid). Include: headline (the post title), datePublished, dateModified, author (Person with name and optionally URL), image (the featured image), and publisher (Organisation). This can unlock Google Discover appearances and Top Stories eligibility if you are approved as a Google News publisher. You can inject this via a code block in article.liquid or using a custom snippet.
My Shopify store sells internationally. How do I handle multiple currencies in product schema? ▼
For international stores using Shopify Markets, the recommended approach is to output the store's primary/base currency in the schema offers block. Use cart.currency.iso_code to output the currency dynamically based on the current session, but be aware this can cause inconsistent schema if Googlebot crawls in a different locale than your base currency. Most SEO practitioners recommend hardcoding the base currency in schema (e.g. "USD") for consistency with Google's index, while relying on Shopify's storefront for actual currency conversion display.
Validate Your Shopify Product Schema
Enter a product URL from your Shopify store. Get an instant report on availability formatting, missing AggregateRating, and rich result eligibility.
Validate Shopify Schema →Related Guides
→ E-commerce Schema Markup
Full guide to Product, Offer, and Review schema for online stores
→ Schema Markup for WordPress
Schema strategy for WooCommerce stores and WordPress sites
→ Google Rich Results Guide
Product rich results, star ratings, and price snippets explained
→ Schema Markup Checker
How to validate Shoify product and review schema
→ Schema Markup Audit
Audit your entire Shopify store for schema gaps
→ What is JSON-LD?
Understanding the JSON-LD format used in Shopify Liquid templates