A mid-sized residential roofer came to me with a website that had almost nothing on it — thin pages, copy-pasted city pages, and a Google profile that was barely filled in. Here's every small thing I did to rank it. In plain English.
When an owner says "I have a website but it doesn't bring me any calls," this is almost always why. The site existed — but to Google's eyes it was thin, repetitive, and untrustworthy. Three problems were dragging everything down.
Google's whole job is to answer that question. It can only recommend a roofer it understands and trusts. So everything below comes down to two things: making the business easy to understand (clear content about what you do and where) and making it easy to trust (reviews, photos, a complete profile, a real website). Here is the exact order I did it in.
Put the phone number and a "Get a Free Quote" button at the very top of every page. Added the business name, address and phone (NAP) in the footer of every page, matching the Google profile exactly. Compressed images and cut the load time from 4.0s to 1.8s. Added an SSL certificate so the site shows as secure. Submitted a sitemap in Google Search Console so Google could find every page.
Rewrote every page so it actually said something: what the service is, how it's done, what it costs, why it matters, and answers to the questions homeowners actually ask. Each city page got its own real content — local neighborhoods, common roof types in that area, local weather damage, and a map. No more copy-paste. I deleted the worthless duplicate pages entirely so they couldn't drag the rest down.
Built 18 neighborhood landing pages — one for each ZIP code the owner actually serves. Each one targets "[service] in [city]" the way a real homeowner searches. They link to each other sensibly so Google understands the structure of the site, without any spammy keyword stuffing.
This is what gets you into the Maps 3-pack. It got its own full process — see the checklist below.
Listed the business on 80+ trusted directories (Yelp, BBB, Angi, HomeAdvisor, roofing-specific sites, the local chamber of commerce) with the exact same name, address and phone everywhere. Consistency tells Google the business is real. Then earned a handful of genuine local links from suppliers and a local news mention.
Set up an automatic text + email that asks every finished customer for a Google review. Replied to every single review — using the city and service naturally in the reply, which is itself a ranking signal. Reviews went from 12 to 140+ over six months.
When a hail event hit in months 3–4, I deployed a 14-day content sprint targeting "storm damage roof repair" and insurance-claim searches — exactly when local demand spiked. That's where a big chunk of the 590% click growth came from.
The "3-pack" is the little map with three businesses that shows at the top of local searches. For a roofer, ranking there is worth more than anything else — it's where the phone calls come from. This is the exact checklist I run on every client's Google Business Profile:
Google ranks the profile it understands best and trusts most. A complete, active, well-reviewed profile with consistent information everywhere is exactly what it's looking for — so it puts that roofer in the 3-pack ahead of competitors who set their profile up once and forgot it.
Six months in, total clicks were up 590%, average position moved from 32.4 to 18.6, and the business sat in the top three of the Maps pack for its core cities. Most importantly: the phone rang. No tricks, no shortcuts — just a clear, trustworthy business that Google was finally able to recommend.
If your site is thin, your city pages are copy-pasted, or your Google profile is half-finished, you're leaving the 3-pack to your competitors. The fix isn't magic — it's the checklist above, done properly and kept active. That's exactly what I do for every roofer I work with.
Free 30-minute audit. I'll point out the exact thin pages, duplicate content and profile gaps costing you calls.
Get My Free Audit