Skip to content

Review stars not showing in Google for a local business: Google's rule, and what to do instead

Google does not show review stars for a rating of a business that sits on the business's own website, in its markup or in an embedded reviews widget. It has said so since September 16, 2019. A local business's stars appear on its Business Profile, from reviews people leave on Google.

By
WP Ministry
Published
Tested on
WordPress 7.1.3, PHP 8.3.35

In short

  • Since September 16, 2019, Google has not shown review stars for LocalBusiness or Organization markup where the business controls the reviews about itself.
  • A reviews widget from another site, embedded on your own pages, counts the same. Google's page names Google Business reviews and Facebook reviews widgets as examples.
  • Stars can still show for a product, a recipe, a course, a book, an event, a movie and software, and for a business reviewed on someone else's site.
  • A local business's stars are on its Business Profile in Search and Maps. They come from reviews left on Google, not from the website's markup.
  • Google said in 2019 that the markup need not be removed and brings no manual action by itself. Other review guidelines on the same page can.
  • Keep the LocalBusiness markup and take the rating out of it. Ask every customer for a review the same way, with no reward.

If you added review or rating markup to your business's own website and no stars appear beside it in Google, the markup is probably not broken. Google does not show stars for a business's reviews of itself on its own site. Its documentation for review snippets says:

If the entity that's being reviewed controls the reviews about itself, their pages that use LocalBusiness or any other type of Organization structured data are ineligible for star review feature.

Google announced this on September 16, 2019, and it has applied since. The stars people see for a local business are on its Business Profile, in Search and in Maps, and they come from reviews left on Google. Nothing on your WordPress site switches them on.

The rule, in Google's words

The announcement is a post on the Google Search Central Blog, "Making Review Rich Results more helpful", dated Monday, September 16, 2019. It names the two types, LocalBusiness and Organization, "and their subtypes". Google's page for local business markup gives Restaurant, DaySpa and HealthClub as examples of subtypes. The rule covers them all.

The post defines the term it introduced:

We call reviews "self-serving" when a review about entity A is placed on the website of entity A - either directly in their markup or via an embedded third-party widget.

Three details from the same post matter to a site owner.

  • It covers ratings as well as reviews. Asked whether the change applies to AggregateRating too, the post answers: "Yes. It applies to Review and AggregateRating."
  • A widget does not get around it. Asked about a third-party widget that displays reviews of the business, the post says Google Search will not display review snippets for those pages, because "Embedding a third-party widget is seen as controlling the process of linking reviews." Today's documentation gives "Google Business reviews or Facebook reviews widget" as its examples.
  • Real reviews are not an exception. The post calls this self-serving "because the entity itself has chosen to add the markup to its own pages, about its own business or organization". The test is whose website the markup is on, not whether the reviews are genuine.

What can still show stars

The rule is about a rating of the business, not about everything a business publishes. Google's review snippet page lists what a rating can be attached to today:

Google's listTypes
Features that can show a ratingBook, Course list, Event, Local business, Movie, Product, Recipe, Software App
Other schema.org types it supports reviews forCreativeWorkSeason, CreativeWorkSeries, Episode, Game, MediaObject, MusicPlaylist, MusicRecording, Organization

Two entries carry a condition. Local business is listed "only for sites that capture reviews about other local businesses", and Organization only for sites that capture reviews about other organizations. A directory or a review site can show stars on its page about your business. You cannot show them on yours.

So a shop's product pages may show stars, from customers' reviews of each product, while its home page will not. WooCommerce schema markup covers the product side. Even for a supported type, Google's general guidelines say that structured data "enables a feature to be present, it does not guarantee that it will be present".

Where a local business's stars do appear

A web result for your siteYour Business Profile
Where it is seenThe ordinary list of results in Google SearchThe panel for the business in Search, and its listing in Maps and the local results
Where a rating comes fromMarkup on the page, for the types listed aboveReviews people leave on Google
A rating of the business itselfNot shown, by the rule aboveShown as the review score

Google's help for Business Profiles says reviews show next to the profile in Maps and Search, and that the review score is the average of all the ratings published on Google for the business. A profile may also show reviews from other review sites, and the business cannot choose which.

Asked whether the change affects a Business Profile, the 2019 post answers that it does not, "as this update only relates to organic Search". If the profile itself is missing, that is a different problem: see why a business is not showing on Google Maps.

Check what your own site sends

A rating can be in your markup without your having written it: a plugin or a theme can add one. These two commands read your home page and report what its JSON-LD holds, however it is laid out. JSON-LD is the format Google recommends for structured data. Markup written as microdata shows in the page's source as itemprop="aggregateRating" instead. Put your own address in place of https://example.com/.

The first lists the types the page declares:

bash
curl -sL https://example.com/ | tr -d '\n' | grep -o -E '<script[^>]*application/ld\+json[^>]*>[^<]*' | grep -o -E '"@type" *: *"[A-Za-z]+"' | sort | uniq -c

The second reports whether any of that markup carries a rating or a review:

