Run by Claude

Contractor Testimonials Page: How to Collect, Display, and Markup Written Testimonials for SEO

A testimonials page does something Google reviews can't: it puts specific, searchable text under your control on your own site. Here's how to collect, format, and markup it for Google and AI search.

MurphJune 25, 20265 min read

Google reviews give you stars. Your testimonials page gives you text.

That distinction matters more than it used to. AI search tools — ChatGPT, Perplexity, Google AI Overviews — don't cite star ratings. They cite specific information. A customer who describes your roofing process, your timeline, and what surprised them gives AI systems something to work with. A four-star average doesn't.

See what your AI visibility score looks like right now →


What a Testimonials Page Actually Does

A testimonials page isn't a wall of praise. It's structured content that does three things:

First, it puts specific text on your domain. Google reviews live on Google's platform. Angi reviews live on Angi. Your testimonials page lives at yourdomain.com/testimonials — under your URL, indexed under your authority, readable by every search engine and AI crawler that visits your site.

Second, it gives you control over format. You can organize testimonials by service type. You can label each one with the city and the job scope. You can include a photo of the customer. None of that is possible in a Google review format.

Third, it creates on-site content that matches how people search. A customer who says "we had a slab leak that three other plumbers couldn't locate" is describing a real problem in real language. That language shows up in search queries. Your testimonials page can rank for it.


What You're Competing Against

Most contractor testimonials pages fail because they're generic. A page of floating quote boxes that say "great service, fast, professional, highly recommend" — with no names, no cities, no service types, no dates — reads like stock content. It doesn't convert and it doesn't rank.

The testimonials pages that work have three things:

  1. Specific job context — what service, what city, what the situation was
  2. The customer's actual words about the outcome — not "great work," but "we had the same leak for four years and they found it in twenty minutes"
  3. Schema markup — so Google and AI tools understand what they're reading

That third one is what separates a page that converts from a page that ranks.


How to Collect Testimonials That Are Actually Useful

The typical contractor testimonial request is "would you write something nice?" and the result is three sentences that don't help anyone.

Three specific questions get better responses every time.

1. "What were you dealing with before you called us?"

This surfaces the problem in language that matches how homeowners search. "Water damage in the garage after heavy rain" is a search query. "Needed a new contractor" is not. Customers who answer this question give you content that connects to the exact searches that find you.

2. "What surprised you about working with us?"

This captures differentiators you wouldn't think to claim. Customers say things like "they pulled permits without me asking" or "they were the only ones who explained what they were doing before they did it." That's your competitive positioning, in someone else's words.

3. "What would you tell someone considering hiring us?"

This is word-of-mouth language. Answers to this question are ready to use: "Just call them. Don't waste time getting three quotes from contractors who won't call you back." That line converts better than anything you'd write about yourself.

Send these questions by text two days after job completion — after they've already posted a Google review, while the experience is still clear. A short message: "Really appreciate your business. Mind if I ask you three quick questions for our website? Just honest thoughts — takes 5 minutes." Keep the bar low and response rates stay high.


What Every Testimonial Entry Needs

Each entry on the page should have:

  • First name and last initial (or full name if they're comfortable — ask)
  • City — "Sarah M., Akron" ties the testimonial to a location
  • Service type — "Roof replacement" or "Slab leak repair" tells Google what the review is about
  • The text — their actual words, unedited except for typos
  • Date — month and year keeps the page looking current

Optional but high-value: a photo of the customer (with permission), or a before/after image from their job linked to the testimonial.

Find out what your website is missing →


Where the Page Goes and How to Structure It

/testimonials is the cleanest URL. It's what people type, it's what Google indexes, and it makes internal linking simple.

Structure the page so each testimonial is a distinct block — not a slider, not a rotating carousel. Sliders hide content from crawlers. Static blocks mean every testimonial is readable, indexable, and anchor-linkable.

Organize by service category if you do multiple trades. A plumber who does water heaters, slab leaks, and remodels benefits from grouping: "Water Heater Replacements," "Slab Leak Repairs," "Remodel Plumbing." This lets the page rank for service-specific queries and makes it easier to link from individual service pages to the relevant testimonial section.

Link from every service page to the testimonials page. A line at the bottom of your water heater service page — "See what homeowners say about our water heater installs →" — adds an internal link signal and converts fence-sitters.


The Schema Markup

Add this as a JSON-LD script block in your testimonials page head:

{
  "@context": "https://schema.org",
  "@type": "LocalBusiness",
  "name": "Your Business Name",
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "5",
    "reviewCount": "12"
  },
  "review": [
    {
      "@type": "Review",
      "author": {
        "@type": "Person",
        "name": "Sarah M."
      },
      "datePublished": "2026-05",
      "reviewBody": "We had the same leak in the garage ceiling for four years. Three different contractors looked at it and couldn't find the source. They found it in one visit, fixed it the same day, and patched the ceiling. Haven't had an issue since.",
      "reviewRating": {
        "@type": "Rating",
        "ratingValue": "5",
        "bestRating": "5"
      }
    }
  ]
}

Update reviewCount when you add entries. Update ratingValue if you're averaging anything below 5.

This schema tells Google you have structured review data on your own domain. It also tells AI search systems — ChatGPT, Perplexity — exactly what each entry is: who said it, when, and what they said. That specificity is what gets you cited.


The Page That Doesn't Exist Is the Biggest Problem

Contractors who have fifteen years of satisfied customers and zero testimonials on their website are leaving the most powerful conversion tool on the table. The reviews exist — they're on Google, on Angi, in texts they saved. They just aren't on the site.

A testimonials page with three strong entries, properly marked up, linked from every service page, takes an afternoon to build. Once it's up, every new testimonial you collect goes on the page and strengthens the markup. The page compounds.

See how your site stacks up against competitors in your area →


Quick Action List

  1. Pick your three strongest customers — the ones who gave the most detail
  2. Text them the three questions: before/surprise/recommend
  3. Create /testimonials with static blocks (no sliders)
  4. Include name, city, service, date, and their actual words on each entry
  5. Add JSON-LD schema with AggregateRating and individual Review objects
  6. Link from every service page to the relevant testimonial section
  7. Add one new testimonial per month — set a calendar reminder for the 1st

Want to see how your business stacks up?

Get a free brand audit — we'll show you what's working, what's not, and what to fix first.

Free Brand Audit →
Jason Murphy

Written by

Murph

Jason Matthew Murphy. Twenty years building digital systems for businesses. Former CardinalCommerce (acquired by Visa). Now running VibeTokens — a brand agency for small businesses that builds websites, content, and growth systems with AI.

AI-Powered Brand Maintenance · From $199/mo

Your competitor's SEO doesn't stop when you close your laptop. Keywords, content, GBP posts, schema — we keep your brand active so you don't have to.

See What's Included →

Your brand is your first impression.

Find out if it's costing you customers.

Free brand audit. We analyze your online presence, competitors, and messaging — then tell you exactly what to fix.

Get Your Free Brand Audit →