SEO for home service businesses on WordPress
SEO for home service businesses (plumbers, electricians, HVAC, roofers, cleaners) means ranking in the map pack for "service + near me" searches across the area you cover, then turning that visit into a phone call. Almost all of it runs through a Google Business Profile set up correctly as a service-area business, one page per service, and a small number of genuinely local area pages.
The trap in this industry is the doorway page: fifty near-identical "Plumber in [Town]" pages with the town name swapped. Google treats those as spam, and they drag down the pages that deserve to rank.
Pages every home services site needs
- Service pages. One page for each job people search for separately: water heater repair, drain cleaning, panel upgrades, AC installation. Include what the job involves, typical timeframes and how pricing works.
- Emergency service page. "24 hour plumber" and "no heat" searches are urgent. Say exactly when you answer, what counts as an emergency and whether call-out fees apply.
- Service area pages. A few pages for the main towns you cover, each with real local content such as jobs completed there, local housing quirks or permit rules.
- Licensing and insurance page. License numbers, insurance, certifications and manufacturer approvals. People check this, and it supports every service page.
- Project gallery. Photos of real jobs with a short description and the town, which give area pages something unique to link to.
Set up as a service-area business
If customers do not come to your address, Google's guidelines say to hide it in your Business Profile and list the areas you serve instead. Do not rent a virtual office or a mailbox to appear in another town; profiles built on fake addresses get suspended, often right when the phones are busiest.
Pick the primary category that matches your main work (Plumber, Electrician, HVAC contractor, Roofing contractor) and add secondary categories only for services you really offer. On your site, show the phone number as a tappable tel: link on every page, and make sure it is the same number as the profile. Call-tracking numbers belong in ads, not in your NAP.
City pages that are not doorway pages
An area page earns its place when it contains something true only for that area: jobs you did there with photos, common problems in the local housing stock ("older homes in Elmwood still have galvanized pipes"), local permit notes, response times from your base. If you cannot write that, you probably do not need the page; list the town on a single service-area page instead.
Link each area page to the relevant service pages and back, and keep them in a clear hierarchy (Home › Areas › Elmwood) with breadcrumbs. Hydrogen SEO's site audit flags duplicate titles and descriptions, a quick way to spot area pages that were cloned from one template.
Schema for trades
schema.org has specific subtypes under HomeAndConstructionBusiness: Plumber, Electrician, HVACBusiness, RoofingContractor, Locksmith, HousePainter, GeneralContractor and MovingCompany. Use the one that fits. A service-area business can use areaServed instead of publishing a street address it keeps private, although Google's LocalBusiness guidelines expect an address, so include a real one if you have a public base.
Hydrogen SEO's Local Business schema only prints once it has real details beyond a name, and you should only fill what is true. Leave the address empty rather than typing your home address if you have hidden it on the profile.
HomeAndConstructionBusiness schema example
A starting point for your site. Replace every value with your own, and only mark up what is visible on the page.
{
"@context": "https://schema.org",
"@type": "Plumber",
"@id": "https://example.com/#business",
"name": "Northside Plumbing & Drain",
"url": "https://example.com/",
"telephone": "+1-414-555-0171",
"image": "https://example.com/images/van.jpg",
"priceRange": "$$",
"areaServed": [
{
"@type": "City",
"name": "Milwaukee"
},
{
"@type": "City",
"name": "Wauwatosa"
},
{
"@type": "City",
"name": "Shorewood"
}
],
"openingHoursSpecification": {
"@type": "OpeningHoursSpecification",
"dayOfWeek": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday"
],
"opens": "00:00",
"closes": "23:59"
},
"hasOfferCatalog": {
"@type": "OfferCatalog",
"name": "Plumbing services",
"itemListElement": [
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "Water heater replacement"
}
},
{
"@type": "Offer",
"itemOffered": {
"@type": "Service",
"name": "Drain cleaning"
}
}
]
}
}
Checklist
- Hide your address in the profile if customers never visit it
- Choose the primary category for the work that earns the most
- Write one page per service people search for separately
- Only create town pages you can fill with local jobs and detail
- Put a tappable tel: link in the header of every page
- Keep call-tracking numbers out of your site's NAP
- Publish license and insurance details on their own page
- Use the trade subtype, such as Plumber or HVACBusiness, in schema
- Add photos of real jobs with the town in the description
- Ask for reviews after every completed job with a direct link
Common questions
How many city pages should I create?
As many as you can make genuinely different, which for most businesses is a handful. Swapping only the town name produces doorway pages that Google treats as spam.
Can I rank in towns where I have no address?
In organic results, yes, with good area content. The map pack depends heavily on proximity to your business location, so ranking there far from your base is difficult regardless of pages.
Should I show prices?
Show how pricing works (call-out fee, typical ranges, free estimates) even if exact quotes need a visit. People screen on this before calling.
Which schema type should a handyman use?
HomeAndConstructionBusiness is the general type; use a specific subtype like Electrician or HousePainter when most of your work is that trade.