Rich results for products with structured data

You see them in search results a lot: product listings with added metadata, like price, availability, reviews, and specifications. However, not every site offering the same product has the same rich results, or rich snippets. This could have two reasons. One, Google doesn’t deem the site important enough to show additional metadata. Or two, the site hasn’t been — properly — enhanced with structured data. In this article, we’ll focus on data for product listings.

Update: Since the 11.0 release, Yoast SEO builds a full structured data graph for every post or page on your site! A graph is a complete piece of structured data with well-defined connections to all the different parts. Search engines now not only know what all the parts mean but also how they fit together. Want to know what it does for your website? Read all about structured data in Yoast SEO!

Structured data for product snippets

The information in rich results doesn’t just magically appear; you have to add in the data to give Google the chance to add it to the results. Even then, it’s up to Google if your data is visible or not. Google uses structured data to build the rich snippets in the search results. Yoast SEO automatically adds structured data to the most important information about your site, articles, authors and more. You can even extend it as explained in the Yoast SEO schema documentation.

The markup for structured data is taken from an open initiative called This data format is developed by several search engines to make sure data can be consistently interpreted by them. You can add all kinds of stuff, like product information, ratings, and reviews, or information about your local business.

To implement structured data, you need to offer search engines the correct markup. Microdata, RDFa, and JSON-LD are the most important technologies used to work with structured data. JSON-LD is a lightweight data format that’s easy to read for both humans and machines and appears to be favored by Google these days. Even Bing — long a JSON-LD holdout — jumped on the JSON-LD bandwagon.

Rich snippets for a Sony camera on

Increase chances of Google showing rich snippets of your WooCommerce online store in the search results: automatically add structured data with our WooCommerce SEO plugin

Works on mobile image search as well

Adding product schema structured data to your products not only lets them stand out in the regular search results, but also in image search. Google will add a Product label to the images of your product, helping searchers distinguish them from other listings. In the screenshot below, you’ll see that some retailers even get an In Stock label signalling the product is ready to ship. Awesome, right?

For inclusion in image search, Google requires a couple of properties. For the rich image listings, you must include the name, image, price and priceCurrency properties. If you want your product info to appear in the related items listing, you must also include all off the above, plus the availability property.

While searching for images of a product on your smartphone you’ll notice several pictures have labels — these are powered by product structured data

An example product

There are two kinds of product information you can show in search results. A product page describes a single product, while a shopping aggregate page describes a list with a single product along with different sellers that offer that product.

Your landing page should contain a Product type; this is the product you are selling. It should also contain a nested Offertype; this type describes how the product is sold, this includes the condition of the item, price, availability et cetera. You should present the data in the HTML code and not rewritten in JavaScript.

There are a couple of guidelines you need to follow to work with product markup. For instance, you must use it only for individual products, not a product category. You cannot use it for adult related products, and the name of a reviewer must be a valid name or team.

Example code

The code below describes an example product. In this code, you see different parts of code, plus the way JSON-LD presents these. Some highlights:

  • type: Describes what kind of product it is
  • name, image, and description: These are quite obvious
  • brand: The brand of the product
    • thing: A thing is the most generic type of item
  • aggerateRating: A nested aggregate rating of the product
    • ratingValue: Is the average rating of the product
    • reviewCount: The total number of reviews
  • offers: This an indication that the product is for sale
    • offer: An offer to provide a service or sell a product
    • priceCurrency and price: These are quite obvious
    • availability: If the product is in stock right now
    • priceValidUntil: Use this to describe when the currently set price will change — handy in case of a sale. Not required, although Search Console will moan about it
    • url: A link to the product page
  • review: A written review of the product, plus rating
    • type: The type is a review, of course
    • author: Who wrote it? Has to be a real name
    • datePublished: When was it published?
    • description: The body text of the review
    • name: The title of the review
    • reviewRating: What grade did it get (1-5)
      • bestRating: Five is the max
      • ratingValue: The rating the reviewer gave
      • worstRating: One is the lowest

This is just the tip of the iceberg. Other things you can add to your page are, among other things, availability, different kinds of product identification, like SKU, model, color, height, depth and a highPrice and lowPrice.

Here’s an example product page schema.

<title>Yoast SEO for WordPress</title>
<script type="application/ld+json">
"@context": "",
  "@type": "Product",
  "name": "Yoast SEO for WordPress",
  "image": "",
  "description": "Yoast SEO is the most complete WordPress SEO plugin. It handles the technical optimization of your site & assists with optimizing your content.",
"brand": {
  "@type": "Thing",
  "name": "Yoast"
"aggregateRating": {
  "@type": "AggregateRating",
  "ratingValue": "4.7",
  "reviewCount": "7514"
"offers": {
  "@type": "Offer",
  "priceCurrency": "USD",
  "price": "89.00",
  "availability": "InStock",
  "priceValidUntil": "2022-11-01",
  "url": ""
"review": {
  "@type": "Review",
  "author": "Hank Jones",
  "datePublished": "2016-11-01",
  "description": "Yoast SEO is a great plugin.",
  "name": "Awesome!",
 "reviewRating": {
  "@type": "Rating",
  "bestRating": "5",
  "ratingValue": "5",
  "worstRating": "1"

Ratings and reviews

One of the most eye-catching elements of a fully formed rich result is review star. Getting these, however, is not as easy as it used to be. You can read up on ratings and reviews in another article, but I’d like to highlight them here for a bit as well.

There is a small, but important difference between a rating and a review. A rating is a value a product gets on a scale from one to five. A review uses the same scale, but also adds a written explanation text to the rating.

In the code example above, we’ve added a rating and reviews section. This kind of information can be picked up by Google and shown in the search results, right beside your product listing. Recently, Google became a lot stricter in determining what types of products can get reviews in search.

Keep the following in mind when working with reviews and ratings. You should clearly refer to a specific product or service. The reviews and ratings must be visible to users from the marked-up page. Use it only for a particular product, not a category. You can only use a valid name for a reviewer, so no ‘Black Friday sale: $50 off’. Plus, ratings have to use the five-point scale.

WooCommerce & product structured data

WooCommerce is the go-to platform for WordPress users who want to run an online store. While WooCommerce automatically outputs structured data for products, it doesn’t do that in a very integrated way. This tends to append the product schema to the page instead of integrating it with the rest of the structured data on the page, like all the data about the site and brand. There’s a fix for that: the WooCommerce SEO plugin.

The WooCommerce SEO plugin is an add-on for Yoast SEO that ties all the product schema into the graph generated by the SEO plugin. This way, your product data is connected to your site’s data, which means happy search engines and a bigger chance at full rich results. It also fixes a couple of annoying errors that tend to pop up in Search Console.

This is only the beginning

We’ve only shown you the tip of the iceberg. There’s a lot more you can do with, and there’s a ton of terms you can add to make your listings even richer. is a treasure trove of structured data vocabulary. On, you can find upcoming terms.

Remember that you should never provide incorrect metadata for Google. So whatever you do, don’t forget to test your code with the Structured Data Testing Tool!

Read more: Structured data with the ultimate guide »