# Rich snippets for Shopify: how to add structured data to your store
Canonical: https://ahoiapps.com/guides/rich-snippets-for-shopify/
Updated: 2026-10-25 by the Ahoi Apps team

> Rich snippets are search results with extras like price, stock and star ratings. Google builds them from structured data (JSON-LD) on your pages. On Shopify you add it through your theme, a few lines of Liquid or an app, then check it with Google's Rich Results Test. There is no guarantee Google shows them, but without markup you are not eligible at all.

## What are rich snippets?

A normal search result shows a title, a URL and a short description. A rich snippet adds facts from the page: a product's price and availability, a star rating, breadcrumbs instead of a long URL, a recipe's cooking time and photo.

Google builds these from **structured data**: a block of machine-readable facts in your page's HTML, written in the [schema.org](https://schema.org) vocabulary. Google recommends the JSON-LD format, a small script that sits in the page and does not change what visitors see.

Structured data does more than rich snippets. Search engines and AI assistants use it to understand what a page is about, which product it describes and who sells it.

## Which schema types matter for a Shopify store?

Start with the types that match what your pages actually show:

| Schema type | Where it goes | What it can unlock |
| --- | --- | --- |
| Product (with Offer) | Product pages | Price, availability, shipping and return details |
| AggregateRating / Review | Product pages, from your review app | Star ratings in product results |
| BreadcrumbList | Products, collections, blog posts | A readable path instead of the URL |
| Article / BlogPosting | Blog posts | Headline, image and date in news and article features |
| Organization | Home page | Your logo and brand details |
| LocalBusiness | Home or contact page, if you have a shop | Address and opening hours |
| Recipe | Recipe blog posts | Photo, rating, cooking time in recipe results |
| FAQPage and HowTo | Pages with real FAQs or step-by-step instructions | Structure for search engines and AI; see the note below |

> **Note.** Since 2023 Google shows FAQ rich results only for a small number of authoritative government and health sites, and it no longer shows HowTo rich results. The markup is still worth adding where it matches the page: it costs nothing and gives search engines and AI assistants a clean structure.

## Does my Shopify theme already add structured data?

Often, partly. Many themes output basic Product markup, and Shopify's own themes use the `structured_data` Liquid filter for products and articles. What is usually missing: review ratings, breadcrumbs, Organization data, and markup on non-product pages.

Check before you add anything. Paste a product URL into Google's [Rich Results Test](https://search.google.com/test/rich-results) and look at which items it detects. Do the same for a collection, a blog post and your home page.

## How do I add rich snippets to Shopify?

There are three ways. All of them end in the same JSON-LD in your pages.

### 1. Edit the theme yourself

Shopify's `structured_data` filter is the quickest manual route for products:

`sections/main-product.liquid`:

```
<script type="application/ld+json">
  {{ product | structured_data }}
</script>
```

If you need more control, you can write the JSON-LD by hand. A minimal Product block looks like this:

`snippets/product-schema.liquid`:

```
{%- assign variant = product.selected_or_first_available_variant -%}
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": {{ product.title | json }},
  "image": {{ product.featured_image | image_url: width: 1200 | prepend: 'https:' | json }},
  "description": {{ product.description | strip_html | json }},
  "sku": {{ variant.sku | json }},
  "offers": {
    "@type": "Offer",
    "price": {{ variant.price | divided_by: 100.0 | json }},
    "priceCurrency": {{ cart.currency.iso_code | json }},
    "availability": "https://schema.org/{% if product.available %}InStock{% else %}OutOfStock{% endif %}",
    "url": {{ request.origin | append: product.url | json }}
  }
}
</script>
```

This works, but you own it: every theme update, new review app or new page type means more hand-written markup.

### 2. Hire a developer or agency

Worth it for complex catalogs or custom setups. Ask for JSON-LD (not microdata), for markup on every template, and for a plan for keeping it current when the theme changes.

### 3. Use an app

An app adds and maintains the markup without theme edits, and usually reads ratings from your review app. Check which schema types it covers, which review apps it supports, and whether it works with your theme's existing markup.

Recommended app: [Easy Rich Snippets for SEO](https://ahoiapps.com/apps/easy-rich-snippets-for-seo/): Structured data for products, reviews and your shop.

## How do I test my structured data?

1. **Rich Results Test** ([search.google.com/test/rich-results](https://search.google.com/test/rich-results)) shows which rich results a page is eligible for, and any errors.
2. **Schema Markup Validator** ([validator.schema.org](https://validator.schema.org)) checks all schema.org types, including ones Google has no rich result for.
3. **Google Search Console**, under Enhancements, lists valid items and errors across the whole store once Google has recrawled it.

Test one page per template, not just one product: product, collection, blog post, home page.

## Which mistakes should I avoid?

- **Duplicate Product markup.** Theme and app both output Product data with different values. Keep one source.
- **Markup that does not match the page.** Prices, ratings and stock in the JSON-LD must be what visitors see. Google can ignore or penalise markup that does not match.
- **Incomplete offers.** A Product without price, currency or availability is rarely eligible for product snippets.
- **Ratings without real reviews.** Only mark up ratings that come from customers and are shown on the page.
- **Forgetting non-product pages.** Breadcrumbs, articles and your Organization data help on every page, not just products.

## The short version

1. **Check what your theme already outputs** Run a product page through Google's Rich Results Test and note which types it finds.
2. **Pick one way to add the missing markup** Theme settings, a few lines of Liquid, or an app. Use one source per type.
3. **Add the markup** Start with Product on product pages, then Breadcrumb, Article and Organization.
4. **Test every template** Product, collection, blog post and home page, in the Rich Results Test and the Schema Markup Validator.
5. **Watch Search Console** The Enhancements reports show valid items and errors as Google recrawls your store.

## FAQ

### Are rich snippets a ranking factor?

Not directly. Google uses structured data to understand a page and to decide whether it can show a rich result. Rich results can make your listing more visible and more clickable, which is where the benefit comes from.

### How long does it take until rich snippets show up?

Google has to recrawl the pages first, which can take days or weeks. Valid markup makes a page eligible, but Google decides per search whether to show a rich result.

### Do I need a review app to get star ratings?

Yes. Stars in product results come from review data (aggregateRating) on the product page. A review app collects the reviews; the structured data has to pass the rating and review count on to Google.

### Can my theme and an app both add Product markup?

They can, but two different Product blocks for the same page can conflict. Keep one source per schema type and switch off the other.
