Most home improvement contractors work in more than one city. A roofer may replace roofs in six towns. An HVAC company may run trucks across an entire county. Local search leans heavily on location, though, so many contractors rank well near the shop and fade a few towns away.
Service area pages can close that gap. Done poorly, they are one template with the city name swapped, published 30 times. That version rarely ranks and can put the site at risk. This guide lays out a practical system for building pages that earn rankings and leads in nearby cities.
- Why Template City Pages Fail
- Step 1: Decide Which Cities Earn a Page
- Step 2: Build Each Page Around Local Proof
- Step 3: Give the Pages a Clear Structure
- Step 4: Align Your Google Business Profile
- Step 5: Use Schema to Describe, Not Inflate
- Step 6: Turn Visits into Booked Jobs
- Example: One City to Five
- Mistakes to Avoid
- Measuring Results
- Final Thoughts
Why Template City Pages Fail
Google’s spam policies define doorway abuse as pages created to rank for specific, similar queries that lead users to intermediate pages less useful than the final destination. One listed example is multiple pages targeted at specific regions or cities that funnel users to one page. The scaled content abuse policy also covers pages mass-produced mainly to manipulate rankings, including pages made with AI tools, when they add little value.
Even without a penalty, near-duplicate pages compete with each other and rarely give Google a reason to rank any one of them.
A simple test: delete the city name from the page. If a reader can no longer tell which city it is about, the page is not ready to publish.
Step 1: Decide Which Cities Earn a Page
Start with your own data, not a map radius.
- Jobs by city. Export 12 to 24 months of completed jobs from your CRM or field service software and group them by city.
- Leads by city. Check form fills, call tracking, and Google Business Profile insights.
- Search demand. Use Search Console or a keyword tool to check “[service] [city]” terms for each candidate town.
Then sort each city into a tier:
| Tier | What qualifies | What it gets |
|---|---|---|
| Tier 1: Core | Steady jobs, local photos, and local reviews | A full service area page |
| Tier 2: Regular | Some jobs and measurable search demand | A page, once you have a few local projects to show |
| Tier 3: Occasional | A few jobs a year | A mention on an “Areas We Serve” hub page only |
For many local contractors, the honest list is a handful of pages, not 40. Revisit the tiers twice a year and promote towns that start producing steady work.
Step 2: Build Each Page Around Local Proof
Each page has two jobs: show that you really work in that city, and help a homeowner there decide to contact you. Include:
- An H1 with the service and city, such as “Roof Replacement in Petal, MS”
- An opening that confirms you serve that city and the types of homes or projects you handle there
- Two to four completed local projects with real photos and what you did
- Local conditions that genuinely affect the work, such as housing age, storm patterns, or permit steps
- Reviews from customers in that city, used with permission
- Links to your main service pages
- Two to four FAQs that customers in that city actually ask
- A tap-to-call button and a short form visible on mobile
A few rules keep the page out of doorway territory. Write each page from scratch. Do not publish until you have local proof. There is no ideal word count; write until the page answers a local homeowner’s questions. Avoid blocks of nearby towns or ZIP codes, which Google’s spam policies name as keyword stuffing. For trade-specific examples, see this roofing contractor SEO guide.
Step 3: Give the Pages a Clear Structure
Google’s doorway policy contrasts substantially similar pages with a clearly defined, browseable hierarchy. A simple structure looks like this:
/services/roof-replacement/ Core service page
/areas-we-serve/ Hub page (all cities)
/areas-we-serve/petal-ms/ Tier 1 service area page
/projects/ Project gallery
- The hub links to every service area page and lists Tier 3 towns in plain text.
- Service pages link to the cities where that service is offered, and city pages link back.
- Project posts link to the page for the city where the job took place.
- Use natural anchor text, such as “our roofing work in Petal.”
In Search Console’s Pages report, city pages marked “Crawled – currently not indexed” can be a sign the content is too similar to other pages. This guide on fixing the crawled, currently not indexed issue walks through how to diagnose it.
Step 4: Align Your Google Business Profile
Your site and your profile should agree on where you work. Google’s service area guidance sets the rules:
- If customers do not come to your address, remove it and list service areas instead.
- You can add up to 20 service areas by city, postal code, or other named area.
- The overall area should not extend beyond about two hours of driving time from your base.
- A service-area business can have only one profile for its whole area.
List your Tier 1 and Tier 2 cities as service areas, and make sure each has a matching page. Use the same local project photos on the profile and the city pages. Ask every customer for a review, without incentives.
Be realistic about the map pack. Google’s local ranking guidance says local results are based mainly on relevance, distance, and prominence. City pages improve relevance, but they do not erase distance. In towns far from your base, organic results are often the more reachable target.
Step 5: Use Schema to Describe, Not Inflate
Add one LocalBusiness block, using the most specific subtype such as RoofingContractor or Plumber, on your homepage with your real name and address. Google’s LocalBusiness documentation lists both as required. On city pages, use a Service block that references the business as provider and names the city with the schema.org areaServed property.
Never add LocalBusiness markup with an address in a city where you have no office. Validate everything with the Rich Results Test.
Step 6: Turn Visits into Booked Jobs
A page that ranks but does not produce calls is only half done.
- Track leads by page. Use call tracking or form fields that record the landing page, so you know which cities produce leads, not just traffic.
- Respond fast. Use missed-call text-back or form autoresponders, and follow up the same day. A lead left until tomorrow may already have booked someone else.
- Close the loop. Mark booked jobs in your CRM to see which cities deserve more content and reviews.
A well-ranked city page cannot make up for a phone that goes to voicemail.
Example: One City to Five
This is an illustrative scenario, not a specific client case.
A roofing company has 22 city pages built from one template, and none bring in meaningful traffic. Its invoices show most jobs come from the home city and four nearby towns. The company keeps those five pages and 301-redirects the other 17 to the hub. It then rebuilds the five pages with local projects, photos, permit notes, and local reviews. It trims its profile’s service areas to match and adds landing-page tracking to its forms.
After that, the team watches three things: whether the pages get indexed, whether city-query impressions grow in Search Console, and whether the CRM shows booked jobs tagged to each page.
Mistakes to Avoid
- Publishing pages for every town in a 50-mile radius
- Swapping the city name in a template or mass-producing pages with AI
- Creating extra profiles or fake local addresses
- Reusing the same reviews and photos on every page
- Leaving pages untouched after launch instead of adding new projects
Measuring Results
Track index status, impressions, and clicks per page in Search Console, then calls, form leads, and booked jobs in your CRM. Expect gradual change. Google notes that it can take several days for a new page to be found and crawled, and ranking movement depends on competition and how much local proof each page carries. Google also states that no one can guarantee a #1 ranking.
Final Thoughts
Service area pages work when they reflect how your business really operates. Build pages only where you have real work to show, keep your site and profile consistent, and make booking easy. You will end up with fewer pages, less risk, and more local searches turning into jobs.
Editor’s Note: This is a guest post by Joevel Faustino. She is an SEO content specialist at Fuel Results, a US-based digital marketing agency that helps service businesses generate leads through websites, local SEO, paid ads, and automated follow-up.