Somewhere out there is a contractor website with a page for every town in the state, each one identical except for the name, each one ranking for nothing. It took someone a whole afternoon.
A contractor needs a page for each town where they want work and can say something true and specific about the job there: real projects, the kind of homes, local quirks, how quickly they get there. Start with the five to eight towns that bring in the most work, make each page genuinely different, and add more as you have something real to say. Swapped copies of one page do not help and can hurt.
Why do city pages matter for contractors?
Because distance is one of the three things Google weighs in its local results, and you cannot move your yard. The map pack favours businesses close to the searcher. A customer two towns over searching "plumber" plus their town gets the ordinary results under the map too, and a page that is plainly about their town is how you show up there.
A Google Business Profile service area helps Google know where you work, but it does not rank you in every town on the list. We cover that in our Google Business Profile guide for contractors. The website is where you earn the towns further out.
What is a doorway page, and why does Google care?
Google's spam policies describe doorway abuse as pages made to rank for similar searches that are less useful than the page they lead to, and give "pages targeted at specific regions or cities that funnel users to one page" as an example. Forty city pages with one sentence changed are exactly that.
The fix is not to avoid city pages. It is to make each one worth landing on. Google's guidance on helpful, people-first content asks whether a page gives original information and something a visitor could not get from the page next to it. A good city page passes that test easily, because the facts are different in every town.
Replace the town name on your city page with a different town. If every sentence is still true, it is not a city page yet. Add the things that would break: jobs you did there, the streets or neighbourhoods, the age of the homes, how long it takes you to get there.
What should go on a contractor's city page?
- The service plus the town in the title and heading, written for a person: "Roof repair in Frisco", not "Best Cheap Roof Repair Frisco TX Near Me".
- Work you have done there, with photos, even if it is three jobs.
- What is true about the homes there: the age of the neighbourhoods, common roof types, the issues you see most.
- Practical details: how fast you can get there, which neighbourhoods you cover, any permit or HOA steps homeowners ask about.
- Reviews from customers in that town, if you have them.
- A call button and a form, same as every other page.
You can see the shape on our own Plano page, written for business owners rather than homeowners but built on the same rule: say things that are only true of that city.
How many city pages should a contractor have?
As many as you can make genuinely different, starting with the towns that matter most to revenue. For most contractors that is five to eight to begin with, then one or two more a month. A contractor covering six small towns around one base is sometimes better served by one strong regional page than six thin ones, at least until there is real work to show in each.
Choosing the towns is mostly arithmetic. Look at the last year of jobs and sort them by town, then add the towns you want more of and can reach quickly. The overlap of "already works" and "want more" is your first batch. A town you have never worked in and cannot reach in under an hour is a page for later, if ever.
It also takes time. A new city page usually needs a couple of months before it moves, the same 60 to 90 days we see across local SEO generally, so the pages you write this month are working for you next season.
How we handle city pages
A page for each town you serve is part of the monthly work in our Local SEO package, alongside two posts a month and a plain-English ranking report. We start with the towns where your jobs already come from, and every page has to pass the swap test before it goes live.