Case Study · HVAC · SEO

Twice the Impressions in Six Months

A measurement writeup of the search program behind More Heat More Cool, a family-run HVAC contractor in Monroe, Ohio: 146,416 → 298,939 impressions window over window, average position up 8.9 places, and three furnace keywords taken from unranked to the top three of the local tracked set — methodology, confounds, and receipts included.

Local SEOContent EngineeringMeasurement
More Heat More Cool HVAC website — Cincinnati and Dayton
Engaged
January 2026
Before window
Aug 13, 2025 – Feb 7, 2026
After window
Feb 8, 2026 – Aug 5, 2026
Verified
August 8, 2026
The Outcome

Every number on this page is sourced, dated, and reproducible from the listed windows.

2.04×
Search impressions
146,416 → 298,939 · window over window
+52%
Organic clicks
309 → 469 · same windows
+8.9
Average position
all queries: 35.3 → 26.4
#1–#3
Furnace keywords
DataForSEO local tracked set: unranked → top 3
Abstract

We audited moreheatmorecool.com in January 2026. The baseline report (Feb 19 – Mar 19) showed roughly 33,000 monthly search impressions and 56 organic clicks, the site's fourteen service pages were about 90% identical to one another, and in the 80-keyword local rank-tracking baseline its core furnace head terms were not ranked at all. Over the following six months we rebuilt the information architecture around a three-tier local funnel — service pages, city pages, cost pages, all fed by a working blog — and instrumented everything: 43 automation scripts, 277 structured-data blocks, and a similarity gate that now holds duplicate content at 1.3%.

This page documents what changed, how we measured it, and what could be confounding the numbers. Search impressions doubled window over window; the year-over-year control, which holds the season constant, shows the growth is not a seasonal artifact. Positions improved while the query footprint expanded — the harder direction, since new queries usually enter low and drag the average down[1].

What We Owned
Full site rebuild — hand-coded static pages, clean URLs
Keyword research and targeting on live SERP data
22 city pages, 14 service pages, 2 cost pages
Structured data: 277 JSON-LD blocks across 96 files
Persistent emergency CTA + click-to-call
Monthly measurement and public-format reporting
The Friction
  • Baseline (Feb 19 – Mar 19, 2026 report): 33,142 impressions, 56 organic clicks, average position 26.6.
  • Fourteen service pages measured ~90% textually identical — near-duplicate content sitewide.
  • No tracked local ranking for any core furnace term in the baseline snapshot (80-keyword DataForSEO set).
  • The emergency page earned 9,278 impressions and exactly 1 click — visibility without clickability.
How We Moved It
  • Built the three-tier local funnel: service pages for what they do, city pages for where they do it, cost pages for the buying moment — each tier cross-linked, each page genuinely written for its place[5].
  • Retargeted pages to exact-match head terms chosen from live volume and difficulty data — the furnace-maintenance page went after a 40,500-search term at difficulty 6 that the site had zero impressions for.
  • Traced every zero-impression page to its missing internal links and completed the nav → service → blog → cost-hub paths.
  • Drove template similarity from ~90% to 1.3% with a measurement gate that blocks deploys when duplication creeps back.
From the Live Site

Built for the 2 A.M. Search

The emergency page carries more impressions than any other page on the site — 79,843 in the after window, up from 9,278 and exactly one click at baseline.

The rebuilt page keeps the 24/7 number in the first screenful on every device — on mobile the call button is full-width and one tap deep, because 76% of nearby-service searchers act within 24 hours[5]. Turning that visibility into clicks is the current workstream: the page sits at position 29.6, and climbing it is the plan documented under What's Next.

24/7 click-to-callPersistent on every page22 service-area pages

Captured from the live site · Aug 2026

Live 24-hour emergency furnace and AC repair page for Cincinnati and Dayton — Call Now and Schedule Online buttons in the first screenful
Execution: The Receipts

Every Move Is Dated

