Skip to content
Back
SEO WooCommerce Shopify

Product schema markup (JSON-LD) for rich results

by E-shop Guru ·
Product schema markup (JSON-LD) for rich results

When a Google result shows a price, "In stock", star ratings and delivery cost, it stands out from the rest. None of that appears by accident. It comes from structured data: code that tells search engines exactly what is on the page. For e-shops the most important type is Product schema, usually written as JSON-LD.

Schema is not a direct ranking factor. It does help Google understand the page, makes it eligible for rich results, and can lift click-through rate.

Two kinds of product rich results

Google splits product rich results into two groups:

  • Product snippets: for pages that talk about products (e.g. reviews), with stars and price.
  • Merchant listings: for pages where the visitor can buy the product. These support more: price, availability, shipping, returns, and placement in areas such as the Shopping tab.

As an e-shop, merchant listings are your main target.

The core fields

A sensible, reasonably complete example:

{
  "@context": "https://schema.org",
  "@type": "Product",
  "name": "Maria leather shoulder bag, brown",
  "image": [
    "https://www.example.gr/images/maria-brown-1.webp",
    "https://www.example.gr/images/maria-brown-2.webp"
  ],
  "description": "Handmade shoulder bag in natural leather...",
  "sku": "MAR-BR-01",
  "gtin13": "5201234567890",
  "brand": { "@type": "Brand", "name": "Example Leather" },
  "offers": {
    "@type": "Offer",
    "url": "https://www.example.gr/maria-shoulder-bag-brown",
    "priceCurrency": "EUR",
    "price": "89.00",
    "availability": "https://schema.org/InStock",
    "itemCondition": "https://schema.org/NewCondition"
  },
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.7",
    "reviewCount": "23"
  }
}

Which properties are required versus recommended changes from time to time. Check Google's current documentation for Product and Merchant listing structured data before you implement.

Fields worth adding

  • GTIN (EAN) and MPN: they identify the product uniquely. Essential for branded goods, and the same identifiers your Skroutz and Google Merchant Center feeds need.
  • shippingDetails: delivery cost and time (e.g. for Greece).
  • hasMerchantReturnPolicy: your returns policy, e.g. 14 days and who pays return shipping.
  • Variants: for products with colours and sizes, Google supports a ProductGroup structure with hasVariant. Worth it if you have many variants.

Shipping and returns can also be configured in Google Merchant Center if you use it.

The golden rules

  1. Whatever the schema says must be visible on the page. Price, availability, reviews. If the schema says €89 and the page says €99, that is a problem, and in Merchant Center it can get products disapproved.
  2. Real reviews only. Stars from reviews that are not on the page, or that you wrote yourself, violate Google's guidelines.
  3. One source of truth. The theme, the SEO plugin and a reviews plugin often each output their own Product schema. The result is duplicate or conflicting data.
  4. Dynamic prices. If prices change with sales or coupons, the schema must reflect what the shopper actually sees on the page.

WooCommerce and Shopify

WooCommerce: WooCommerce itself outputs basic Product schema. Yoast WooCommerce SEO and Rank Math extend it (brand, GTIN and so on). The usual issue is overlap: confirm that only one of them produces the final markup. For GTIN, make sure there is a product field for it and that it is actually filled in.

Shopify: most modern themes include Product schema. Check whether it includes the barcode (GTIN), brand (vendor) and reviews. Review apps often inject their own markup, so look for duplicates.

Custom shops: generate JSON-LD in the product template from your database. An automated test that compares the schema price with the on-page price is well worth having.

How to test

  • Google's Rich Results Test: shows whether the page is eligible and which fields are missing.
  • Schema Markup Validator (validator.schema.org): checks general validity.
  • Search Console → Enhancements: "Product snippets" and "Merchant listings" reports with site-wide errors and warnings.

Warnings (e.g. "Missing field shippingDetails") do not block rich results, but they show where you can improve. Errors need fixing.

Common mistakes

  • Price with a comma or symbol: "price": "89,00 €" instead of "89.00".
  • Availability hard-coded to InStock, even for sold-out items.
  • aggregateRating with zero reviews.
  • Schema injected by JavaScript only after user interaction.
  • Product schema on category pages for every product in the grid. Product markup belongs on the product page.

Schema, feeds and AI search

The data that goes into your schema (price, GTIN, brand, availability) also feeds your Skroutz, BestPrice and Google Merchant Center feeds. Keep it in one place, accurate and complete, and you win three things at once: correct rich results, fewer feed disapprovals and consistency across every channel.

There is a fourth benefit as well. Search engines and AI tools answering questions like "where can I buy X at the best price" rely on structured, consistent product data. Clean Product schema does not guarantee you will appear there, but inconsistent data certainly does not help.

What to do after every change

Every update to your theme, review plugin or SEO plugin can alter your schema without you noticing. Keep three or four sample pages (a simple product, a product with variants, an out-of-stock item, one with reviews) and run them through the Rich Results Test after any significant change.

Checklist

  • [ ] One, and only one, Product schema per product page
  • [ ] name, image, description, brand, sku, GTIN where available
  • [ ] offers with correct price, currency and availability
  • [ ] Shipping and returns (in schema or Merchant Center)
  • [ ] Reviews only if real and visible
  • [ ] Rich Results Test passes without errors
  • [ ] Search Console monitored after every update

Schema is one of the better effort-to-reward technical fixes, especially when your data (GTINs, brands, stock) is already tidy for your feeds. If you would like us to check yours, see our e-commerce SEO service or contact us.

Related Articles

Want your e-shop to sell more?

Tell us where you are today and we will suggest the first steps, with no obligation.

We use cookies to improve your experience. Learn more in our Cookie Policy.