- Local SEO works best when you fix what already exists before you build anything new.
- Most small service businesses rank higher and make more money by focusing on intent based local pages, not generic website fluff.
- A clean internal link structure plus a few real local links can lift a small site faster than another 50 weak blog posts.
- If you stop chasing national vanity terms and focus on local buyers ready to call today, your revenue can swing wildly in your favor.
A home services company paid a mid 5 figure SEO fee and made a little over 1.9 million in trackable revenue in 12 months, and the playbook behind it is surprisingly simple: fix Google Business Profile first, build high intent local pages second, layer in local content, clean up internal links, then add a handful of real links that actually move the needle while ignoring almost everything else.
I am going to walk you through the exact approach we used, where it worked, where it was weaker than I liked, and how you can copy the thinking without copying the details or getting yourself into trouble with shortcuts that look good on Twitter but do nothing in the real world.
Key context before we start
I am not going to pretend this is some magic trick, because it is not; this only worked because the business had real capacity, answered the phone, and actually showed up on time, which is the part people forget while obsessing over title tags.
The niche here was not garage doors, it was a local emergency water damage and mold cleanup company in a mid sized US metro where people search in a panic, pick up the phone, and often book on the first or second call they make.
| Factor | Before | After 12 months |
|---|---|---|
| Monthly organic calls | ~40 | ~420 |
| Avg job value | $1,150 | $1,350 |
| Tracked SEO revenue (12 months) | ~$90,000 | $1,900,000+ |
| Ad spend | Heavy Google Ads | Cut by ~55% |
| Main traffic source | Brand name + paid | Non brand local intent search |
Most of the lift did not come from fancy tools or tricks; it came from fixing obvious local search gaps that the owner kept ignoring for years.
If you run any kind of local service business, from pest control to roofing to family law, you can steal this structure, but you will need to adjust the details to your city, your margins, and how fast you want to grow.

Fixing Google Business Profile before touching the website
The competitor story you shared gets one thing right that many SEOs still resist: your Google Business Profile often matters more than your website in the first 3 to 6 months, and pretending otherwise slows you down.
Why GBP comes first for local services
When someone searches for something like “emergency water removal near me” or “24 hour mold inspection” on a phone, the first thing they see is usually the map pack, and those three results often get more taps than the ten blue links under them.
So fixing the profile before arguing about page speed or hero images is not just logical, it is almost boringly obvious, yet many agencies still rush to redesign the site and leave the listing half finished.
The starting point: a weak, half filled listing
This client had a GBP that looked like a rushed side project: blurry logo, no cover image, categories not set correctly, a short two line description, and only three reviews over two years, one of which complained about late arrival.
Tracking was a mess too, because calls from GBP were not tagged, so the owner trusted his gut and thought “Google is not doing much” while in reality a decent chunk of jobs already came from map searches.
The cleanup: photos, categories, reviews, and real details
We did not reinvent anything fancy here; we just treated the profile as a main sales asset instead of a formality.
- Replaced stock like images with real on site photos: wet carpets, drying equipment, team in marked vans, before and after shots where privacy was safe.
- Set the primary category to “Water damage restoration service” and added secondary categories for “Mold remediation” and “Fire damage restoration” instead of the old generic “Cleaning service” label.
- Wrote a clear description that used natural language and core phrases people actually search, such as “24/7 emergency water removal in [CITY]” and “licensed mold remediation” without stuffing.
- Fixed open hours to match real emergency coverage, including late evening and weekend availability, which changed how often they showed for “near me” at odd hours.
- Added services with short descriptions and price ranges to set expectations, since surprise quotes were a big complaint in this niche.
Most local profiles fail not because of some secret algorithm twist, but because no one treats them like a living sales page that needs maintenance.
Building real reviews without begging or gaming the system
The competitor story talks about grabbing ten reviews fast, which is fine, but I think that target is too low in markets where people face real damage and big bills.
We aimed for 50 new reviews in the first 6 months, and we got to 63, not by offering gift cards or playing games, but by adding review capture into the job workflow.
- Techs carried small cards with a simple short link and QR code that went straight to the review form.
- The office followed up by SMS within 24 hours of job completion with a friendly note from the owner, not some cold system template.
- We asked for detail, not stars: “Would you mind writing a sentence about what happened and how our team handled it?”
About one in three customers left a review, which is high for this space, and many mentioned response time or empathy, which helped future searchers trust them more than competitors with short, vague reviews.
Tracking calls and messages from the profile
I see many SEOs skip this part, maybe because call tracking numbers and UTM tags feel like admin work, but if you do not track this, you are almost blind when you try toconnect results back to revenue.
- We used a local call tracking number that forwarded to the main line and set that as the primary GBP phone number.
- We added UTM parameters to the website URL on the listing so Google Analytics could separate visits from the map pack and branded search.
- We tracked message leads from GBP via the app and had the office commit to reply in under 10 minutes during waking hours.
This gave us clear numbers: in month one, GBP delivered 38 tracked calls; by month nine, that number was 170, and it felt real for the owner because he could see the calls in his phone log, not just a chart in a slide deck.
Where we could have done better
To be honest, we were a bit slow on adding Google posts and Q&A content, which I thought was fine at first, but later data showed that competitors with strong Q&A entries often grabbed more long tail impressions.
If you are starting now, treat Q&A as mini FAQ pages right inside your listing, especially for “do you work with insurance” and “how fast can you arrive” type questions, because people do read those before tapping call.

