Displaying reviews on your website properly: where to place them, why your widget is invisible to AI, and what review schema is actually allowed to do.

You did the hard part. Ninety reviews on the Google Business Profile, a 4.8 average, customers naming the person who did the work. Then you open your own website and find three testimonials in italics on the About page, no names, no dates, one of them from a company you stopped serving in 2023.
Displaying reviews on your website is the half of the job nobody writes about, because collecting them feels like progress and arranging them feels like decoration. It is not decoration. Where a review sits, whether a crawler can see it, and what words it happens to contain now decide whether that review does any work outside Google Maps.
This post covers where reviews belong, why the widget you are paying for may be invisible to a search engine, the Google rule about review markup that catches nearly every local business out, and how the phrasing in your reviews becomes the phrasing an AI assistant uses when it recommends you to somebody.
Key takeaways
- Google does not show star ratings for reviews a business publishes about itself. The self-serving review rule has applied to LocalBusiness markup since 2019 and still holds.
- You can legitimately mark up reviews of a specific product or service you sell, which is where local businesses still earn review snippets.
- A review loaded by a third-party JavaScript widget may never appear in the HTML an AI assistant fetches, because most assistants do not run scripts.
- Put reviews about a particular job on the page that sells that job, not in one long testimonials list.
- Reviews naming the service, the town and the outcome are the ones an AI assistant can reuse. "Brilliant, thanks" gives it nothing to work with.
The default pattern is a testimonials page linked from the footer, which is roughly the least useful place a review can be. Nobody visits it at the moment they are deciding, and it reads to a search engine as praise detached from anything specific.
A florist in Bury St Edmunds should have wedding reviews on the wedding page, funeral tribute reviews on the funeral page and corporate contract reviews on the corporate page. Never one big list. The reason is not tidiness. It is that a review saying "they did the flowers for our wedding at Hengrave and the bouquets were still perfect at midnight" is evidence about the wedding service, and it is only evidence if it is next to the wedding service.
The same logic applies to a garage with separate MOT, servicing and diagnostics pages, or a plumber with an emergency callout page. A generic five star quote about "great service" on the emergency page proves nothing about whether you actually turn out at eleven at night.
On a service page, one strong specific review in the first screen does more than eight further down. People are not reading your reviews so much as checking they exist. Put one where they will see it without scrolling and put the rest lower, near the enquiry form, where they do the second job of removing the last hesitation.
A quote with a first name, a town and a month attached is a different object from an anonymous one. "Karen, Great Barton, June 2026" tells a human this is real and tells a machine when it happened and where. Anonymous italic praise reads like copywriting, because most of the time on most websites it is.
Most embedded review widgets work the same way. A small script loads after the page does, calls out to the provider, gets the reviews back as data and writes them into the page in your browser. Which is fine for a person and unreliable for everything else.
Google can render JavaScript, but rendering is a second pass and is not guaranteed for every page on a small site. Language models are stricter. When ChatGPT, Claude or Perplexity fetch a page, they usually take the raw HTML the server sends and never execute a script. If your reviews only exist after JavaScript runs, an assistant sees a service page with no proof on it.
There is a ten second test. Open the page, press Ctrl+U or Cmd+Option+U for the page source, then search that source for a phrase from one of your reviews. If it is not there, the review is not in your HTML.
| How the review is on the page | Read by Google | Read by an AI assistant |
|---|---|---|
| Plain text in the page HTML | Yes, immediately | Yes |
| Third-party script that injects reviews | Usually, on the render pass | Usually not |
| Reviews inside an iframe | Treated as separate content | Rarely |
| Screenshot image of a review | Only the alt text | Only the alt text |
The fix is not to bin the widget. Keep it if you like the live feed, and put the four or five reviews that actually matter into the page as plain text underneath it. Written once, they never change, and they are the ones doing the ranking work anyway. Every site we build on our website plans from £189 a month handles reviews this way as a matter of course, with the markup in the page rather than bolted on.
This is where most advice on the subject is quietly wrong, including advice we have seen from agencies who should know better.
Google will not show star ratings in search results for reviews a business publishes about itself. Their phrasing is that reviews which can be perceived as self-serving are not in the user's interest, and the rule means a review about entity A placed on the website of entity A does not qualify for a review snippet. It has been policy since 2019 and it applies whether you write the JSON-LD yourself or a plugin writes it for you.
So if somebody has promised you stars in the Google results by adding LocalBusiness markup with an aggregateRating to your homepage, that is not going to happen. At best it is ignored. At worst you collect a structured data manual action.
The exception is worth knowing, because it is where local businesses still get snippets. Review and AggregateRating markup is valid on a specific product or service you sell, as opposed to on your business as an entity. A garage marking up reviews of its air conditioning regas service, a clinic marking up reviews of a specific treatment, an ecommerce shop marking up reviews of a product: all fine, all eligible.
The practical rule is that the markup has to describe the thing being reviewed, and the thing being reviewed cannot simply be you. There is more on how the wider structured data picture fits together in our guide to why your website needs schema markup.
Stars are not the only reason to use structured data. Schema states plainly, in a format built for machines, that this text is a review, this is who wrote it, when, and what it scored. That matters more than it did, because an assistant summarising your business is doing exactly the extraction schema was designed for. No star in the blue links, but an answer engine that is confident about what your customers said.
Ask an assistant for a dog groomer in Bury St Edmunds and it does not run a ranking algorithm. It assembles an answer from whatever it can find and trust: your Business Profile, your website, directories, and the words other people have written about you. Reviews are unusually valuable in that mix because they are the only part written by somebody other than you.
What comes out is a paraphrase built from the vocabulary it found. Two groomers, both excellent, both 4.9 stars. One has reviews saying "lovely people, dog came back happy". The other has reviews saying "she is calm with anxious rescues, does hand stripping on terriers, and they are on the Moreton Hall side so parking is easy". Only one gets named when somebody asks for a groomer who is good with a nervous dog.
The pattern is what counts, not any one review. Three separate customers mentioning emergency callouts is a claim about you. One is an anecdote. This is the same mechanism behind getting your business cited by ChatGPT in the first place, applied to the one body of text on the internet you do not write.
You cannot tell customers what to write. You can remind them what they bought, which is a different thing and entirely within Google's rules. "Thanks for having us in for the wet room last week" produces a review that mentions a wet room. "Please leave us a review" produces "great service". The prompt does the work and the customer still says whatever they honestly think.
Getting that flow running in the first place is a separate discipline, covered properly in our post on how to get more Google reviews on a thirty day plan. If you would rather it ran without you, our review growth system at £95 a month asks every customer at the right moment and handles the replies.
A review on a page is not just the quote. The context around it is what makes it credible to a person and legible to a machine.
What to leave out: surnames without permission, star graphics rendered as images with no text alternative, and the carousel that shows one review at a time and rotates every four seconds. Carousels hide four fifths of your proof behind an interaction nobody performs. Reviews are also only one of several things a visitor is checking for, and the rest are covered in our piece on the website features that build trust for a Suffolk business.
Four checks, none of which need a tool you have to pay for.
Run the fourth one every couple of months. It changes faster than anything else on this list, and it is the only check that tells you what a customer using an assistant instead of a search box is actually being told about you.
Yes. Google and AI assistants read your website separately from your Business Profile, so reviews appearing in both places strengthen the picture each system builds. Copy the four or five most specific reviews into the relevant service pages as plain text, credit them as Google reviews, and link to your profile so anyone can check them.
Indirectly, and usefully. They will not earn star ratings in search results because of Google's self-serving review rule, but they add relevant, customer-written language to the page, they lift conversion rate, and they give AI assistants concrete material to quote. Treat them as content and proof rather than as a ranking trick.
Use Review or AggregateRating on the specific product or service being reviewed, not on your business as a whole. LocalBusiness markup carrying your own aggregate rating is classed as self-serving and will not produce a review snippet. Keep LocalBusiness schema for your name, address, phone number, hours and area served instead.
Usually because those stars come from somewhere Google controls, such as a Business Profile in the map pack, or from a third-party review platform's own page rather than the business site. Occasionally a site does have non-compliant markup that has not been caught yet. Copying it is not a plan worth making.
Not bad, just insufficient on its own. Widgets add a third-party script that slows the page and usually renders after load, which means the review text may be missing from the HTML an AI assistant fetches. Keep the widget if you want the live feed, and duplicate your best reviews in the page as plain text.
It assembles an answer from multiple sources, typically your website, your Google Business Profile, directories and reviews, and looks for consistency between them. Repeated themes in review text carry more weight than any single review. A business described the same way everywhere, in specific language, is far easier for a model to recommend confidently.
Pick your three busiest service pages. Find the two best reviews for each of those exact services, paste them in as plain text with a first name, a town and a month, and delete the anonymous italic quotes that have been there since launch. That is an afternoon, and it closes the most common gap between having good reviews and those reviews doing something.
Then run the view-source check. If your reviews are not in the HTML, that is the next job, and a bigger one than it sounds, because it usually means changing the template rather than the content. It is the difference between a page a language model can quote and one it can only guess at. We built the Suffolk Garden Maintenance site around that problem.
If you want the markup, the placement and the wording handled as part of the build rather than as a job you keep meaning to get to, send us the address of the page you like least and we will tell you what a crawler currently sees on it.