Wine product schema: give Google the price and stock of every wine

Product structured data is a short block of code that tells Google a page sells a wine, what it costs and whether it is in stock. Without it Google has to guess, and your wines can miss the price and availability shown in search results and free product listings.

A Google-style search result for a wine showing its price and “In stock”, next to the Product schema that supplies them.

What product schema is

Product schema is JSON-LD: a small script block in the page that search engines read and visitors never see. Google’s product structured data documentation lists every field. For a wine page, these are the ones that matter:

FieldWhat to put in itWhy it matters
nameThe wine with its vintageIt should match what people search for
imageThe bottle photo, as a full https addressShown in results and free listings
descriptionThe first lines of your tasting notesContext for search and AI answers
skuYour Commerce7 SKUTies the page to your product feeds
brandYour winery’s nameGroups your wines together
offers.price and offers.priceCurrency48.00 and USDThe price shown under your result
offers.availabilityhttps://schema.org/InStock or OutOfStockMust match what the page says
Two search results for the same wine. Without product schema: a title and snippet only. With product schema: price $48.00 and In stock under the title.
The same wine in search, without and with product data. Example result, not a real listing.

An example for one wine

This is a complete block for a single wine. The values are examples: yours come from the wine itself.

<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "2015 Reserve Pinot Noir",
  "image": "https://sample-winery.com/images/2015-reserve-pinot-noir.png",
  "description": "Notes of rose petal, cherry and baking spice, with a long finish.",
  "sku": "15RPN750",
  "brand": { "@type": "Brand", "name": "Sample Winery" },
  "offers": {
    "@type": "Offer",
    "url": "https://sample-winery.com/product/2015-reserve-pinot-noir",
    "price": "48.00",
    "priceCurrency": "USD",
    "availability": "https://schema.org/InStock"
  }
}
</script>

One block per wine page, describing that wine only. Don’t mark up a list page as if it were one product.

The Commerce7 catch

A Commerce7 wine page is usually a template that Commerce7 fills in with JavaScript after the page loads. When product data exists at all, it is often added the same way. Google can run JavaScript, but it does so later and less reliably than reading the HTML, and AI search crawlers such as ChatGPT’s and Perplexity’s read only the HTML. Product data that is in the HTML from the start is the safer setup.

The other gaps we see most:

  • No product data at all on the wine pages.
  • Product data without price, currency or availability, the fields Google Shopping needs most.
  • A sold-out wine still marked InStock. Google Merchant Center can disapprove listings when the page and the data disagree.
  • Broken JSON. One missing comma, and Google ignores the whole block.
  • Wine pages missing from the sitemap, or blocked in robots.txt, so Google has to find them on its own, or can’t.

How to test your wine product schema

  1. Paste a wine page into Google’s Rich Results Test. Under the detected items, open Product snippets or Merchant listings and check the price and availability.
  2. Test your sold-out wine the same way. Availability should say OutOfStock.
  3. For a plain syntax check, use the Schema Markup Validator.
  4. To see what HTML-only crawlers get, open View Page Source and search for application/ld+json. If the block isn’t there, it only exists after JavaScript runs.
  5. Once Google has crawled your wines, the Product snippets and Merchant listings reports in Google Search Console show problems across every wine page at once.

Schema and product feeds work together

Schema describes each wine on its own page. A product feed sends all your wines, prices and stock to Google Merchant Center in one file, on a schedule. Google uses both, and it checks that they agree with the page. If you sell through free listings or Shopping ads, keep the page, the schema and the feed showing the same price and stock.

How to fix it

  • WordPress sites: the free Winery Integration plugin adds product data with the price and stock to every wine page, along with its own title and preview.
  • Feeds: AI Visibility & Shopping Feed sends your wines, prices and stock from Commerce7 to Google Merchant Center, Meta, Wine-Searcher and Vivino every hour.
  • Have it fixed: the site health fix ($300, fixed price) covers broken wine pages and photos, robots.txt and indexing, and the price and stock data Google reads.

Product data is one part of a wider check. The winery website audit checklist covers the rest, and the free check runs it on your site in a few minutes.

Read next

All guides