← Back to Blog
Local SEOCase StudyService Area BusinessContent StrategyAI Content

Internal Linking Case Study: How a Multi-Location Repair Company Went From 64 to 1,440 Pages and 4x the Organic Clicks

2026-06-24 · updated 2026-11-02
Internal Linking Case Study: How a Multi-Location Repair Company Went From 64 to 1,440 Pages and 4x the Organic Clicks
Contents
Update, November 2026: the same three months, one year apartThe Starting Point: September 2025Why does most multi-location SEO fail?The System I Built1. Service-Area Pages at Zip Code Level2. AI Overview-Optimized Opening Block3. Real Local Specificity (Not Template Swaps)4. Internal Linking Architecture5. Schema Markup on Every PageThe ResultsOn the AI Content QuestionWhat parts of this system transfer to other businesses?What to do with this

If you run a service business across several cities and most of your calls come from paid ads, this case study shows what the website can do on its own. An appliance repair company serving several metro areas, with no storefront on Google Maps, went from 64 pages to 1,174 pages showing up in Google and about 75 real website leads a month, worth roughly $3,750 a month at paid lead prices. Below is how the pages were planned, linked together and written with AI help without being penalized.

Let me start with the elephant in the room.

When I was building this system, LinkedIn was full of SEO "experts" declaring that AI-generated content would destroy your rankings. Google would penalize you. Everything would collapse.

Twelve months later the site had 1,174 pages showing up in Google, 962K impressions (times the pages were shown in search results), 9,728 clicks and about 75 real website leads a month, with no penalties and no collapse.

Figures refreshed 22 September 2026, pulled from the Search Console API (data through 19 September) rather than read off a dashboard. Over the trailing sixteen months the account reads 961,997 impressions and 9,728 clicks at average position 10.4. Month against month: September 2025 produced 6,119 impressions and 388 clicks at position 16.2, and August 2026 (the last complete month) produced 260,233 impressions and 1,465 clicks at position 9.0. The six months to date account for 838,495 impressions against 98,712 in the six months before them, so the curve got steeper after this case study was first written, not flatter. What that growth did and did not prove about booked revenue is the subject of a separate piece on the attribution gap.

The people making those predictions weren't wrong that bad AI content fails. They were wrong about what bad means. Bad content is content that doesn't help the reader, regardless of who or what wrote it. If you use AI as a word-count machine with a keyword stuffed prompt, yes, it'll fail. If you use it as a writing accelerator with human oversight at every step, it works exactly like good human writing works.

This is the story of how I built a system that scaled across every location without sacrificing quality, and what the numbers actually look like.

Update, November 2026: the same three months, one year apart

The figures above compare single months. The cleaner test is the same stretch of the calendar a year apart, because it removes the seasonal argument: demand for home repairs is not the same in spring and in late summer, and comparing two different seasons can flatter or hide any change. Here is July 28 to October 26 in 2025 and in 2026, pulled from the Search Console API on 2 November 2026.

Search Console, same three months in 2026 against 2025: clicks, non-brand clicks, impressions and non-brand average position

Metric Jul 28 to Oct 26, 2025 Jul 28 to Oct 26, 2026 Change
Total clicks 1,217 5,080 4.2×
Non-brand clicks 138 891 6.5×
Impressions 18,489 995,786 54×
Non-brand average position 25.7 11.9 up 13.8 places
Branded clicks 628 426 down
URLs in the sitemap 64 (September 2025) 1,440 (2 November 2026) n/a

Four things in that table are worth reading slowly, because each one is a place where SEO numbers usually get misread.

The growth is not brand demand. Branded clicks went down over the same period. Every extra click came from people searching for a problem or a service, not for the company by name. The non-brand count looks small next to the total because Search Console hides rare queries for privacy, and on a site with hundreds of long-tail pages most of the hidden queries are non-brand too.

Average position on its own hides growth. Quarter against quarter, non-brand position sat at 11.9 in both periods while non-brand impressions went from about 86,000 to about 337,000. A flat average with four times the impressions means the site started showing up for many new searches, which enter low and pull the average down while they climb. Year over year, with the new searches already settled in, the same number moved from 25.7 to 11.9.

Most of the visibility comes from articles, not city pages. Informational articles, the ones that answer what people search before they call a technician (how long an appliance should last, what a repair really costs, which symptom points to which part), now carry about three quarters of all impressions. City and service pages carry about a fifth. Both layers need each other: the articles earn the reach, and the local pages are where a ready-to-book visitor lands. Every page in both layers is unique, built on the company's own completed-job records rather than a template with the city name swapped.

