A page for every service in every town, and almost none of them ranked.
TreeTec is a tree service working the west metro and Wright County in Minnesota. Its old site was built the way a lot of local sites get built: cross every service with every town and generate a page for each combination. Stump grinding in Annandale. Tree removal in the next town over. Repeat until the sitemap runs past a hundred URLs.
The results were in the Search Console data before we touched anything. Over twelve months the site earned 90 non-brand clicks on 113,000 impressions. Outside of people searching the company name, one blog post about tree removal permits was doing nearly all the real work. The location pile ranked almost nowhere, for anything.
Pages that rank nowhere drag down the pages that could.
Google has become aggressive about dropping pages that earn no traffic, and it evaluates quality across a whole site, so a pile of thin location pages does more than sit there quietly failing. It pulls the good pages down with it. Keeping 127 near-identical pages alive was an active cost, and cutting them was cheap: with 90 non-brand clicks a year at stake, there was very little traffic to lose.
The honest architecture is smaller. Real service hubs, written deep. City pages only for the towns where the crew genuinely works, 16 of them in the first wave, each written with local detail instead of a swapped-in town name. A second wave of five towns is planned, but it ships only after the first wave proves it can get indexed and earn impressions. And the rule stays standing after launch: any city page still at zero impressions after six months gets improved, consolidated, or deleted.
Every one of the 176 legacy URLs got a redirect, so nothing that had earned a link or a click dies at a 404. The two assets that were actually performing, the brand searches and that permit post, keep their URLs untouched.
A hand-coded site built around how fast this crew answers.
The rebuild is hand-coded and static, so it loads fast on a phone in a driveway, which is where tree work gets booked. The positioning runs on responsiveness: the site presents live answering with in-hours and after-hours states, because picking up the phone is the thing this company does better than the ones that don't.
Project pages are written from real jobs with real photos: removals, trimming, storm work, hazard trees. The old cost calculator was a third-party embed loading outside scripts on one of the site's best pages, so we rebuilt it natively with the same inputs and the same arithmetic. It now ships with zero third-party script. Everything else got the same treatment: migrated where the content earned it, rewritten where it was thin, cut where it was dead weight.
Rebuild complete. Launch pending.
The build is done and QA'd, and launch is gated on the owner confirming a short list of facts: hours, credentials, current pricing. We don't publish claims a client hasn't confirmed, so the site waits until they are. That's why the TreeTec card on our work page reads in progress.
Which means this case study has no results section yet, and we won't pretend otherwise. What we can tell you is the bet: the deleted pages fall out of the index over a month or two, the remaining pages stop being weighed down, and a site one quarter the size earns more than the pile ever did. That's the same reasoning behind our local search work everywhere: meaningful pages rank, filler doesn't, and filler isn't neutral.