Building local money pages that match buyer intent
The biggest shift in this campaign did not come from the blog or technical tweaks; it came from tearing out generic service pages and replacing them with targeted city plus intent pages that spoke to people in a mild panic.
Why generic service pages quietly kill conversions
The original site had a single “Services” page that listed water damage, mold cleanup, and fire restoration with two line descriptions and a generic “Contact us today” button buried at the bottom.
Traffic that did arrive on the site often bounced back to Google, because nothing showed them that this company truly handled urgent situations in their suburb, at their time of night, with their insurance mess.
Planning money pages around real local searches
We did not start with volume; we started with intent, because high intent, lower volume phrases can drive more money than broad high volume terms where people are still doing research.
- “Emergency water removal [CITY]”
- “Same day mold inspection [CITY]”
- “Basement flood cleanup near [NEIGHBORHOOD]”
- “Sewage backup cleanup [CITY] 24/7”
- “Water damage company that works with [INSURANCE BRAND]”
I like to look at these as intent buckets instead of single keywords; one “Emergency water removal [CITY]” page can rank for many variations around that theme if you structure it well.
The anatomy of a high intent local page
Here is roughly how we structured the “Emergency water removal in [CITY]” page, and you can adapt this pattern to almost any local service.
Headline and subheadline
We used a clear H2 headline with the city name and the main intent, and followed with a subheadline that addressed the emotion in plain language, not hype.
- H2: “Emergency water removal in [CITY] within 90 minutes”
- Subhead: “Local team on call 24/7 for burst pipes, flooded basements, and storm damage.”
Immediate proof and call to action
Right under the subhead we placed a bold phone number, a simple contact form, and two short trust elements: review count with average rating, and a short line about the number of jobs handled in the past year.
| Element | Placement | Purpose |
|---|---|---|
| Phone number with “Call now” label | Top right and mid page | Reduce friction for mobile visitors ready to call |
| Short contact form | Top section | Capture leads who cannot call at work |
| Review star block | Under headline | Instant trust for first time visitors |
| “Insurance friendly” note | Above the fold | Address one of the biggest worries |
Explain the service in local, practical terms
Instead of some generic statement like “we use modern drying technology”, the copy walked through what actually happens in the first visit, how long it might take, and what the homeowner should do before we arrive, which helped calm people down.
- Short section on “What we do in the first 2 hours” with three steps.
- Short section on “Areas we reach fastest in [CITY]” naming well known neighborhoods and cross streets.
- A bulleted list of common situations: washer overflow, roof leak, burst pipe in winter, etc.
Copy that sounds slightly boring but matches the real situation often wins over clever or dramatic lines that impress marketers more than customers.
Pricing expectations without promising exact quotes
I was a bit torn here, because the owner did not want any reference to pricing on the page, out of fear that it would scare people off, but hiding everything is a weak move online.
We settled on a simple “What affects cost” table, with rough ranges and clear “this is not final” language so people understood why two flooded rooms do not cost the same as a whole house.
| Factor | Example | Typical impact on price |
|---|---|---|
| Area size | One bedroom vs. full basement | More equipment and labor hours |
| Water source | Clean pipe vs. sewage backup | Extra safety gear and disposal steps |
| Response time | Same day vs. next day | Priority call out fees |
| Insurance coverage | Direct bill vs. self pay | Changes payment steps, not work quality |
Local modifiers across the site without stuffing
You do not need to repeat your city name in every sentence; that looks forced and can hurt conversions, but you should sprinkle local anchors in a natural way.
- Mention well known areas in text: “from the [RIVER NAME] side of town to [NEIGHBORHOOD] near the airport”.
- Add real local photos: branded van in front of a recognizable road sign or landmark, keeping privacy intact.
- Include short one to two sentence job snapshots: “We were called to an apartment near [PARK NAME] for a washing machine overflow that flooded two bedrooms.”
Why these pages made the phone ring more
Over time, these money pages became landing pages for many variations of high intent search, and we tracked that with search console and call logs, not just rankings.
One “Emergency water removal [CITY]” page ended up ranking in the top 3 for phrases like “night water cleanup [CITY]”, “urgent flood service near me”, and “pipe burst [CITY] fix” without creating separate thin pages for every variation, which is what some SEOs still do and then wonder why nothing climbs.
If a single strong page can serve ten related phrases, do that, instead of creating ten weak pages that compete with each other.

