Guide

What Product schema does a Shopify theme output? We checked Dawn

Updated ยท 6 min read

Every Shopify product page can carry structured data: a block of JSON-LD that describes the product to search engines and AI assistants in a form they can read without guessing. What goes into it is up to your theme. We looked at exactly what Dawn, Shopify's reference theme, emits on Shopify's own demo store, checked on October 6, 2026.

How to see your own product's JSON-LD

  • View the source. Open a product page, view its source, and search for application/ld+json. Each match is one block of structured data.
  • Google's Rich Results Test. Paste a product URL. Its Merchant listings section lists what Google found and what's missing.
  • The SchemaRank scanner. Paste a product URL for a 0โ€“100 score and the missing fields, no install needed.

What Dawn outputs

Dawn builds its product markup with Shopify's structured_data Liquid filter. Shopify's documentation says the filter emits a Product for a product without variants and a ProductGroup for one with variants. Here's the shape it produced for a product with six variants, with the values replaced and five variants left out:

{
  "@context": "http://schema.org/",
  "@type": "ProductGroup",
  "@id": "/products/canvas-tote#product",
  "name": "Canvas Tote",
  "url": "https://example.com/products/canvas-tote",
  "productGroupID": "7012345678901",
  "brand": { "@type": "Brand", "name": "Example Brand" },
  "category": "",
  "description": "A structured canvas tote with a laptop sleeve.",
  "hasVariant": [
    {
      "@type": "Product",
      "@id": "/products/canvas-tote?variant=41234567890123#variant",
      "name": "Canvas Tote - Natural",
      "sku": "TOTE-NAT",
      "gtin": "4006381333931",
      "image": "https://example.com/cdn/shop/files/tote-natural.jpg?width=1920",
      "offers": {
        "@type": "Offer",
        "@id": "/products/canvas-tote?variant=41234567890123#offer",
        "price": "48.00",
        "priceCurrency": "USD",
        "availability": "http://schema.org/InStock",
        "url": "https://example.com/products/canvas-tote?variant=41234567890123"
      }
    }
  ]
}

A few things worth noticing:

  • Variants are modelled the way Google documents them. The group carries the name, brand and a productGroupID, and each variant is its own Product with its own offer and a ?variant= URL.
  • GTIN appears only where a variant has a barcode. On the product we checked, that was one variant of six.
  • variesBy is missing. Google recommends it on a ProductGroup to say what the variants differ by, such as size or color.
  • category is an empty string. An empty value tells Google nothing.

What Google recommends that Dawn leaves out

Measured against Google's list of recommended properties for merchant listings, the offers are missing:

PropertyWhat it tells Google
shippingDetailsShipping cost and delivery time per country
hasMerchantReturnPolicyReturn window, method and cost
priceValidUntilHow long the price holds
itemConditionNew, used or refurbished
aggregateRating, reviewReal customer ratings, usually from a reviews app

Each one shows up as a non-critical "Missing field" warning in Search Console. How to fix each of those warnings goes through them one at a time.

When two blocks describe the same product

Reviews apps, SEO apps and some themes add their own product JSON-LD next to the theme's, so a page can end up describing the same product twice. That isn't a problem in itself, but the two must agree: the same price, the same currency, the same availability. Two descriptions that contradict each other are worse than one that's incomplete, so after installing anything that adds markup, run a product page through the Rich Results Test and compare the values.

Filling in the gaps

You have three practical options:

  • Search Console settings for shipping and returns: no code, and Google uses them ahead of markup. They don't add the fields to your pages, though.
  • Edit the theme. The structured_data filter's output can't be extended in place, so this means writing and maintaining your own JSON-LD in Liquid, and re-checking it after every theme update.
  • An app. SchemaRank audits every product against these fields, then publishes Product JSON-LD built from your Shopify data through a theme app extension, so no theme files are edited and it can be switched off in the theme editor. It adds a block next to your theme's rather than changing it, so compare the two as described above.