Skip to content
ShopSEO
Free tool

Free schema markup generator

JSON-LD for products, FAQs and more, written for you.

Built in your browser as you type. Nothing is sent anywhere.

Your JSON-LD

Paste it into the page's HTML

JSON-LD
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product"
}
</script>

Or let Shopify fill it in

For every product

This snippet builds the same markup from each product's own title, image, price and stock. Add it as snippets/product-schema.liquid in your theme and render it in the product template. Remove any other Product markup first so there is only one.

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 }},
    "description": {{ product.description | strip_html | strip | truncate: 5000 | json }},
    "url": {{ request.origin | append: product.url | json }},
    {%- if product.featured_image -%}
      "image": {{ product.featured_image | image_url: width: 1200 | prepend: 'https:' | json }},
    {%- endif -%}
    {%- if variant.sku != blank -%}
      "sku": {{ variant.sku | json }},
    {%- endif -%}
    "brand": { "@type": "Brand", "name": {{ product.vendor | json }} },
    "offers": {
      "@type": "Offer",
      "url": {{ request.origin | append: variant.url | json }},
      "priceCurrency": {{ cart.currency.iso_code | json }},
      "price": {{ variant.price | divided_by: 100.0 | json }},
      "availability": "https://schema.org/{% if variant.available %}InStock{% else %}OutOfStock{% endif %}"
    }
  }
</script>

Check every page, every week

ShopSEO runs these checks across your whole store, not one page, and fixes most of what it finds. The full audit is on the Free plan.

Install free on Shopify
How to use it

Three steps, no account.

  1. 1

    Pick a type

    Product, Organization, FAQ, Breadcrumb, Local business or Blog post.

  2. 2

    Fill in the form

    Only what you fill in is used; empty fields are left out of the markup.

  3. 3

    Copy and test

    Paste the JSON-LD into your page, then check it with the schema validator.

About the tool

What it checks

Pick a type, fill in a short form and copy valid JSON-LD for products, your organization, FAQs, breadcrumbs, a local store or a blog post. For Shopify product pages there is also a Liquid snippet that fills the markup in from each product automatically, so it never goes out of date.

ShopSEO checks this across your whole store and fixes it for you. Structured data in the app

  • Product, Organization, FAQ, Breadcrumb, Local business, Blog post
  • Valid JSON-LD, with empty fields left out
  • A Shopify Liquid snippet for every product page
  • Runs in your browser; nothing is sent
Reading the results

What each number is telling you.

A report you cannot interpret is just a longer way of saying something is wrong.

  • JSON-LD

    The format Google recommends for structured data: a script tag holding a description of the page that search engines read and shoppers never see.

  • The Liquid snippet

    Instead of fixed values, it reads each product's title, image, price and stock, so one snippet covers the whole catalog and stays accurate.

  • Required and recommended

    Products need a name and an offer with a price to show price and stock in Google. Ratings only belong when the reviews are real and on the page.

Why it matters

The mechanism, not the platitude.

  • 01

    Price and stock in the result

    Product markup is what lets Google show your price, availability and ratings right in search results.

  • 02

    AI answers read it too

    Assistants and AI search use structured data to understand what a page sells, the same way search engines do.

  • 03

    Themes often get it wrong

    Many themes emit partial or duplicate markup. Writing it once, correctly, removes the guesswork.

Common findings

What this usually turns up, and the fix.

Four problems that account for most of what this tool reports on a Shopify store.

The finding

Two Product blocks on one page

Why it happens

The theme and an app both add markup.

The fix

Keep one: switch off the app's markup or remove the theme's, then add this snippet if needed.

The finding

Ratings that aren't on the page

Why it happens

Review counts copied into markup without visible reviews.

The fix

Only add ratings that shoppers can see on the same page; Google can ignore or penalise them otherwise.

The finding

Price without currency

Why it happens

A hand-written Offer missing priceCurrency.

The fix

Always pair price with a currency code; the Liquid snippet uses your store's.

Limits

What this will not tell you.

Every tool has a boundary. Knowing where this one ends is what keeps you from over-reading it.

  • It writes markup from what you enter. Make sure every value matches what the page shows.
  • Valid markup makes a page eligible for rich results; Google still decides whether to show them.
Questions

About this tool.

Something missing? Ask us.

Run this continuously instead.

Install ShopSEO free, run your first audit in under a minute, and roll back anything you do not like. No credit card, no theme edits, no lock-in.

New on the Shopify App StoreFree plan, no credit cardPremium $19.99 a month, 7-day free trial