toolkit

Testimonials & reviews checker · Playbook

Testimonials & reviews playbook

What makes a testimonials/reviews section trustworthy, and how to fix the defects luvdisc finds.

The trust stack — in order of what kills it first

  1. It renders nothing. A review widget whose vendor script loaded but the feed came back empty is the highest-impact defect: the page promises reviews and delivers a blank box. This is the “review widget is blank / not syncing” helpdesk ticket. Fix: log into the review provider (Birdeye, Podium, Trustindex, etc.), check the feed/location is connected and published, and re-check the page. A provider API key can expire; a feed can be paused; a location can be disconnected.
  2. It’s placeholder copy. “Lorem ipsum”, “testimonial goes here”, “add your review” inside the section body reads as fake. Real patients scroll past it and think the whole site is staged. Fix: remove the placeholder; either ship real reviews or hide the section until you have them.
  3. It’s stale. A wall of five-year-old praise on a live practice says “we used to be good.” Fix: solicit current reviews (post-visit text/email asks), or at minimum update the section.
  4. It has no schema. A page that clearly shows reviews but has no Review/AggregateRating JSON-LD gives away star rich results in Google. Fix: add an AggregateRating block (with reviewCount and ratingValue) and/or Review items. Match the visible reviews — schema that claims reviews the page doesn’t show is a different, worse defect.
  5. Nobody can leave one. A happy patient who wants to write a review has to find the practice’s Google/Yelp/RealSelf/Healthgrades profile themselves. Fix: add a “Leave a review” link (Google review shortlink, Yelp, RealSelf) near the testimonials.
{
  "@context": "https://schema.org",
  "@type": "MedicalClinic",
  "name": "Practice Name",
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "4.9",
    "reviewCount": "317"
  }
}

Review items (one per testimonial) let Google surface individual stars and quotes:

{
  "@type": "Review",
  "author": { "@type": "Person", "name": "Patient Name" },
  "reviewRating": { "@type": "Rating", "ratingValue": "5" },
  "reviewBody": "…",
  "datePublished": "2026-03-01"
}

After a fix

Re-run luvdisc. The region should report textLen ≥ 40 or at least one recognisable quote block; an added schema flips the schema readout to AggregateRating/Review; a fresh date clears the stale/no-dates findings.