Skip to main content
okaybabe

okaybabe research

We analyzed 572 real contractor websites.

The State of Home-Services Contractor Websites 2026

By Bradley · okaybabe · June 2026

The short version: most of these sites are missing the basics that get a contractor found by Google and by AI. The good news is the fixes are mostly small.

We measured 617 working contractor websites in HVAC, roofing, kitchen & bath remodeling, and pest control. We kept 572 after cleaning out 45 off-trade sites. Each one was checked the way Google and an AI assistant actually read it: how it ranks, what it tells search engines about itself, whether AI can read it at all, and how fast it loads. If your site is somewhere in here, you’re not named: we only ever publish the totals.

The headlines

  • About 1 in 8 contractors are invisible in Google: they rank for zero local searches, worst in pest control at nearly 1 in 5.
  • AI can reach these sites and finds almost nothing to quote: only about 1 in 34 block an AI crawler, but about 1 in 18 serve it a near-blank page, and just 13% tell it what kind of business they are.
  • 88% get so little traffic that Google has no real-world speed data on them at all.
  • More than 1 in 4 sites give search engines no machine-readable facts at all: no code listing their name, address, or hours.
  • 1 in 4 sites make a phone customer hunt for the number: no one-tap way to call on a phone.
  • More than half (54%) run on WordPress; only about 1 in 38 are built on modern web tech.

How to read these numbers. Every figure comes from a study of 572 real contractor websites, rounded here to whole numbers. Exact values, sample sizes, and margins of error (about ±4 points overall) are in the methodology, the downloadable data, and the full PDF report. It’s a careful industry sample, not a national census. So read each number as “about.”

Headline findings by audience

For the trades

Nearly 1 in 5 pest-control websites are invisible in Google: they rank for zero local searches.

HVAC 8%Roofing 14%Kitchen & Bath 7%Pest 19%.

For search & AI press

Contractors left the door wide open to AI: only 3% block an AI search crawler. Yet 6% serve a near-empty page to those crawlers.

And just 13% use a vertical schema type AI search can resolve.

For Show HN

We measured 617 real contractor websites (572 after cleaning), and 88% are too small for Google’s real-user dataset.

Only 3% run on a modern web framework. Open methodology, downloadable data + a full PDF.

Search visibility

Most contractors barely show up in their own search results

12%

rank for zero local searches: no sign of them when someone nearby looks for their trade. (Search-ranking estimates from DataForSEO, a third-party tool, not Google’s own numbers.)

Rank for zero local searches, by trade
  • HVAC8%
  • Roofing14%
  • Kitchen & Bath7%
  • Pest control19%
  • All trades12%
Typical number of searches a site shows up for
  • HVAC114 kw
  • Roofing58 kw
  • Kitchen & Bath34 kw
  • Pest control28 kw
Show up for fewer than 10 searches
25%
Hold at least one #1 result
62%

The spread is the story: 75% of HVAC sites hold at least one #1 result versus 43% of pest-control sites. That’s a 32-point gap between the best and worst trades.

AI-readiness

AI is reading their sites and finding almost nothing

6%

serve a near-blank page to AI: the words load in a way the AI can’t see, so the crawlers behind ChatGPT, Claude, and Perplexity get an empty page and have nothing to quote.

Block AI from reading the site
3%
Block any AI bot at all
4%
Tell AI what kind of business they are
13%
Have a Q&A / FAQ section in code
7%
Name a real person behind the brand
14%
Publish an llms.txt (an AI-instructions file)
16%

The flip of the 2026 publisher story: big news sites are racing to block AI; contractors almost never do. But almost none have built anything for AI to quote either.

Real-world speed · Field data

Google has no real-world speed data on most of these sites

88%

are too small for Google to have real-world speed data on them: they don’t get enough visitors to register. (A “no data” response from Google is how we measure it.)

Have any real-world speed data at all
12%
Pass all of Google's speed checks (of the 39 measured)
44%

Only 71 of the 572 sites get enough traffic for Google to track at all, and just 39 of those have all three speed scores measured. So these field numbers describe a small, higher-traffic minority. It’s a coverage fact, not a quality verdict, and we never mix it with the lab scores below.

Lab speed · Lighthouse

In a lab test, more than 1 in 4 flunk the speed check

28%

score under 50 on Google’s 0-to-100 mobile speed test: a single simulated run on Google’s own tools, kept separate from the real-visitor data above.

Typical mobile speed score, by trade (lab)
  • HVAC62 /100
  • Roofing59 /100
  • Kitchen & Bath58 /100
  • Pest control65 /100
Score below 50, by trade (lab)
  • HVAC29%
  • Roofing34%
  • Kitchen & Bath26%
  • Pest control20%
  • All trades28%

Structured data

More than 1 in 4 give search engines nothing to read

27%

have no structured data: the hidden code that spells out a business’s name, address, phone, and hours so Google and AI can read them directly.

Have a valid “local business” tag
33%
Tag their specific trade (HVAC, roofing…)
13%
Say which areas they serve, in code
17%
Have review stars in code
10%
Tag their specific trade, by trade
  • HVAC24%
  • Roofing23%
  • Kitchen & Bath0%
  • Pest control1%
  • All trades13%

HVAC leads at 24%; Kitchen & Bath sits at 0%, partly because there’s no standard code tag for remodelers (a limit we note in the method).

The phone

The phone is the conversion, and one in four buries it

75%

have a one-tap way to call on a phone, so the other 1 in 4 force someone with a burst pipe to copy the number down by hand.

Have one-tap calling on mobile, by trade
  • HVAC79%
  • Roofing78%
  • Kitchen & Bath59%
  • Pest control78%
  • All trades75%
Have a contact form
61%
Let you book online
8%

On-page basics

Nearly half get their homepage headline wrong

49%

have a homepage title the right length to show in full on Google. That title is the headline searchers see. The other half are cut off, or too thin to say anything.

Mention their city in the title
56%
Have a homepage under 300 words (thin)
16%
Are accidentally hidden from Google
2%

The rare but fatal one: 2% of homepages carry an accidental “noindex” or equivalent block. That setting can quietly keep Google from listing the page.

Platforms

More than half on WordPress, almost none on modern web tech

54%

run on WordPress. Most lean on a drag-and-drop page builder that tends to slow the site down. Almost none use the newer, faster web tech.

What these sites are built on
  • Other / custom-coded23%
  • WordPress + Elementor23%
  • WordPress (no page builder)19%
  • WordPress + Divi7%
  • Wix6%
  • GoDaddy Website Builder4%
  • WordPress + Beaver Builder4%
  • Duda4%
  • WordPress + WPBakery2%
  • Squarespace2%
  • Scorpion (agency lead-gen)2%
  • Next.js (modern framework)2%
Built on modern web tech
3%
On a rented address (a builder subdomain they don’t own)
1%

Most of these platform choices are also price choices. What each one actually costs, and what the money buys, is written up in what a website costs.

Methodology

How we measured 572 contractor websites

A small team focused on website care, hosting, search visibility, and reputation for growing businesses. We got tired of guessing how bad the baseline really was. So we measured it. Here’s exactly how, in enough detail to check our work.

Collection. Site measurements and the ranking pull were run in June 2026. The Core Web Vitals reproducibility snapshot is pinned to Google’s public CrUX BigQuery release 202605 (May 2026).

Frame. Independent US home-services contractors in four verticals (HVAC, roofing, kitchen & bath remodeling, and pest control) operating with their own website. The sampling frame was built from commercial business databases cross-checked against state license registries, across 13 metros stratified by four Census regions × three population tiers (seeded random draw, seed 20260611; Texas held under a 40% home-bias cap). No Google Maps, Places, or Business Profile data is used anywhere in the pipeline: that data is prohibited from export by the Google Maps Platform Terms.

Analyzed sample by vertical

HVAC162
Roofing158
Kitchen & Bath97
Pest control155
All trades572

Attrition

Domains sourced668
− dead / unreachable47
− social / directory only (no real website)4
Live sites617
− off-trade contamination45
Analyzed (clean frame)572

Margin of error

At 572 sites the pooled margin of error is roughly ±4% (95% CI, worst case); per vertical at ~150 sites it is roughly ±8%. Each statistic on this page carries its own denominator and ±. Margins of error (±) are computed under a simple-random-sampling assumption. This is a stratified, non-probability frame drawn from commercial business databases, so every ± is indicative precision, not formal statistical inference. Between-vertical differences are only called out where the gap clears ~17 points, the level a 150-per-group sample can detect.

Field vs lab: never blended

Field data is real Chrome users (CrUX, 28-day p75, opted-in Chrome only). Lab data is a single simulated load on Google’s infrastructure (Lighthouse via PageSpeed Insights, emulated mid-tier mobile, throttled 4G). They are reported in separate sections and never combined in one number or chart. CrUX-covered sites skew toward higher-traffic, likely-healthier sites, so field-only figures overstate the health of the whole population. That is exactly why the two cohorts are split.

Named checks