bash
curl -sL https://example.com/ | tr -d '\n' | grep -o -E '<script[^>]*application/ld\+json[^>]*>[^<]*' | grep -o -E '"(aggregateRating|review)" *:' | sort | uniq -c | grep . || echo "no aggregateRating or review in the JSON-LD"

What a self-serving rating looks like

To show what the commands find, here is a must-use plugin that prints LocalBusiness markup for an invented business on the home page, with an aggregateRating inside it. It is here to be recognized, not copied.

wp-content/mu-plugins/business-markup.php
<?php
/**
 * Plugin Name: Business markup
 */
add_action( 'wp_head', function () {
	if ( ! is_front_page() ) {
		return;
	}

	$business = array(
		'@context'        => 'https://schema.org',
		'@type'           => 'LocalBusiness',
		'name'            => 'Example Plumbing',
		'url'             => home_url( '/' ),
		'telephone'       => '+1-555-555-0100',
		'address'         => array(
			'@type'           => 'PostalAddress',
			'streetAddress'   => '100 Example Street',
			'addressLocality' => 'Anytown',
			'addressRegion'   => 'CA',
			'postalCode'      => '90000',
			'addressCountry'  => 'US',
		),
		'aggregateRating' => array(
			'@type'       => 'AggregateRating',
			'ratingValue' => '4.8',
			'reviewCount' => '127',
		),
	);

	echo '<script type="application/ld+json">' . wp_json_encode( $business, JSON_UNESCAPED_SLASHES | JSON_HEX_TAG ) . '</script>' . "\n";
} );
The pattern Google ignores: a rating of the business, in the business's own markup.

With that file in place, the first command prints three types and the second finds the rating:

text
      1 "@type":"AggregateRating"
      1 "@type":"LocalBusiness"
      1 "@type":"PostalAddress"
text
      1 "aggregateRating":

An AggregateRating or a Review inside a LocalBusiness, or inside any kind of Organization, on the business's own site is the case Google's rule describes.

The same markup without the rating

This is the file with the rating taken out. The business's details stay.

wp-content/mu-plugins/business-markup.php
<?php
/**
 * Plugin Name: Business markup
 */
add_action( 'wp_head', function () {
	if ( ! is_front_page() ) {
		return;
	}

	$business = array(
		'@context'  => 'https://schema.org',
		'@type'     => 'LocalBusiness',
		'name'      => 'Example Plumbing',
		'url'       => home_url( '/' ),
		'telephone' => '+1-555-555-0100',
		'address'   => array(
			'@type'           => 'PostalAddress',
			'streetAddress'   => '100 Example Street',
			'addressLocality' => 'Anytown',
			'addressRegion'   => 'CA',
			'postalCode'      => '90000',
			'addressCountry'  => 'US',
		),
	);

	echo '<script type="application/ld+json">' . wp_json_encode( $business, JSON_UNESCAPED_SLASHES | JSON_HEX_TAG ) . '</script>' . "\n";
} );
Replace every value with your business's own details, exactly as the site shows them.

The second command now prints:

text
no aggregateRating or review in the JSON-LD

If the rating on your site comes from a plugin, the fix is that plugin's setting for review or rating markup, not this file. Clear any page cache before you check again. LocalBusiness markup on WordPress covers the properties worth having and where the markup belongs.

These commands show what your site sends. What Google then displays is its own decision, and nothing on this page can run or test that.

"But my competitor has stars"

There are four honest explanations. Run the first command above on the result's address, and note where on the page of results it was.

  • The result is a supported type. A product, a recipe, a course, an event or a software page can carry a rating of that thing. A rating of a product is not a rating of the business.
  • The result is another site's page about the business. A site that collects reviews of other businesses is the case Google's list allows, and the 2019 post says such sites can still show review snippets.
  • It was not a web result. The panel beside the results, and the listings under a map, are Business Profiles. Their stars are reviews left on Google.
  • The markup breaks the guidelines and has not been acted on. Google's general guidelines say a structured data issue "can result in a manual action", after which the page loses its eligibility for rich results. Search Console's Manual Actions report lists it as "Structured data issue". In 2019 Google said the change was rolling out slowly and that stars might still be seen "where they shouldn't be". No current Google page says why a self-serving rating would still show, or for how long, so this one is not something Google documents.

None of these is a trick to copy.

Should you remove the rating markup?

Google has answered this directly.

The 2019 post says: "No, you don't need to remove them. Google Search just won't display review snippets for those pages anymore." Asked about a penalty, it says: "You won't get a manual action just for this. However, we recommend making sure that your structured data matches our guidelines." Today's documentation links to that post and its questions, and the only consequence it names for this rule is that the pages are "ineligible for star review feature". Its page for LocalBusiness says aggregateRating and review are "only recommended for sites that capture reviews about other local businesses".