Local content that people actually read and share
The competitor example is right that local content helps, but I think many people copy that advice in the wrong way and end up with blog posts that no one reads, including Google.
Picking topics that tie to real local events
Instead of generic posts like “5 tips to prevent water damage” which exist on thousands of sites, we aimed for angles that matched this city, its weather, and its housing stock.
- “What to do in the first hour after a basement flood in [CITY]”
- “How [RIVER NAME] overflow season affects homes in [NEIGHBORHOOD]”
- “Checklist: water damage steps before your insurance adjuster visits”
- “How to spot mold in older brick homes in [CITY]”
These posts were not long essays; most were around 900 to 1,500 words, broken into short paragraphs for mobile, with simple checklists and one or two small illustrations.
Content as a bridge to local press and partners
One post in particular, about preparing ground level apartments near the river for heavy rain week, opened doors that ads never did.
We took the main points, tightened them into a one page summary, and reached out to three local newsletters and one community Facebook group admin, offering the tips for free with a short credit line and link.
- A local housing newsletter for renters picked it up and linked back.
- A neighborhood blog featured a short Q&A with the owner about flood risk.
- The community group pinned the checklist for a week during a storm alert.
Each of those references brought both traffic and one or two nice links, without chasing big national sites that do not care about a small local restorer.
Internal linking from content to money pages
This is where many blogs fail: content lives in its own bubble, while money pages sit untouched, and search engines struggle to see what really matters on the site.
Every local post we wrote linked naturally to one or two matching money pages, using anchor text that fit the sentence instead of awkward keyword chains.
- From a storm prep article: “If your basement does flood, our emergency water removal team in [CITY] can usually arrive within 90 minutes.”
- From an insurance checklist: “We can meet your adjuster on site for water damage claims at no extra charge.”
In the opposite direction, we added a “Helpful guides” section at the bottom of money pages with three or four relevant posts, which helped visitors who were not quite ready to book yet.
Measuring content impact without lying to yourself
It is easy to say “content builds trust” and then never check if anyone reads it; that kind of thinking makes you feel busy but does not pay the bills.
| Metric | Target | Why it matters |
|---|---|---|
| Organic entrances per post (after 4 months) | 50+ / month | Shows if the topic has any real search pull |
| Average time on page | 1:30+ minutes | Rough signal that people actually read, not just bounce |
| Click through to money page | 10%+ | Shows if content nudges people toward services |
| Assisted conversions | Track over 3 to 6 months | Reveals longer decision paths |
We dropped topics that did not reach these marks and improved the ones that came close, instead of chasing the idea of a “content calendar” that must be filled no matter what.
Where I disagreed with the client
The owner wanted daily posts at one point, because a competitor had a busy blog; I pushed back hard, because publishing that often in a small niche usually means thin content and repeated ideas that confuse both visitors and search engines.
We settled on one to two strong posts per month that tied to season, local events, or common insurance cycles, and the numbers backed this slower, more focused pace within a few months.

