How I Scaled a San Jose Plumbing Company With SEO and Grew Calls by 700%
By Stuart McHenry · June 15, 2026 · 10 min read
A San Jose plumbing company called me after burning through two agencies and the better part of two years. Their phone was ringing, but barely. Most of the work was repeat customers and the random Yelp lead. Eighteen months later the same shop was doing roughly 7x the inbound calls from search, and the work mix had shifted toward repipes, sewer line replacements, and tankless installs.
No tricks. No PBN nonsense. Just the boring fundamentals done in the right order, by one person who actually owns the account. Here's the full playbook I ran on this San Jose shop, broken into the pieces that actually moved the number.
Where the shop started
When I got the keys to the account, the situation looked like this:
- A 6-year-old WordPress site on a bloated theme, 8+ second mobile load, no real service pages.
- A Google Business Profile with the wrong primary category, a service area that just said "Bay Area," and 38 reviews that had been sitting at a 4.4 for two years.
- NAP information that was different on the website, the GBP, Yelp, BBB, and the old Yellow Pages listing. Three different phone numbers floating around the web.
- Zero schema markup. Zero local links worth a damn. Two paid directory listings the last agency had bought and forgotten about.
The shop was good at the actual job. The internet had no idea they existed. That's a very fixable problem.
Step 1: Built a new website that didn't fight me
The old site couldn't be saved. I rebuilt it from scratch on a fast stack with a clean service-page structure. The goals were simple:
- Speed. Sub-2-second LCP on a mid-tier Android over 4G. Real images, compressed, lazy-loaded, served from a CDN. No bloated page builders.
- Structure. A real home page, a real services hub, and a deep service page for every job the shop actually wants more of: water heaters, tankless installs, repipes, slab leaks, sewer line replacement, trenchless, drain cleaning, gas lines, and emergency plumbing.
- Local proof above the fold. Phone number tap-to-call, San Jose service area, license number, and a small row of recent reviews on every template.
- Mobile-first. 80%+ of the traffic was going to be on a phone. The CTA had to be a giant thumb-friendly call button, not a contact form buried at the bottom.
The new site shipped in about three weeks. Page speed scores went from the high 40s to the mid 90s on mobile. That alone moved nothing in the rankings yet, but it set the floor for everything else to actually work.
Step 2: On-page SEO done at a level most plumbers never get
This is the part agencies love to skip because it's slow and it's not sexy. I built 14 service pages and 9 city/neighborhood pages, and every single one followed the same checklist:
- One clear primary keyword in the URL, H1, title tag, first 100 words, and image alt text. Not stuffed. Just present.
- A meta title under 60 characters that named the service and the city.
- A meta description written like an actual sales line, not a keyword salad.
- Internal links from the service page to relevant city pages, and from city pages back to every service the shop offers in that area.
- A real FAQ block at the bottom answering the questions homeowners actually ask, written in the exact phrasing they use.
- Real photos. Real jobs. Real trucks. No stock garbage.
- One clear CTA above the fold, one in the middle, one at the bottom.
For the neighborhood pages I picked the San Jose pockets where this shop already had a customer base or wanted more work: Willow Glen, Almaden Valley, Cambrian, Rose Garden, Evergreen, Santa Teresa, Berryessa, and the West San Jose / Cupertino edge. Each one named real streets and landmarks and talked about the actual housing stock, because the plumbing problems in a 1950s Willow Glen bungalow are not the same as a 2005 Evergreen tract house.
Step 3: NAP cleanup, the most boring big win in local SEO
Before doing anything fancy, I locked the name, address, and phone number across the web. One canonical version. Same suite number, same phone, same business name spelling. Then I went through every place the business was listed and forced it into line.
That meant:
- Claiming and correcting the GBP, Yelp, Bing Places, Apple Business Connect, BBB, Angi, HomeAdvisor, Thumbtack, Nextdoor, Houzz, and Yellow Pages.
- Killing duplicate GBP listings from two old locations, including one that still had the previous owner's name on it.
- Updating the data aggregators (Data Axle, Foursquare, Localeze) so the downstream sites would stop pulling old info.
- Updating the contractor's state license board listing and the manufacturer dealer locator pages (Bradford White, Navien, Rinnai, etc.) with the correct NAP.
Nothing about this is exciting. It's also the single biggest reason the GBP started ranking inside 60 days. Google trusts consistency. When five sources say the same phone number, the algorithm relaxes. When they all say different things, it doesn't.
Step 4: GBP optimization, treated like a real channel
The Google Business Profile is the single highest-leverage asset a local plumber owns. I treated it that way.
- Categories: Primary set to Plumber. Secondaries added for Water heater installation service, Drainage service, Gas installation service, and Water damage restoration service.
- Services: Every service the shop offers, with a 150-300 word description on each one written in plain English. Google reads those.
- Service area: Real zip codes for the San Jose metro the shop actually drives to. Not "the Bay Area."
- Photos: 60+ real job photos uploaded, geotagged, properly named (slab-leak-willow-glen-san-jose.jpg, not IMG_4821.jpg).
- Google Posts: Weekly. Always a real job from that week with a real photo, real neighborhood, and a real CTA.
- Q&A: Seeded with the questions buyers actually ask, answered by the owner.
- Reviews: Built a real ask into the dispatch workflow. After every paid job the customer got a text that pointed straight at the GBP review link and asked them to mention what kind of work was done. In 12 months the profile went from 38 reviews to over 240, average rating up to a 4.9, with most reviews containing service keywords baked into the actual text.
Inside four months this shop was in the top 3 of the map pack for "plumber San Jose," "water heater repair San Jose," "tankless installation San Jose," and most of the neighborhood-level queries. That map pack ranking alone changed the business.
Step 5: Local link building that wasn't garbage
I did not buy a single link. I did not run a guest-post farm. I went after links the way a local business actually earns them:
- Sponsored two youth sports teams in San Jose. Got real do-follow links from real local sites with real audiences.
- Hosted a small donation drive for a Santa Clara County food bank. Got covered on a couple of local community blogs.
- Got the owner quoted in two San Jose Mercury News pieces about water-saving rebates and the Bay Area atmospheric river damage. That meant pitching reporters with actual, useful expert quotes. Not press releases.
- Earned mentions on a handful of "best plumbers in San Jose" roundup pages by simply being good and being easy to find.
- Joined two real local trade associations (the Plumbing-Heating-Cooling Contractors of the Bay Area chapter and a Silicon Valley small business group).
Maybe two dozen real local links across the project. Quality beat volume by a mile. Google's local algorithm cares a lot more about where the link is from than how many you have. Twenty links from real Bay Area sites buried a thousand links from random "guest post" sites.
Step 6: Brand mentions for AEO
This is the part most local SEOs are still ignoring. A real chunk of buyers don't open Google anymore. They ask ChatGPT, Perplexity, Gemini, or Google's AI Overview, "who's the best plumber in San Jose for a tankless install" or "how much does a slab leak repair cost in San Jose."
The models answer those questions by pulling from a specific set of trusted sources: Yelp, BBB, Reddit, Nextdoor neighborhood favorites, local roundup blogs, and major news mentions. To show up in those answers, the brand has to be named in those places, not just linked.
So I went and got it named:
- Cleaned up and optimized the Yelp listing with real photos, full project descriptions, and consistent NAP.
- Earned spots on six "best plumbers in San Jose" listicles by reaching out with real proof: license, insurance, reviews, photos, and a discount offer for their readers.
- Encouraged satisfied customers to recommend the shop in the relevant San Jose neighborhood Facebook groups and Nextdoor threads, organically, never with a script.
- Made sure the about page on the new site spelled out the owner's name, license number, years in trade, certifications, and service area in clean machine-readable text. The AI models grab from there.
Inside six months I could ask ChatGPT, "best plumber in San Jose for a tankless water heater" and the shop was named in the answer. That started bringing in a steady drip of "I saw you on ChatGPT" calls. That's a phrase no plumber heard two years ago and every plumber is going to hear in the next two.
Step 7: Schema markup that did real work
The new site shipped with proper structured data on every template:
- LocalBusiness and Plumber schema on the home page and contact page, with full NAP, geo coordinates, hours, license number, and aggregate rating tied to the real review count.
- Service schema on every service page, naming the service, area served, and price range.
- FAQPage schema on the FAQ blocks at the bottom of every page. Several of those FAQ answers ended up pulled into Google's rich result blocks and AI Overviews.
- BreadcrumbList schema so the SERP listing showed the site hierarchy instead of a raw URL.
- Review and Organization schema so the brand entity was unambiguous to Google's knowledge graph.
Schema isn't magic. It just makes it easier for Google and the AI models to understand what the page is about and trust the information. Combined with everything else, it pushed click-through rate on the existing rankings up noticeably.
What 18 months actually looked like
Roughly, by quarter:
- Q1: New site live. NAP cleanup done. GBP rebuilt. Calls up about 60% off a small base. Rankings starting to crawl into the top 10 organically for the easier service+city queries.
- Q2: Service pages and city pages fully indexed and earning links. GBP in the map pack top 3 for most core terms. Calls up roughly 200% over the starting point.
- Q3: Local link push and brand mention work paying off. Map pack rankings solid across all of San Jose. AI Overviews starting to name the brand. Calls up about 400%.
- Q4 through Month 18: Compounding. Review velocity high. "Best of" mentions stacking. AEO citations live across ChatGPT, Perplexity, and Google AI Overviews. Calls steady at roughly 7x the starting volume, and the work mix tilted toward higher-ticket jobs because the service pages were ranking for the high-intent queries.
The shop hired two more techs, bought a second van, and stopped advertising on Yelp Ads completely because the organic and map pack channels were doing the work.
What you can take from this
None of this is special to San Jose, and none of it is special to plumbing. If you run a home service business and your phone isn't ringing the way you want it to, here's the order of operations that actually works:
- Fix the foundation first. Fast site, clean NAP across the web, real service and city pages. Do this before anything else or nothing else will work.
- Treat your GBP like a real channel. Categories, services, photos, weekly posts, and a real review engine. This single asset will outperform almost everything else for a local trade.
- Earn local links, don't buy them. Sponsor, partner, get quoted, show up in the community. Twenty real local links beat two thousand junk ones.
- Get your brand named in the places AI models read. Yelp, BBB, local listicles, Reddit, Nextdoor, real news. AEO is the next frontier and most of your competitors aren't even thinking about it yet.
- Mark up the site properly. LocalBusiness, Service, FAQ, Breadcrumb, Review. Make it easy for the machines to trust you.
Then keep doing it for 12-18 months without flinching. That's the whole game.
Related reading and services
If the San Jose shop had a second metro it wanted to push into, the next move would have looked a lot like my Corona/Riverside multi-location case study. For a tighter, single-service play in one city, read the Austin leak-detection case study. The services that power this kind of build are Local SEO for plumbers, AI SEO and AEO, and contractor web design when the site itself is the bottleneck.
Want the same play run for your shop?
I take on a small number of home service businesses at a time and I do the work myself. No junior account manager, no overseas team, no recycled audit templates. If you're a plumber, HVAC, electrician, or roofer and you want a straight answer on whether SEO can move your phone, email me at stuart@bluecollarseoexpert.com and tell me about your shop. I'll tell you straight up if I can help.