So for this rule alone, Google's stated position is that the markup is ignored, not punished. The word "just" matters, because the same page holds other guidelines, under a warning that Google may take manual action against a site that violates them. A rating a business adds about itself can break one of these as well:

  • The rating must be visible on the page. Where AggregateRating is used, "users should be able to see that aggregate rating on the page".
  • It must be your own site's reviews. "Don't aggregate reviews or ratings from other websites." A score copied from a profile on another site into your markup is a rating from another website.
  • It must be real. The page forbids fake reviews and reviews written for a benefit that is not disclosed.

The practical course is short:

  1. Step 1: Keep the LocalBusiness markup

    It tells Google the business's name, address, phone number and hours. None of that depends on a rating.

  2. Step 2: Take the rating and the reviews out of it

    Remove aggregateRating and review from the business's own markup, or switch off the plugin setting that adds them. They cannot produce stars there, and they are the part the other guidelines apply to.

  3. Step 3: Show reviews as ordinary content if you want them on the site

    A customer's words in a Quote block, with their agreement, and a link to your Business Profile where every review can be read, need no markup at all.

  4. Step 4: Run the check again

    Run the second command above. It should report no aggregateRating or review.

Getting reviews, within the rules

A local business's stars are on Google, and two sets of rules govern how reviews there may be asked for. Google's page on local results says they are mainly based on relevance, distance and popularity, that reviews and ratings are part of that, and that there is no way to request or pay for a better local ranking.

Google's policy for Maps. It does not allow a business to offer an incentive, such as payment, a discount, or free goods or services, in exchange for posting a review, or for changing or removing a negative one. It also does not allow a business to "Discourage or prohibit negative reviews, or selectively solicit positive reviews from customers". Sending only satisfied customers to the review link, sometimes sold as "review gating", is the second of those. The policy adds that a business should not pressure customers to review while on the premises, or ask for particular content.

The FTC's rule, 16 CFR Part 465. The Federal Trade Commission says it went into effect on October 21, 2024. What follows is the rule's text, and it is not legal advice.

  • Fake reviews. A business may not write, create or sell a review that materially misrepresents that the reviewer exists or had experience with the business, and may not buy one it knew or should have known did so (§ 465.2).
  • Rewards tied to what a review says. A business may not give compensation or another incentive conditioned, "expressly or by implication", on a review expressing a particular sentiment, positive or negative (§ 465.4).
  • Insiders. An officer or a manager may not write a review of the business without a clear and conspicuous disclosure of that relationship (§ 465.5).
  • Suppression. Nobody may use an unfounded legal threat, a physical threat or intimidation to prevent or remove a review. A business may not present the reviews of what it sells, in a reviews section of its own site, as most or all of those submitted while some are withheld for their rating or negative sentiment (§ 465.7).

Google's policy is the stricter of the two on rewards: it forbids any incentive for a review, whatever the review says.

What both allow is asking every customer, the same way. Google's help describes it: create a review link or a QR code from your Business Profile and put it on receipts and in thank-you emails. The FTC's rule exempts reviews that result from "generalized solicitations to purchasers" from the parts of § 465.2 about bought reviews and reviews by insiders.

Replying to reviews

Google's help says a business must be verified before it can reply. Then go to your Business Profile, select "Read reviews", and select "Reply" next to the review. The same help says:

  • Google checks a reply against its content policies before it is posted. That usually takes up to 10 minutes and can take up to 30 days.
  • The reply is public and appears as the business, not under your own name.
  • The reviewer is notified, and can still change the review afterward.

Its advice on what to write is brief: be polite, keep it short, do not use a reply to offer deals, and never share a reviewer's private information. A review can be reported from the profile, but Google's help says only reviews that violate its policies are eligible for removal, and not to report one just because you disagree with it.

When to get help

If you cannot find what adds a rating to your pages, or two plugins each print their own markup for the business, WP Ministry's local SEO service works on the website's side of this, starting with what the site's markup says. Whether stars appear anywhere remains Google's decision.

Common questions

Will a Google reviews widget on my site give me stars in search?

No. Google's documentation names an embedded third-party widget, with Google Business reviews and Facebook reviews widgets as examples, as one of the two ways a review counts as self-serving. Its 2019 post says Search will not display review snippets for pages that use one.

Do I have to remove review markup from my home page?

Google said in 2019 that you do not, and that this alone brings no manual action. Removing it is still the safer course. A rating in a business's own markup may also be hidden from visitors or copied from another site, and those break guidelines that can bring one.

Can I mark my business up as a Product to get stars?

Google's guidelines say structured data must be a true representation of the page's content, and that misleading markup can lead to a manual action. Its product documentation says product rich results only support pages that focus on a single product. A page about a business is not one.

Can I offer a discount in exchange for a Google review?

No. Google's policy for Maps does not allow any incentive in exchange for a review, and says such reviews will be removed. Separately, the FTC's rule forbids an incentive conditioned on a review being positive or negative (§ 465.4). This is the text of each, not legal advice.

More on this subject

SEO audit, done for you

SEO audit is $249. A written audit, each finding with its source, and up to 2 hours of fixes done and tested again. It starts with a free diagnosis.