The strategy is a three-tier local funnel — service → city → cost, fed by the blog — because local search intent is transactional: 46% of Google searches carry local intent[6], 76% of nearby-service searchers visit or call within a day[5], and 93% of consumers read reviews before choosing[7]. Below is the engagement log, straight from the project repo's git history. When a target is named, the volume and difficulty numbers were recorded in the commit before the work shipped — targeting first, results after.

  1. Jan 26, 2026

    Baseline Audit

    39-page SEO, responsiveness, and accessibility audit; backlog scored by impact, effort, and risk before any work shipped.

  2. Mar 26, 2026

    Rebuilt Site Ships

    Hand-coded static site replaces the old build: clean URLs, 95 redirect rules, structured data on every template.

  3. Jun 2, 2026

    Eight-Phase Remediation

    Full audit backlog cleared in one push: schema rebuilt from visible text, NAP standardized across 79 files, geo coordinates corrected on 27 pages.

  4. Jun 21, 2026

    Topical Clustering

    Service, city, and cost pages cross-linked into clusters; FAQ gaps filled against keyword data (central AC installation cost: 27,100 searches/mo, difficulty 2).

  5. Jul 6, 2026

    40,500-Volume Retarget

    Furnace-maintenance page retargeted to its exact-match head term (40.5K searches/mo, difficulty 6, zero impressions at the time). Ranked #3 by July 31.

  6. Jul 9, 2026

    Commercial Cost Pages

    Furnace-replacement-cost page for Monroe built on fresh SERP evidence that local contractor pricing pages were cracking page one against national guides.

  7. Jul 18, 2026

    Internal-Link Recovery

    Pages with zero Search Console impressions traced to missing inbound links; nav → service → blog → cost-hub paths completed.

  8. Aug 7, 2026

    Claims Compliance Sweep

    Expired federal tax-credit references removed from 26 pages; recurring claims-consistency calendar established.

Integrity notes from the same log: an automated audit's suggestion to add misleading Article markup was refused (commit 56b6529); a trialed auto-blogging tool that produced two sub-standard posts was fully rolled back within 2.5 hours; expired tax-credit claims were removed from 26 pages in the Aug 7 compliance sweep.

Measured Results

What Moved

Two equal 179-day Search Console windows, before and during the program — plus a same-months year-over-year control so seasonality can't take the credit.

Search Impressions by Month

Google Search Console, Aug 2025 – Jul 2026 (last full month). February 2026 spans the engagement boundary and appears in both series at its full-month total.

Queries That Moved

Impressions and average position per window. Sampled from 1,627 compared query rows by volume and relevance — including one that got worse (ac installation near me), because that is what real data looks like.

QueryImpr beforeImpr afterPos beforePos after
furnace installation near me4222,9302.61.4
hvac near me4442,2624.71.6
ac repair near me1,0505,1648.46.6
furnace repair1,6234,58917.614.7
emergency furnace repair2,2052,64338.622.9
24 hour emergency furnace repair3312,00444.016.2
hvac emergency repair1,4812,11229.719.9
ac installation near me4893,5642.213.5

Pages Doing the Work

The site’s eight biggest pages by current impressions. The homepage tripled its clicks (104 → 339) while climbing from position 40 to 11; four of the eight did not exist in the before window.

PageImpr beforeImpr afterPos beforePos afterClicks beforeClicks after
Homepage13,63768,39640.110.6104339
/emergency-services48,45079,84337.929.657
/air-conditioning-repair74016,82666.540.513
/water-heater-repair-installationnew14,33638.200
/services3,90612,36464.443.622
/loveland-oh-hvacnew12,20622.200
/monroe-oh-hvacnew11,17729.003
/mason-oh-hvacnew9,77720.001

Windows: Aug 13, 2025Feb 7, 2026 vs Feb 8, 2026Aug 5, 2026 (179 days each), captured August 8, 2026 from Google Search Console[1]. Year-over-year control, Apr 8 – Aug 5 both years: 37,828225,530 impressions with the season held constant. Position robustness: across the 265 queries with ≥50 impressions in both windows, impression-weighted average position improved 30.621.8.

Tracked Rankings

From Not Ranked to Number One

The tracked-keyword snapshot tells the sharpest version of the story: the head terms for the client's core business went from absent to the top of page one.

  • furnace installation
    Not ranked#1
  • furnace repair
    Not ranked#2
  • no heat near me
    50/mo searches
    Not ranked#2
  • furnace maintenance
    40,500/mo searches
    Not ranked#3
  • monroe heating and air
    50/mo searches
    Not ranked#4

DataForSEO rank snapshot, July 31, 2026 — 80-keyword tracked set, desktop, local SERPs; every row shown was unranked in the baseline snapshot. Branded terms excluded. This is a different measurement basis than Search Console average position (see Methodology) — the two are never mixed on this page.

Read This Before Quoting Us

What Could Be Confounding These Numbers

A results page you can quote is one that audits itself. Five things that could be moving the figures besides us:

  1. 1
    Seasonality. The comparison windows straddle different demand seasons — the before window contains furnace season, the after window contains AC season, and July “AC repair” demand runs +266% over its annual baseline[8]. That is exactly why the year-over-year control exists: comparing Apr 8 – Aug 5 against the same dates in 2025, impressions still grew 37,828 225,530 with the season held constant.
  2. 2
    Google's June 2026 spam update landed inside the measurement window. Per Google's own core-update guidance, movement inside an update window should not be attributed to any single change[9] — our monthly report annotates the update dates rather than claiming through them.
  3. 3
    The click base is still small. 469 organic clicks in the after window. The percentages are real, but visibility has outrun clicks — position 26 earns almost nothing, because the top three results absorb 54–69% of all clicks depending on the study and the SERP layout[2][3][4]. Converting impressions into clicks is the current workstream, not a solved problem.
  4. 4
    Mobile performance is unfinished. The July 2026 report scores mobile lab performance at 59/100. A June remediation cut the tested template's LCP dramatically, but the monthly mean is still high and we are not claiming a speed win.
  5. 5
    Paid channels ran alongside. Roughly half of total site traffic in July came from paid campaigns. Every number on this page is filtered to organic Google Search only — paid traffic cannot inflate impressions, clicks, or position in these figures.
