What we learned from the reference client, what it means for THA, and the 23-page structure we recommend building.
Prepared for Sarah Olds · 18 August 2026 · iProv
Build Texan Heating & Air a location page structure that captures HVAC search demand across their Fort Worth service area, using what we have learned from the location structure iProv built for the reference client.
Before copying that structure, we audited whether it actually worked. It did not. This document explains what we found, and what we recommend building instead.
The reference client's 109-page service-by-city matrix earned 465 clicks in 16 months. Their blog earned 4,886. The one part of the structure that genuinely worked was the single page per city, which out-earned the matrix pages by 8 times per page.
We should build THA the part that worked and skip the part that did not. That means 23 pages: 8 service hubs and all 15 cities THA lists as its service area, on the city axis only. It does not mean multiplying 8 services against 15 cities, which would be 120 pages of the exact kind that failed.
Sarah's direction is to build out all 15 cities listed on THA's service-areas page, rather than the 5 with measurable search volume. That is reflected throughout this document. The tiering in section 5 exists to make the other 10 defensible, and section 5 is explicit about what those pages can and cannot be expected to do.
The reference client runs 119 pages on a service-by-city matrix across 10 cities across their service area. We pulled 16 months of Search Console data, 42,216 query-page pairs, to see which pages earned anything.
| Page group | Pages | Clicks (16 mo) | Share | Clicks per page |
|---|---|---|---|---|
| Blog / editorial | 236 | 4,886 | 75.4% | 20.7 |
| Homepage | 1 | 757 | 11.7% | 757 |
| Service hubs | 9 | 360 | 5.6% | 40.0 |
City pages /locations/{city}/ | 10 | 200 | 3.1% | 20.0 |
| Service x city matrix | 68 | 175 | 2.7% | 2.6 |
Source: Google Search Console, reference client site, 16-month window (2025-04-18 to 2026-08-15). Analysis by Gus (Marketing Analyst).
First: one page per city beats ten. The /locations/{city}/ pages earn 20 clicks each. The service-by-city pages earn 2.6. When someone searches "{service} {city}", the purpose-built matrix page wins its own exact-match query only 48.8% of the time. Google picks the single city page instead 30% of the time. The value lives in the city dimension, not in multiplying services against cities.
Second: the impressions were not real people. Queries phrased exactly like the reference client's title tags, the "{service} in {city}" pattern, pulled 648,808 impressions and one click in 16 months. That includes a position 1.0 ranking with 9,578 impressions and zero clicks. A real page-one ranking converts at 5 to 30%. This traffic reads as rank-trackers and scrapers echoing the page titles back, not customers. It accounts for 87% of the matrix's impressions.
If anyone in the room believes the reference client's structure was effective, this is almost certainly why. In a Search Console screenshot it shows hundreds of thousands of impressions and page-one rankings. Those numbers are real. What they measure is not.
Third: the pages compete with each other. A median of 12 of the reference client's pages register impressions on the same query, with a maximum of 33. On a search for their flagship service in one of their cities, the best-ranking page turns out to be a different city's page, the wrong one. This is why 51% of the matrix pages that appear in Search Console have never earned a click.
Supporting evidence all points the same way: only 52% of impressions are US traffic, clicks are flat to declining across 16 months, brand terms account for 25% of all clicks, and not one geo-modified term appears in the top 20 click-earning queries.
The URL architecture is genuinely good and we are keeping it. Clean hierarchy, city as a directory under a parent, breadcrumbs that make sense. What we are rejecting is the content model underneath it. We diffed three of the reference client's city pages for the same service and found 48 of 51 sentences identical across all three cities. The pages are 13% unique, and the unique part is the city name swapped into the headline. That is a doorway page by Google's own definition, and it is the part that earned 2.6 clicks per page.
We crawled texanhvac.com. Before any new pages get built, there are foundational problems that matter more than page count.
| Issue | Detail | Priority |
|---|---|---|
| No H1 on any page | Every page checked, homepage through service pages, has zero H1 tags. The main heading renders as an H2. | Fix first |
| No meta descriptions | Not one page has a meta description. Google is writing THA's search snippets for them. | Fix first |
| No local schema | Only stock WebPage, ImageObject, BreadcrumbList, WebSite. No LocalBusiness, no Service, no areaServed. Nothing tells Google these pages are geographic. | Fix first |
| Duplicate service pages | Heat Pump Repair is 11% unique against Furnace Services, and its body copy is about heating repair, not heat pumps. There are also two AC pages covering the same service. | Fix first |
| Keyword-free titles | "Fort Worth - Texan Heating & Air", "Services - Texan Heating & Air". No service or geographic terms. | Fix first |
| One service area page | 14 towns are named in body copy. Only Fort Worth has a page. | Build |
Source: direct crawl of texanhvac.com, 18 August 2026. 14 pages in sitemap, 2 blog posts.
THA already has the reference client's problem in miniature. Their Heat Pump page is a copy of their Furnace page with the title changed. Adding city pages on top of this foundation would multiply the problem, not solve it.
THA's site names 14 towns it serves. We pulled search volume for 168 service-and-city keyword combinations across all of them.
| Keyword | Volume/mo | Difficulty | CPC | Intent |
|---|---|---|---|---|
| ac repair fort worth | 1,300 | 11 | $71.32 | Commercial |
| air conditioning repair fort worth | 1,300 | 8 | $71.32 | Commercial |
| hvac fort worth | 720 | 21 | $28.06 | Commercial |
| furnace repair fort worth | 390 | — | — | Commercial |
| hvac companies fort worth | 320 | 5 | $25.72 | Commercial |
| ac repair weatherford tx | 260 | 24 | $55.32 | Informational |
| air conditioning repair weatherford tx | 260 | 8 | $55.32 | Informational |
| hvac repair fort worth | 210 | 2 | $26.12 | Commercial |
| ac installation fort worth | 140 | 9 | — | Commercial |
| hvac weatherford tx | 140 | 14 | $42.27 | Navigational |
| ac repair benbrook | 90 | 0 | $4.74 | Navigational |
| ac replacement fort worth | 90 | 10 | — | Commercial |
| ac repair saginaw tx | 90 | 0 | $10.25 | Commercial |
| heating repair fort worth | 70 | 15 | — | Commercial |
| ac maintenance fort worth | 70 | 12 | $64.14 | Commercial |
| ac repair aledo | 50 | 0 | $73.19 | Commercial |
| emergency ac repair fort worth | 20 | 0 | $70.30 | Informational |
Source: DataForSEO, pulled 18 August 2026, US national volume for geo-modified terms. Terms returning no data are omitted.
CPC on the core terms runs $55 to $73. "ac repair aledo" costs $73.19 per click in paid search at only 50 searches a month. These are low-volume, high-value keywords. One captured job pays for a lot of page-building, which is why low search volume does not by itself disqualify a city page.
| Keyword | Peak | Trough | Swing | Implication |
|---|---|---|---|---|
| ac repair fort worth | 2,400 (Jul, Sep) | 480 (Nov, Dec) | 5x | Cooling pages must rank by May |
| furnace repair fort worth | 1,900 (Feb) | 30 (Nov) | 63x | Heating pages must rank by December |
| heating repair fort worth | 320 (Sep) | 10 (Jan, Jun) | 32x | Same |
Source: DataForSEO monthly search volume, trailing 12 months.
We are entering the year at the wrong end of the cooling season and the right end of the heating season. New pages take time to rank. Heating and furnace pages should be built first, because their demand peaks in February and a page built in August has time to earn position. Cooling pages have until roughly April.
Twenty-three pages: 8 service hubs and all 15 service-area cities. City axis only, no service-by-city cross-product.
Spelling. THA's service-areas page spells it "Anneta" and "Anneta South". The towns are Annetta and Annetta South, Parker County. The URLs must use the correct spelling or the pages will not match how anyone actually writes the town.
A missing town. They claim Annetta and Annetta South but not Annetta North (pop. 665), which sits between the two. Almost certainly an oversight rather than a service boundary. Worth confirming Friday.
Ten of the fifteen cities have no measurable organic search volume. We verified this across two DataForSEO endpoints and several phrasings. Nobody searches "ac repair westover hills". Building those pages is still defensible, but only if we are honest about the job they are doing.
| Job | Tier | Where success shows up |
|---|---|---|
| Rank for "{service} {city}" organic terms | 1 and 2 | Search Console, geo queries |
| Support map pack relevance for "near me" and unbranded local searches | All | Google Business Profile insights, not Search Console |
| Convert referral, direct, and paid traffic from that town | 3 and 4 | GA4 landing page conversions |
| Answer "do you serve my town?" for a real prospect | 3 and 4 | Form fills, reduced bounce |
This matters for how we report on the work. If we tell THA that 15 city pages will drive organic traffic, 10 of them will not, and at the 90-day review that looks like failure. If we tell them the Tier 3 and 4 pages exist to support the map pack and to convert people who already found them, that is both true and measurable.
Thin pages are the one thing that would sink this, so the uniqueness has to come from facts rather than adjectives. The Texas Railroad Commission publishes natural gas service and residential consumption by city, which turns out to separate these towns sharply.
| Town | Gas utility | Residential Mcf | Per resident | What it implies |
|---|---|---|---|---|
| Westover Hills | Atmos Mid-Tex | 53,613 | 83.4 | 14x Benbrook. Very large homes on gas heat. |
| Westworth Village | Atmos Mid-Tex | 41,522 | 15.0 | Contains NAS JRB territory |
| Aledo | Texas Gas Service | 63,133 | 13.0 | Median home $525,604 |
| River Oaks | Atmos Mid-Tex | 88,660 | 11.9 | Dense older gas-heated stock |
| Edgecliff Village | Atmos Mid-Tex | 38,395 | 10.2 | — |
| Lakeside | Atmos Mid-Tex | 15,425 | 9.4 | Azle ISD, Eagle Mountain Lake area |
| Hudson Oaks | Texas Gas Service | 18,889 | 8.7 | — |
| Saginaw | Atmos Mid-Tex | 180,619 | 6.6 | — |
| Benbrook | Atmos Mid-Tex | 140,289 | 5.8 | — |
| Weatherford | Texas Gas Service | 167,659 | 5.5 | — |
| White Settlement | Atmos Mid-Tex | 98,933 | 5.4 | — |
| Willow Park | Texas Gas Service | 7,913 | 1.6 | Lowest by far. Most homes are not on piped gas despite service existing. |
| Annetta | None listed | — | — | No gas utility serves it. Propane territory. |
| Annetta South | None listed | — | — | Same |
Source: Railroad Commission of Texas, Table 1B, Natural Gas Service to Texas Cities, Investor Owned Gas Distribution Utilities, calendar year 2021. Per-resident figures are residential Mcf divided by current population, used as a rough indicator of gas-heating intensity, not a precise per-household measure.
Gas volume is a proxy. Census ACS measures it directly, household by household, and it separates these towns into three distinct markets. This is the single most useful table in this document for whoever writes the copy.
| Town | Median yr built | Utility gas | Propane | Electric | Market type |
|---|---|---|---|---|---|
| Westworth Village | 1976 | 61.1% | 0.0% | 38.4% | Gas furnace, strongest |
| Westover Hills | 1975 | 47.2% | 0.0% | 52.8% | Gas furnace |
| Lakeside | 1970 | 43.4% | 7.8% | 47.9% | Gas plus notable propane |
| River Oaks | 1953 | 43.0% | 1.1% | 54.5% | Oldest stock in the set |
| Edgecliff Village | 1976 | 42.4% | 0.2% | 52.8% | Gas furnace |
| Aledo | 2010 | 40.0% | 0.0% | 59.7% | Newest stock, gas furnace |
| Fort Worth | 1998 | 35.4% | 0.7% | 61.9% | Mixed |
| Saginaw | 2000 | 25.2% | 0.5% | 71.7% | Mixed, newer |
| Benbrook | 1983 | 24.3% | 1.9% | 72.6% | Mixed |
| White Settlement | 1973 | 23.6% | 1.8% | 74.1% | Mixed, older |
| Weatherford | 1998 | 22.4% | 1.3% | 74.8% | Mixed |
| Annetta | 1999 | 0.0% | 9.3% | 90.1% | All-electric, no main |
| Hudson Oaks | 1999 | 4.3% | 2.6% | 91.5% | All-electric |
| Willow Park | 2003 | 2.9% | 1.5% | 94.8% | All-electric |
| Annetta South | 1992 | 0.0% | 24.6% | 75.4% | Propane |
| Annetta North | 1994 | 3.0% | 18.8% | 75.9% | Propane |
Source: US Census ACS 2024 5-year, tables B25040 and B25035. All nine Tarrant County towns pulled directly by me from the Census Reporter API; Parker County figures from research, with Aledo and Willow Park independently re-verified against the Census Reporter API. Gas service confirmed against Railroad Commission of Texas Table 1A and Texas Gas Service's own tariff, neither of which lists any Annetta.
Aledo is a gas market, not a heat pump market. An earlier draft called Aledo "new-build heat pump territory versus older Fort Worth central air." That is backwards. Aledo has the highest utility-gas share of any town here, 40.0%, above Fort Worth's 35.4%. Its new construction is being built on the gas main because Aledo has one. Verified directly.
"Hudson Oaks has piped gas" is true but misleading. A gas main exists, but only 4.3% of homes use it and 91.5% are electric. Hudson Oaks is an all-electric town with a gas main almost nobody connected to. Willow Park is the same story at 2.9% and 94.8%.
The earlier "well water and propane" claim was wrong for Hudson Oaks and Aledo, and right for the Annettas. Corrected above.
Annetta South is the propane page. Nearly one home in four heats with tank propane, and no gas utility serves the town at all. A propane furnace has different orifices and burner setup and cannot be converted, because there is no main to convert to. That is real, specific work.
Willow Park and Hudson Oaks are the all-electric pages. Over nine in ten homes. Completely different conversation from Aledo one town over.
Aledo is the gas furnace page. Newest housing in the set, median year built 2010, and the highest gas-heat share. New homes on the main.
ACS records the fuel, not the equipment. "Electricity" covers both heat pumps and electric-resistance strip heat on a straight-cool condenser. No source splits those by town. Write "all-electric," which is provable. Do not write "heat pump" as a demographic fact anywhere.
On the reference client's site, /locations/{city}/ links to all nine service hubs but to zero of that city's own service pages. The two axes of the matrix never connect. A visitor on that city's page cannot reach their core service in that city.
Every city page links to every service hub. Every service hub links to every city page. City pages link to neighbouring city pages. It is a small enough set that full cross-linking is practical, and it is the single cheapest structural advantage we can hand THA over the reference client.
Google's published spam policy defines doorway abuse as "sites or pages are created to rank for specific, similar search queries. They lead users to intermediate pages that are not as useful as the final destination." Two of its three listed examples describe the reference client's structure directly:
"Having multiple domain names or pages targeted at specific regions or cities that funnel users to one page"
"Creating substantially similar pages that are closer to search results than a clearly defined, browseable hierarchy"
Source: developers.google.com/search/docs/essentials/spam-policies, retrieved 18 August 2026.
A note on thresholds: Google publishes no percentage for how unique a location page must be. Various SEO blogs cite figures between 40% and 70%, but they contradict each other and none traces back to a Google source. The 400-word rule below is our own editorial standard, not a documented requirement. What is documented is the qualitative test, and practitioner guidance converges on the same five traits: original localized content, genuine local proof, real placement in the site hierarchy rather than orphaned pages, conversion focus over ranking-only intent, and honesty about whether the business has a physical presence in that city.
Practitioner source: Marco Silva, "Location Page Spam", RicketyRoo, 30 June 2025.
The 13% uniqueness on the reference client's pages is what capped their performance. Every THA city page needs genuine local substance, not a name swap. At minimum:
LocalBusiness and Service schema with a correctly scoped areaServedIf we cannot write 400 unique words about a city, that city does not get a page. It gets a line on the service-areas parent instead. That rule is what keeps this from becoming the reference client.
The cities THA does not currently claim have more search demand than most of the ones it does.
| City | "ac repair {city}" | Difficulty | Currently claimed? |
|---|---|---|---|
| Arlington | 320 | 0 | No |
| Burleson | 260 | 23 | No |
| North Richland Hills | 210 | 0 | No |
| Keller | 140 | 0 | No |
| Mansfield | 90 | 4 | No |
| Benbrook | 90 | 0 | Yes |
| Saginaw | 90 | 0 | Yes |
| Aledo | 50 | 0 | Yes |
Source: DataForSEO, 18 August 2026.
THA's stated service area runs west from Fort Worth into Parker County. Arlington, Keller, North Richland Hills, and Mansfield are east and northeast. The demand is real and the difficulty is near zero, but we should not build pages for territory they do not actually serve.
What is the real drive radius, and would THA take work in Arlington, Burleson, North Richland Hills, Keller, or Mansfield? Roughly 1,020 monthly searches sit in those five cities at difficulty 0 to 23, which is more than their entire current non-Fort-Worth service area combined.
| Phase | Work | Why now |
|---|---|---|
| 1 | Technical foundation: H1s, meta descriptions, LocalBusiness and Service schema, title rewrites, consolidate the duplicate heat pump and AC pages | Cheapest wins available. Every later page inherits these. |
| 2 | Rebuild the 8 service hubs | The reference client's hubs earned 40 clicks per page, the best ratio in the structure after the homepage. |
| 3 | Heating, furnace, and heat pump pages first within phase 2 | 63x seasonal swing peaking in February. Build now to rank by then. |
| 4 | Rework Fort Worth, then build Tier 2: Weatherford, Saginaw, Benbrook, White Settlement | The proven pattern. One page per city, largest markets first. |
| 5 | Build Tier 3 and 4: the remaining 10 cities | Staged deliberately. Google's guidance warns against publishing a large batch of near-identical pages at once, and staging gives us a quality gate before the hardest pages to write. |
| 6 | Full cross-linking: 15 cities x 8 hubs, both directions | The defect that capped the reference client. |
| 7 | Editorial plan on non-geo HVAC terms | 75% of the reference client's clicks came from blog content. It was the engine nobody credited. |
| 8 | Measure at 90 days before expanding | If the first city cohort earns nothing, do not build the next five. |
Prepared by Shepard (Tech Director) with Gus (Marketing Analyst). Search Console analysis covers the reference client's site, 16-month window (2025-04-18 to 2026-08-15). Keyword and seasonality data from DataForSEO, 18 August 2026. Site crawls of the reference client's site and texanhvac.com performed 18 August 2026.