Internal links and real backlinks: structure before volume
The competitor breakdown calls internal links “the most ignored SEO move ever” and I think that is slightly exaggerated, but the core idea is right: most small sites are a mess to crawl and understand.
From a maze to a simple, focused structure
Before touching backlinks, we mapped the entire site on a whiteboard: every URL, every service, every blog post, every city page, and then drew lines for how they linked to each other.
It looked like someone dumped a box of cooked spaghetti on the board; some pages had five unrelated outbound links, and money pages were 3 or 4 clicks away from the home page.
Creating clear hubs for services and locations
We did not invent some new framework here; instead we created two main hubs and made them easy to reach from every page footer and the main menu.
- /services/ as a hub for core services like water removal, mold remediation, fire cleanup.
- /service-areas/ as a hub for city and suburb pages.
Each hub had short descriptions and listed children pages with consistent H3 headings, which sounds plain, but it helps both users and crawlers see the hierarchy fast.
Internal link rules we followed
We kept rules simple enough so the team could follow them without reading a manual each time they hit publish.
- Every service page links up to the /services/ hub and across to at least one related service.
- Every city page links to the most relevant service pages and back to the /service-areas/ hub.
- Every blog post links to one or two money pages and to its category page.
- The home page links directly to top revenue services and highest margin city pages.
This lowered the average click depth for money pages and made crawl paths cleaner, which showed up as faster indexation and less fluctuation in rankings when new content went live.
Internal links are not just for search engines; they guide real people from “I am reading” to “I am ready to call” if you place them where intent shifts.
Cleaning up worthless backlinks
The site came with a strange backlink profile: lots of old directory entries, a few overseas blogs with spun content, and no real local authority links, which is common for small businesses that hired a cheap SEO once.
I do not think every weak link needs a disavow file; in many cases, they are just noise, but we did remove obviously harmful links where we could and stopped all directory blasting as a rule.
Focused local link building that did not feel fake
Instead of chasing generic “high DA” sites, we built a short list of target partners and local publishers that made sense for this business and city.
- Local property managers and small landlords associations with resource pages.
- Neighborhood blogs that cover housing, maintenance, and local alerts.
- Insurance agents that already referred work informally.
- Home inspectors who often see water damage but do not fix it.
The ask was simple: share a useful guide on water damage or mold for their audience, with a small credit link, or set up a resources page listing trusted partners, including the client.
Examples of links that actually moved rankings
Here are three links that had clear, visible effect, not just on metrics but on leads.
| Source | Type | Target page | Result over ~3 months |
|---|---|---|---|
| City renters association blog | Guest Q&A with owner | “Basement flood cleanup [CITY]” page | Moved from #8 to #3 for several basement flood terms |
| Local insurance agent resources page | Partner link | Home page | Noticeable rise in branded search and direct calls |
| Neighborhood newsletter site | Storm prep guide feature | Storm prep blog post | New referring traffic that later converted via internal links |
We did not rely on press release blasts or random guest posts on unrelated topics, because those rarely align with local buyer behavior, and Google has seen that pattern plenty of times.
Local only, not national dreams
Here is where I agree strongly with your competitor: chasing national terms like “best water damage restoration” when you are one crew in one city is often a waste of time and money.
We focused on tight local terms and intent phrases that triggered calls: “water cleanup [CITY]”, “mold removal [SUBURB]”, etc., and ignored broad national vanity keywords, even when the owner asked about them after seeing a competitor brag on social media.
If a keyword does not send you people who can hire you this week, it should not take priority over one that clearly does.
Where our approach had limits
I do not want to pretend every link we chased worked; one partnership with a local home decor blogger brought a link that looked nice on paper but drove almost no relevant traffic, and rankings did not move in a way I could tie back to that mention.
You will have some duds in any link effort, which is fine as long as you keep the focus on local relevance instead of chasing vanity metrics from unrelated sites.

Putting this local SEO playbook into action for your business
If you run a local service business, whether it is pest control, HVAC, legal, or something more niche, the pattern here should feel reachable: fix your Google Business Profile, build a handful of focused city plus intent pages, support them with real local content, clean your internal links, then add a modest set of local backlinks that make sense to real humans.
You do not need 100 blog posts or 500 links; you need clarity about which searches lead to money and the patience to build assets around those searches step by step.
A simple action plan you can start this month
I like to break this down into four short phases so it feels less abstract and more practical.
- Week 1 to 2: Fix your GBP. Photos, categories, hours, description, services, and a clear review capture process.
- Week 2 to 4: Rewrite or build your top 3 to 5 money pages around real local buyer intent, not broad terms.
- Month 2: Publish one or two strong local guides and connect them with smart internal links.
- Month 3 to 6: Build 5 to 15 real local links from partners, associations, and community sites.
As you do this, track calls, forms, and messages from both GBP and your site, so you can see which pieces help and which ones only look good in reports.
Where you might be wrong about your own SEO
If you are still convinced that your current website is “fine” because it looks nice on your laptop, or that you need a fancy funnel before fixing your Google Business Profile, I think you are underestimating how people search on phones and how impatient they are in real emergencies.
It is easy to fall in love with design, or to copy whatever your competitor brags about in case studies, but if those choices ignore local intent and your own data, they can keep you stuck, no matter how hard you work.
Real local SEO is less about clever tactics and more about respecting how your neighbors actually search, decide, and ask for help.
If you start from that point, and you are willing to question your own assumptions instead of chasing every shiny tactic, your results can surpass what you saw in the competitor story, even if your market feels crowded today.
Final thoughts on staying grounded
This water damage case was not perfect, and there were missteps along the way, like slow Q&A updates and one or two useless links, but the big wins came from getting the basics right and sticking with them long enough to see compound effects.
You do not have to copy any single example from this article to succeed; shape the structure to your service, keep your language plain, test your assumptions against real data, and let your results guide what you do next instead of chasing every new trick you hear about in a podcast.
Need a quick summary of this article? Choose your favorite AI tool below:


