How to Fix Product Schema Missing Price on Shopify & WooCommerce

errorThe Problem

Your product pages have Product schema (JSON-LD structured data) but the 'offers' section is missing or incomplete. Specifically, the price, priceCurrency, and availability fields are required by Google for product rich results. Without them, your products won't show prices in Google search results and won't appear in Google Shopping.

trending_upWhy It Matters for SEO

Product rich results with prices get significantly more clicks than plain text results. Google Shopping listings require valid Product schema with price and availability. Missing these fields means you're invisible in Google's shopping features — while your competitors with proper schema are showing prices, ratings, and availability right in the search results.

buildHow to Fix It

  1. 1

    Most Shopify themes include Product schema automatically. First check if yours does: view a product page source and search for 'application/ld+json'.

  2. 2

    If JSON-LD exists but is missing price: your theme likely has a bug. Go to Online Store → Themes → Edit Code.

  3. 3

    Search for 'ld+json' across all files (usually in sections/main-product.liquid or snippets/product-schema.liquid).

  4. 4

    Find the Product schema block and ensure the 'offers' object includes price, priceCurrency, and availability.

  5. 5

    If no JSON-LD exists at all, add the full schema snippet below to your product template.

  6. 6

    Test your fix at: https://search.google.com/test/rich-results

foldersections/main-product.liquid (or snippets/product-schema.liquid)
{% if product %}
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": {{ product.title | json }},
  "image": {{ product.featured_image | image_url: width: 1024 | json }},
  "description": {{ product.description | strip_html | truncate: 500 | json }},
  "brand": {
    "@type": "Brand",
    "name": {{ product.vendor | json }}
  },
  "sku": {{ product.selected_or_first_available_variant.sku | json }},
  "offers": {
    "@type": "Offer",
    "url": "{{ shop.url }}{{ product.url }}",
    "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 %}"
  }
}
</script>
{% endif %}
menu_bookRead Google's official documentationopen_in_new

Related Fix Guides

Want to check if YOUR store has this issue?

Scan your site for free — get copy-paste fixes in 60 seconds.

searchScan Now — It's Free