Click-through rate went down while clicks went up. Quarter against quarter it moved from 0.79% to 0.51%. That is expected for this mix: informational searches are often answered on the results page by an AI Overview. One article sits at position 4 for its main question with 2,744 impressions and zero clicks, because Google answers it before anyone needs to click. Those impressions still matter for AI citations, which is why every price and fact on the site is kept to one figure taken from the job records, so Google and AI assistants quote the same number wherever they find it.

Two pieces of work held this together at 1,440 URLs. When template-style titles kept making pages compete for the same searches, I rewrote 424 titles and added a check to every publishing path that blocks a new page from targeting a search another page already owns (the method is in service area cannibalization). And because clicks only matter if they turn into work, I matched every website form request and every call to the website's own phone number against the company's job records. Source labels in the CRM alone under-count the website, which is the subject of the attribution gap piece.

The Starting Point: September 2025

The client: a multi-location appliance repair company serving several metro areas.

The situation when I took over:

Metric Starting Point (Sept 2025)
Pages on the site 64
Monthly impressions Low / unmeasured
Organic clicks Minimal
Website leads Not counted (no conversion tracking)
Physical storefront on Maps None (service-area business)
Content strategy None
Local landing pages None

That last point about the physical storefront matters more than most people realize. A business with a verified Google Maps pin (a restaurant, a retail store, a clinic) gets Local Pack visibility almost by default if they do basic optimization. A service-area business that travels to customers has no pin, because its Google Business Profile hides the address. That means no Local Pack shortcut (the Local Pack is the map with three businesses at the top of local results), and the only path is organic content ranking, meaning unpaid results.

This is one of the hardest starting positions in local SEO, which is exactly why the results are worth documenting.

Why does most multi-location SEO fail?

One structural handicap sits underneath all of it for service-area businesses: a hidden address costs map-pack proximity, and recovery is measured in months. What that actually costs.

Before getting into what I built, it's worth understanding why the standard approach doesn't work.

Most agencies or freelancers handling multi-location SEO do one of two things:

