aiseo.ooo

A Roofer With 176 Town Pages Gets Its Rankings From the Blog

I took apart a real roofing company's site to see what its 176 service-by-town pages were doing for it, and the rankings were coming from somewhere else.

A roofer with 176 town pages gets its rankings from the blog, at least in the snapshot I took on August 23, 2026. The site came up in an SEO group I’m in, and I took it apart page by page. Every one of the 182 keywords a national keyword database had it ranking for went to an informational article. Its best organic ranking in a town search came from a long area page, not from the page built for that service in that town.

What the roofer’s site is made of

What the roofer’s site is made of is a big grid of programmatic pages around a smaller core of real content. It’s a real company, licensed and certified by a shingle maker, with a real address and a well-reviewed Business Profile. The site runs on WordPress after a move off Wix in May 2026, and the domain was first seen in February 2025.

Page typePagesWhat’s on them
Service-by-town pages1768 services times 22 towns, about 870 words each, about 70% template overlap, one unique section per town on its housing stock
Resources articles51Six sections, every article bylined with the owner’s name and state license number, with Article markup
Service-area pages22One per town, about 1,700 words each
Three of the page types among its 309 URLs, audited August 23, 2026. The site also has 21 service hubs.

The structured data is thorough too, down to the Business Profile’s place ID used as an identifier. On paper, this is a site built to win every service in every town.

Where the roofer’s rankings come from

Where the roofer’s rankings come from is the resources hub, a blog in all but name. In the national keyword database I checked, the site ranked for 182 keywords, and all 182 were informational queries answered by articles in that hub: a shingle maker’s warranty registration at #9, the cost of class 4 shingles at #15, chimney flashing at #20 and plywood roof decking at #25. None of the 182 went to a service-by-town page.

All 182 keywords went to the articles, not the town pages.

That hub holds 51 articles. The town grid holds 176 pages and, in that database, none of the 182 keywords.

The #2 city ranking came from an area page

The #2 city ranking came from an area page, not the town page. In a live search set to the company’s state, a “roof replacement” search for one of its towns put the site at #2 in the organic results, and the page Google chose was the 1,700-word service-area page for that town. The roof replacement page built for that exact town wasn’t the one ranking.

For a “roofing contractor” search in another of its towns, it was #2 in the map pack and #5 in the organic results. My read is that the map pack spot belongs mostly to the Business Profile, so I count it as a Business Profile result, not a page result.

Why 176 town pages don’t carry the site

Why 176 town pages don’t carry the site is my read, not something the snapshot proves. Each one runs about 870 words, and about 70% of that is shared template; the unique part is one section about the town’s housing stock. The area page that ranked runs about 1,700 words.

Google’s spam policies describe doorway abuse with examples like pages targeted at specific cities that funnel users to one page, and substantially similar pages that sit closer to search results than to a clear, browsable hierarchy. A grid of eight services times 22 towns at 70% overlap is close to that description. I’m not saying Google has penalized this site, and nothing in the snapshot shows that. What it shows is that the pages built to rank in each town aren’t the ones doing the ranking.

What I’d copy from this roofer, and what I wouldn’t

What I’d copy from this roofer, and what I wouldn’t, comes straight out of where the rankings were. I’d copy:

  • A resources hub of real, bylined guides, since that’s where every one of the 182 ranking keywords went.
  • Long area pages, like the 1,700-word page that won the city spot, over thin pages near 870 words.
  • A few sub-area pages built around the local housing stock, the one part of the town pages that was unique.

What I wouldn’t copy is the grid of 176 service-by-town pages. In this snapshot it carries the doorway risk and none of the rankings. I’d rather build a town page only when the town gives it something real to say, which is the idea behind how I decide which city pages get built.

The bylines are worth a mention too. Every article names the owner and a state license number, a detail no page template supplies on its own. Whether it helps rankings, this audit can’t say.

How I audited the roofer’s site

How I audited the roofer’s site came down to one pass on one day.

Date
August 23, 2026
Pages
All 309 URLs, sorted by page type, with word counts and template overlap for the town pages
Rankings
Two live searches set to the company’s state, map pack and organic
National keywords
One keyword database’s list of the site’s ranking keywords, 182 in all
Not measured
The effect of backlinks, traffic, calls and leads

What the town pages tell other local sites

What the town pages tell other local sites is that more pages isn’t the same as more rankings. This roofer built 176 pages to cover every service in every town, and in this snapshot Google sent its city ranking to a long area page and its national rankings to the resources hub. If you’re planning a grid of service-by-town pages, look first at which of your pages already rank, and what they have that the grid wouldn’t.

Sources

  1. Spam Policies for Google Web Search (Google Search Central)

Keep reading

One word in the prompt changed which brands ChatGPT recommended: "construction" swapped the project management field, and "law firm" had four different effects.

Written by
Bike Hawley
Updated
No
Reading time
5 minutes
Dataset
Included