Either offers, review, or aggregateRating should be specified | Fixed


Like I have mentioned in a previous article this statement is an error message you will receive from Google search console, specifically for your product pages if you have structured data markup, but written poorly. This is the most common error out there as most online stores use deprecated micro-data or badly written schema.

Having this issue does not mean your page does not get indexed by google. It will get indexed, but Google will never generate rich results snippets for it, no matter how high it ranks. Rich results snippets can make quite a difference in traffic and conversion rates as visitors will most likely follow a link from Google that has more information related to it such as ratings and prices right in the search results.

These snippets are generated by search engines if your website offers any type of structured data associated with the items on each page. The most commonly used type is schema type. It is easier to maintain and write.

A typical product item`s schema will have these attributes:

  • Type
  • Description
  • Name
  • Url
  • Image
  • Brand
  • SKU ( or other global identifier )
  • Offers
  • aggregateRating
  • Review

There are more attributes that can be used, but the above list covers those that are necessary to generate a rich result snippet. The error will show up in case one of those properties are missing from your schema structure.

This issue did show up at some point fore some people even if the structured data contained all the properties. After some intense troubleshooting we found out the issue was caused by some <meta> tags with "price" itemprop in the wrong place. Google understood that there was a price on the page, but the offers were not declared. The solution was to remove all the HTML micro-data from the website and use schema structured data instead. 

Solving the issue

Even if you do not have values for any of those fields, at least one of them should be present in the schema structure. Otherwise you will only get errors and no benefits.

The Offers attribute is the easiest to use since your products must have prices. In order to solve the error if you are using schema structured data, use the code below and insert it inside your product object and change the variables with your product`s details.

The Offers should look like this: 

"offers":  {
              "@type": "Offer",
              "availability": "https://schema.org/InStock",
              "priceCurrency": "USD",
              "price": "22.35",
              "priceValidUntil": "2021-02-23",

             "itemCondition": "https://schema.org/NewCondition",

             "url": YOUR_PRODUCT_URL,
            "image": "PRODUCT_IMAGE",
            "mpn": "MPM",
            "sku": "SKU",
            "seller": {
                   "@type": "Organization",
                  "name": SHOP_NAME
             }
}

The above solution, however, works only in case you are using schema structured data. It is possible that your store has HTML micro-data inside the markup. In this case, my recommendation is to remove all that micro-data and switch to schema structured data.

If you do choose to keep using micro data, you can find below an example of offers written with micro-data. In order to use the code snippet, copy-paste it on your product page, somewhere at the beginning of the file.

<div itemprop="offers" itemtype="http://schema.org/Offer" itemscope>
       
<link itemprop="url" href="https://example.com/anvil" />
       
<meta itemprop="availability" content="https://schema.org/InStock" />
       
<meta itemprop="priceCurrency" content="USD" />
       
<meta itemprop="itemCondition" content="https://schema.org/UsedCondition" />
       
<meta itemprop="price" content="119.99" />
       
<meta itemprop="priceValidUntil" content="2020-11-05" />
       
<div itemprop="seller" itemtype="http://schema.org/Organization" itemscope>
         
<meta itemprop="name" content="Executive Objects" />
</div>


After adding the offers information to the product object, you can use Google Structured Data Testing tool to check everything is working fine. You will still see some warnings stating that the review field or aggregateRating field is recommended and to add values for them. These are just warnings and if you do not have real values to add you can leave them like that.

If you do not get any more errors while testing the page, you can go back to your Search Console and submit the pages for validation. Even if you have some warnings, Google will generate rich results snippets for your products.

Make sure to check which of these approaches suit your website. Do not mix them, as that can also cause unwanted errors or warnings.


Leave a comment


Please note, comments must be approved before they are published