Option A: City page templates. They create one page template, swap the city name, and publish 50 identical pages with "Appliance Repair in [City]" as the H1 (the page's main headline). Google sees thin duplicate content, and rankings stay flat.

Option B: One strong page, no local depth. They optimize a single service page well but don't build out the geographic coverage. Traffic is limited to people searching without a city modifier.

Neither approach captures the long tail of local search (the many specific, lower-volume searches that add up to most of the demand): the zip code level, the neighborhood level, the specific service + specific area combinations that make up the majority of actual local searches.

Approach What It Captures What It Misses
City template pages "Appliance repair [City]" Zip codes, neighborhoods, specific services
Single optimized page General service terms Any geographic specificity
Zip code + service matrix Long-tail local searches (Nothing: this is the goal)
AI Overview blocks Featured snippet / AI citation (Covered separately with schema)

The System I Built

1. Service-Area Pages at Zip Code Level

Instead of one page per city, I built pages for every significant zip code in each service area. Each page covers 6 specific services for that location.

The math: every location × multiple zip codes per location × 6 services = hundreds of pages, each targeting a specific geographic + service combination.

This is why the page count went from 64 to 1,174, and it was genuine coverage of the search surface rather than padding.

Scaling this way has one built-in risk: zip code pages, city pages and root service pages start competing for the same queries. Before adding pages at this volume, map which URL owns which intent; that mapping is exactly what a service area cannibalization audit produces, and the keyword cannibalization tool I use for it separates real conflicts from pages that only look like they compete.

2. AI Overview-Optimized Opening Block

Every page opens with a 4-sentence block written specifically to match what Google shows in AI Overviews and featured snippets.

The format:

  • Sentence 1: Direct answer to the implied question ("What appliance repair services are available in [area]?")
  • Sentence 2: Specific services listed
  • Sentence 3: Service-area clarification (no storefront, we come to you)
  • Sentence 4: How to get started

The tone is human throughout with no SEO filler, written the way a competent technician would explain their service to a neighbor.

This block is what gets cited in AI Overviews (the AI summary Google shows above results), because it is structured, specific and answerable.

3. Real Local Specificity (Not Template Swaps)

The difference between a template page and a real local page is specificity that couldn't apply anywhere else.

For each area I included:

  • Local landmarks and neighborhoods as reference points
  • Service coverage radius from that zip code
  • Any area-specific notes (parking, access, common appliance brands in that market)
  • Response time realistic to that geography

A reader in that zip code should recognize their area in the content. Google's quality signals pick this up through engagement metrics: time on page, return visits, and a low bounce rate (few people leaving after one page).

4. Internal Linking Architecture

Every service page links to:

  • Related services in the same geographic area
  • The main city hub page ("back to [City] appliance repair")
  • The most relevant FAQ content

This serves two purposes: users never hit a dead end, and Google can crawl (read through) the full content graph efficiently. PageRank, Google's measure of link strength, flows from the hub pages down to the zip code pages and back up.

5. Schema Markup on Every Page

Full LocalBusiness schema (hidden code that tells search engines the business type and area) with service area definitions. FAQPage schema on every page that includes Q&A content. No exceptions.

Schema doesn't guarantee rankings, but it gives Google structured data to pull into Knowledge Panels (the business information box in search) and AI Overviews, which matters for a service-area business that can't rely on a Maps listing.

Tools used: Google Search Console and RankMath, with no Ahrefs, SEMrush, BrightLocal or any other paid SEO tools.

The Results

Monthly Search Console impressions and clicks for the client, September 2025 to August 2026

Metric Sept 2025 Aug 2026 Change
Pages earning impressions 27 1,174 43×
URLs in the sitemap 64 1,173 +1,733%
Monthly impressions 6,119 260,233 43×
Organic clicks 388 1,465 3.8×
Average position 16.2 9.0 page two → page one
Website leads Not counted ~75 a month n/a
Equivalent ad value n/a ~$3,750 a month n/a

Both traffic columns are single calendar months pulled from the Search Console API on 22 September 2026, not running totals; August 2026 is used because it is the last complete month. "Indexed pages earning impressions" counts distinct URLs that Google actually showed to someone in that window, which is a stricter test than a page being technically indexed.

I also ran the URL Inspection API (Google's tool that reports whether each page is in its index) over every one of the 1,173 URLs in the sitemap the same day, because "indexed" is a word most case studies use without checking: 1,103 come back as "Submitted and indexed", or 94%. The remaining 70 split into 33 crawled but not indexed, 26 Google has never heard of, and 11 discovered and queued. That residue is the honest part of the picture, and it is the queue I work next.

At $50+ per lead on Google Ads, about 75 real leads a month represents roughly $3,750 a month in equivalent paid traffic value. The count comes from form submissions with spam and out-of-country entries removed (how that number was checked). The number keeps compounding as new pages index and gain authority.

On the AI Content Question

I want to be direct about this because the noise around it is still loud.

Yes, I used AI assistance to scale this content. Over a thousand pages of genuinely local, specific, useful content cannot be written at speed without it. The math doesn't work otherwise.

Here's what the process actually looked like:

Step Who Does It What It Involves
Research Human Identifying zip codes, local specifics, service priorities
Framework Human Page structure, opening block format, internal linking rules
First draft AI Writing to the framework with local inputs
Review Human Reading every page, checking accuracy, adjusting tone
Local specificity check Human Does this sound like someone who knows this area?
Schema + optimization Human RankMath configuration, schema markup
Post-publish monitoring Human GSC tracking, click-through rate, ranking positions

AI wrote the drafts, and a human controlled every decision point before and after. The result reads like content written by someone who knows both the subject and the local market, because the framework and review process ensured it.

The SEO experts warning about AI content penalties are describing a real failure mode: low-effort, unsupervised AI output with no human judgment applied. That does fail. What I built is the opposite.

What parts of this system transfer to other businesses?

I've now applied this framework to a second, completely different niche. Three months in, early traction is following the same pattern.

The framework is not industry-specific. The principles that make it work:

Principle Why It Works
Zip code level specificity Captures long-tail searches competitors ignore
AI Overview optimized opening Gets cited before the user even clicks
Real local content (not templates) Engagement signals tell Google it's useful
Systematic internal linking PageRank flows efficiently, crawlability improves
Schema on every page Structured data for AI and Knowledge panels
Human review at every step Quality stays consistent at scale

The niche changes, but the search behavior of someone looking for a local service at 11pm with a problem they need solved today does not change.

What to do with this

If you serve many areas, ask whether your website has a real page for each area and service you want calls for, and whether those pages say things specific to that area rather than swapping the city name. Make sure each page links back to its city hub and to related services, and that the pages are not competing with each other for the same search. Count website leads with spam removed, so you can compare the site with what you pay for ads. The cannibalization check is described under service area cannibalization, and prices are on the pricing page.


If your multi-location business is sitting on a flat content strategy and watching paid traffic costs go up, this is the conversation worth having. I can audit what you have, identify the gap, and scope what a build-out looks like for your specific markets. Let's talk, no commitment, just clarity on what's possible.


Related:

Related service pages
→AI citation visibility: ChatGPT went from naming a client once to 813 times in six weeks.