I'll be more than happy if someone could give me any hint where I could be wrong. Some time ago the site of a client got a spammy microdata penalty. The situation was following - one local business markup sitewide and one product markup for each of the service pages with prices and ratings (real ratings, from trust pilot, displayed on the site). I got a hint that I was using the trust pilot ratings wrong, as the rating was for the business but I displayed it for the separate services.

So far so good, it made sense to display business ratings in business microdata. I removed completely the product one and migrated the ratings in Local Business (more specifically "HomeAndConstructionBusiness", as it's the best match for the site's business).

Again - the rating is a real one, I got it with Trust Pilot API call, no fake testimonials. The other info in the markup is as complete as it could be, following all guidelines that could be followed. Virtually the live microdata is copy-pasted from the Local Business examples (of course with the relevant information).

I sent a reconsideration request ~2 weeks ago and I just got my rejection for it, as it "doesn't follow the guidelines". I have no idea what to do, as it's just LocalBusiness microdata presented the same way it's presented in any example in schema.org and... well, in every site about that (not talking about my experience). Here is a link to the microdata in the rich snippet test tool pointed in the rejection as "violating" the rules.

EDIT: Here is the original note I got: A note from your reviewer:

Please see https://developers.google.com/search/docs/guides/intro-structured-data#structured-data-guidelines for information on structured data quality guidelines. For example, review and rating markup should be used to provide review and/or rating information about a specific item, not about a list of items. Here is an example that is not following the guidelines: {https://www.fantasticservices.com/professional-oven-and-bbq-cleaning/}

So, where is the violation of the guidelines?

  • It might help to see the original notice you recieved. There may be some clues in the notice. Please know that Google uses some algorithms to validate the reviews as being realistic. As well, if the reviews are available elsewhere, Google will compare what it sees between the various sites. I am not saying that is what is happening, however, I thought that information may help. You may want to talk to TrustPilot and see if they can help identify the problem. They may have an idea. Cheers!!
    – closetnoc
    Jan 19, 2017 at 21:03
  • @closetnoc, thanks for looking it up. The reviews in the markup are indeed a day or two behind, so there could be a difference of 5-10 votes between the rating in the content and the one that is marked up. However we are talking about 1200+ reviews, so i don't believe this could be a reason, as +/- 10 votes doesn't change the rating so much with 1200 votes. The reviews in the site are the same as the ones in the original source (trust pilot in this case), as we feed them directly in real time. I talked with TrustPilot, but there is nothing wrong nowhere.
    – ePetkov
    Jan 20, 2017 at 12:22
  • I am clueless then. I do not use mark-up though I will again. I did use reviews back in the days when no-one seemed to care. ;-) Ooopppsss. If I think of anything, then I will chime in again. Cheers!!
    – closetnoc
    Jan 20, 2017 at 16:44
  • It sounds to me like they want review microdata only to be used for specific products. Maybe using it for services (like oven cleaning) isn't allowed. Or maybe they think that the oven cleaning pages is not for a specific company, but allows you to book oven cleaners from many different companies. Jan 27, 2017 at 11:54

1 Answer 1


As the first, your example page https://www.fantasticservices.com/professional-oven-and-bbq-cleaning/ includes two different, not nested JSON-LD snippets. This is a massive cause for bad interpretation of structured data on the page: think, how Google should decide, what is the main thing on the page, your localBusiness markup or Product?

As second: you don't offer products, but your markup does. It is a service, what you offer. This could be the second cause of misinterpretation of your structured data by Google.

As third, your review/rating markup belongs to product, that is wrong, because you offer no products.

It is true: google's raters aren't the best writers, their emails mislead often.

To make your markup guidelines-proven and streamlined you should firstly decide, what do you want should be rated. In general there is only one possibility to rate/review your page, which fulfills Google's guidelines: it should be rating of your localBusiness, which provides this or that service. Google writes here: refer clearly to specific service. But not to service itself! Note: it is a rating of business, how good or bad it provides a given service.

Correct markup for example page should look like:

<script type="application/ld+json">
"@context" : "http://schema.org",
"@type" : "ProfessionalService",
"aggregateRating": {
"@type": "AggregateRating",
"ratingValue": "8.3",
"bestRating": "10",
"worstRating": "1",
"reviewCount": "1292"
{"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "Oven %26 BBQ Cleaning",
"sameAs": "https://en.wikipedia.org/wiki/Commercial_cleaning",
"url": "https://www.fantasticservices.com/professional-oven-and-bbq-cleaning/"
"url" : "https://www.fantasticservices.com/",
"image" : "https://www.fantasticservices.com/wp-content/uploads/2016/10/fantastic-pros-1-1.png",
"name" : "Fantastic Services",
"priceRange": "££",
"telephone" : "020 3404 3444",
"contactPoint" : [{
"@type" : "ContactPoint",
"telephone" : "+44 20 3404 3444",
"contactType" : "Customer Service"
}] ,
"openingHours" : "Mo-Su 08:00-22:00",
"paymentAccepted" : "Cash, Credit Cards",
"address": {
"@type": "PostalAddress",
"addressLocality": "London",
"postalCode": "SE1 2TH",
"streetAddress": "98 Tooley Street" 
"geo": {
"@type": "GeoCoordinates",
"latitude": "51.5043105",
"longitude": "-0.0827881"
"hasMap": "https://www.google.com/maps/place/Fantastic+Services/@51.4991109,-0.087624,15z/data=!4m5!3m4!1s0x0:0x41a17cd8609f141c!8m2!3d51.4991109!4d-0.087624",
"areaServed": {
"@type": "AdministrativeArea",
"name": "London",
"address": "London, United Kingdom"
"logo" : "https://www.fantasticservices.com/wp-content/themes/fantasticservices-master/static/css/images/logos/logo.svg",
"sameAs" : [ 

PS: you don't need to escape slashes in url. But special characters, as & should be percent-encoded, as i've done with %26

  • actually Product could be used for services too, it's official, as a Service is also kind of product. Anyhow - actually the current state of the Microdata (the not nested one, with Local Business and Product is what make the penalty lifted. The penalty itself was for structured data exactly as your example. Virtually the same. That's why I was so surprised to see it banned - it was written by the book.
    – ePetkov
    Feb 13, 2017 at 8:48

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.