CheckDefinitionSource
Organic visibility (ranking)Ranked organic keyword count + position distribution for each own-domain site, intersected with a committed local-intent lexicon ({trade} / {trade} {metro} / {trade} near me / {service} {city}). Organic positions only; never map-pack. Estimated via DataForSEO Labs, indexed June 2026; a third-party model, never blended with the CrUX/PSI data.DataForSEO Labs
Field Core Web VitalsPass = p75 LCP ≤ 2500 ms AND p75 INP ≤ 200 ms AND p75 CLS ≤ 0.10, from real Chrome users (CrUX, phone). A 404 from the CrUX API = the origin has no field data, which is itself the coverage measurement.web.dev/vitals
Lab performanceLighthouse mobile performance score 0–100 via the PageSpeed Insights API (emulated mid-tier mobile, throttled 4G, single load). Total Blocking Time is reported as the lab interactivity proxy (lab has no INP). Never combined with field numbers.PageSpeed Insights API
Structured dataJSON-LD + microdata parsed from the rendered DOM (extruct). "Valid LocalBusiness" requires name + address + telephone + (geo OR areaServed). Vertical subtype = HVACBusiness / RoofingContractor / PestControl; Kitchen & Bath has no dedicated schema.org subtype, reported with that limit disclosed.schema.org / Google LocalBusiness docs
JS-shell to AI crawlersRaw server HTML visible-word count ÷ rendered-DOM visible-word count, with an absolute raw-word floor. A near-empty raw shell is effectively invisible to GPTBot / ClaudeBot / PerplexityBot, which do not execute JavaScript. Directly reproducible by fetching the raw HTML.own dual-pass fetch
AI-crawler robots policyrobots.txt parsed for the most-specific matching group against a committed bot dictionary, reported as citation-crawler blocking (OAI-SearchBot / PerplexityBot / ClaudeBot / Google-Extended …) separately from training-bot blocking. robots.txt is advisory, so this measures declared policy.OpenAI / Perplexity / Anthropic bot docs
Click-to-callPresence of an a[href^="tel:"] link in the mobile-rendered DOM.own definition (rendered DOM)
Title healthA <title> present and within the 30–60-character render-safe heuristic band (Google truncates by pixel width, not characters; published as a heuristic), plus whether the homepage title contains the site’s metro/state token.Google title-link docs
Indexability faultsAccidental noindex via <meta name="robots"> or X-Robots-Tag header; home-path Disallow to our user-agent; canonical pointing to a different/broken URL; non-200 home status. Reported precisely (e.g. "home path disallowed to our UA"), never as "told Google not to index."Google block-indexing docs
Platform / CMS fingerprintwappalyzergo + the enthec/webappanalyzer fingerprint database over headers + rendered DOM; WordPress is split by page-builder (Elementor / Divi / Beaver / WPBakery). Builder subdomains (wixsite, godaddysites …) are tagged and never counted as an "own website."projectdiscovery/wappalyzergo + enthec/webappanalyzer

Fetches were polite and robots-respecting: an identifying user-agent (okaybabe-research/1.0), no more than one request per host every few seconds, at most two pages per site (homepage + one service/contact page), each fetched twice (raw HTML + rendered DOM). Only aggregate statistics are published: no per-site results, no screenshots, no personal data.

Reproducibility: pinned CrUX snapshot

SELECT yyyymm, origin, rank,
       p75_lcp, p75_inp, p75_cls,
       fast_lcp, avg_lcp, slow_lcp,
       phoneDensity, desktopDensity
FROM `chrome-ux-report.materialized.metrics_summary`
WHERE yyyymm = 202605
  AND origin IN UNNEST(@origins)

Limitations

  • This is a stratified, non-probability frame; margins of error are indicative, not formal inference.
  • CrUX covers only sufficiently-trafficked origins, so the ~88% with no field data is a coverage fact, not a quality verdict; field pass-rates describe only the covered minority.
  • Commercial business databases under-count website-less and subdomain-only firms, so true no-website prevalence is higher than any database-field figure; it is not published here as ground truth.
  • Lab scores are a single simulated load, not real-user experience.
  • Ranking and authority figures are third-party model estimates (DataForSEO Labs, indexed June 2026), labeled as such and never blended with the field/lab data.
  • Schema and on-page figures are prevalence, not proven ranking drivers. No causal claim is made from this data.

Cite & reuse

Free to cite and republish, with attribution

This study is released under CC BY 4.0: quote any number, embed any chart, with a link back. Each finding above has a one-click citation. Embed snippets are tagged rel="nofollow" by convention.

Example embed

<blockquote>
  12.4% of US home-services contractor websites rank for
  zero local-intent organic keywords.
  <cite>— okaybabe, <a rel="nofollow" href="https://okaybabe.com/research/state-of-contractor-websites-2026">The State of Home-Services Contractor Websites 2026</a></cite>
</blockquote>

About this study

This study was researched and published by okaybabe. We update it on the same URL each year. Questions or corrections: [email protected].

More of what we publish, written for businesses, lives in our resources library.