Methodology

How We Measure

Impressions, clicks, CTR, and average position follow Google's published definitions[1]. An impression means a link to the site was served in results a user saw or could have seen; average position is the topmost position of any link to the property, averaged across queries — so it moves when the query mix moves, not only when rankings do.

Two measurement bases appear on this page and are never blended. Google Search Console average position covers every query the site appeared for (1,627 compared rows in these windows). DataForSEO tracks a fixed 80-keyword set on local desktop SERPs, snapshotted daily. A number's basis is named wherever it appears.

Window definition: the measurement window opens Feb 8 — six months before capture, chosen by the calendar, not by us. The engagement's first artifact is the Jan 26 audit, and the rebuilt site deployed March 26 — so roughly six weeks of the after window predate any shipped change, which understates the post-deploy effect if anything. The windows are equal 179-day spans, and the before window includes the site's August 2025 impression spike, which raises the baseline we compare against.

SourceWhat it providesFreshness
Google Search ConsoleImpressions, clicks, CTR, position — all windows on this pageData through Aug 5, 2026
DataForSEO rank tracking80-keyword tracked set, desktop, local SERPsSnapshot Jul 31, 2026
Published client reportsBaseline (Feb 19 – Mar 19) and July 2026 monthly reportGenerated Aug 3, 2026
Project repositoryDated commits, targeting rationale, validation gatesContinuous
Open Targets

What We're Going After Next

  • The HVAC-repair cluster. Roughly 167,790 monthly searches at an average difficulty of 11.8 where the site currently records zero impressions — the largest untouched target on the board.
  • Impressions → clicks. The emergency page holds 79,843 impressions at position 29.6. The CTR curve is brutally top-heavy — one position gained is worth roughly a third more clicks[2] — so the next phase is climbing the pages that already have the visibility.
  • Mobile performance. Lab scores are still mid-pack; the remediation plan is in the maintenance calendar, and we'll publish the numbers when they're worth publishing — not before.
From the Build

Two Ways In: Call or Estimate

Emergency HVAC happens on a phone. Urgent visitors get the 24/7 number in every header; everyone else lands in the free-estimate flow that fills the schedule between emergencies.

More Heat More Cool free HVAC estimate page for Monroe, Ohio — the request form sits beside the 24/7 phone number
More Heat More Cool homepage with Get a Free Estimate and direct-call buttons above the fold
Call-first homepage01
HVAC services page for Cincinnati and Dayton with call, estimate, and service-area buttons
Cincinnati & Dayton services02
Sources & Notes

Third-party statistics cited above. Client-specific figures come from the sources in the Methodology table; the underlying Search Console views were captured with the owner authenticated on Aug 8, 2026.

  1. 1.

    Performance report metric definitions (impressions, clicks, average position, CTR). Google Search Console Help · accessed Aug 2026

  2. 2.

    Google organic CTR by position — #1 earns 27.6% of clicks; the top three earn 54.4%. Backlinko (4M-result study, updated 2025) · accessed Aug 2026

  3. 3.

    Position-1 CTR ranges 13.7–46.9% depending on SERP layout. SISTRIX (80M-keyword study) · accessed Aug 2026

  4. 4.

    Google click-through rates by ranking position, 2026 edition. First Page Sage · accessed Aug 2026

  5. 5.

    76% of people who search for something nearby visit a related business within 24 hours. Think with Google · accessed Aug 2026

  6. 6.

    46% of Google searches carry local intent; 42% of local searchers click the Maps pack. Backlinko local SEO statistics · accessed Aug 2026

  7. 7.

    93% of consumers read online reviews before visiting a business; 83% read them on Google. BrightLocal Local Consumer Review Survey 2025 · accessed Aug 2026

  8. 8.

    “AC repair” search demand peaks in July at +266% of its annual baseline; “furnace repair” peaks in January at +137%. WebFX seasonal home-services search study (Ahrefs data, Dec 2025) · accessed Aug 2026

  9. 9.

    Core-update guidance: movement inside an update window should not be attributed to any single change. Google Search Central · accessed Aug 2026

Want Something Like This?

Let's talk about what a bespoke build would look like for your business.

Next Case Study

Forward Physio

Continue reading
Forward Physio