Your contractor website is slow. You might not feel it on your desktop at the office with a fast internet connection. But your customers feel it. They're on their phone, standing in a flooded kitchen or sweating through a broken AC, and your site takes 5 seconds to load.
They don't wait. They hit the back button and call whoever loads next.
Every second of load time costs you calls. That's not an opinion. Google's own research shows that as page load time goes from 1 second to 3 seconds, the probability of a visitor bouncing increases by 32%. From 1 to 5 seconds, it increases by 90%.
Let's look at exactly what's making your site slow and what to do about each problem.
Problem 1: Unoptimized Images
This is the number one speed killer on contractor websites. And it makes sense why. You took photos of your work on your phone, uploaded them directly to your website, and moved on. That's what most contractors do.
The problem is your phone takes photos at 4-12 megabytes each. A single page with 6 photos from your phone is asking the visitor's browser to download 24-72 megabytes of image data. On a typical mobile connection, that takes 10-20 seconds. Your visitor left after 3.
The Fix
Every image on your website should be:
- Resized to the actual display size. If an image displays at 600px wide on your site, the file should be 600px wide (or 1200px for retina screens). Not the 4000px your phone captured. Resize in any free image editor or use a tool like Squoosh.app.
- Compressed. Even after resizing, images can be compressed to reduce file size by 60-80% without visible quality loss. JPEG quality of 80% looks identical to 100% at web sizes. Nobody will notice. Your load time will.
- Converted to WebP format. WebP is a modern image format that's 25-35% smaller than JPEG at the same quality. Every modern browser supports it. If your site is serving JPEGs, switching to WebP is one of the fastest wins you can get.
- Lazy loaded. Images below the fold (anything the visitor can't see without scrolling) should load only when the visitor scrolls down to them. This means your above-the-fold content loads instantly, and the rest loads as needed. One line of HTML: add loading="lazy" to your image tags.
A typical contractor homepage has 1-3MB of unoptimized images. After resizing, compressing, and converting to WebP, that drops to 150-400KB. That's a 75-90% reduction in data the visitor's browser needs to download. The page goes from 5 seconds to under 2.
Problem 2: Too Many Plugins
If your site runs on WordPress (and a lot of contractor sites do), plugins are probably your second biggest speed problem.
Every plugin adds code that runs when your page loads. Some add JavaScript. Some add CSS. Some make additional requests to external servers. A WordPress site with 20 plugins might be making 40-60 separate requests just to load the homepage. Each request takes time.
Common offenders on contractor sites:
- Slider plugins - That rotating banner at the top of your homepage? It's loading a massive JavaScript library and preloading all the slide images. Sliders hurt conversions too - studies show they get less than 1% click rate. Remove it. Use a single strong hero image with your phone number and a call-to-action instead.
- Social media feed plugins - Your Instagram feed embedded on the homepage looks nice but it's loading the entire Instagram embed library and downloading dozens of images from Instagram's servers. It adds 2-3 seconds to your load time and nobody clicks it. Remove it. Link to your social profiles in the footer instead.
- Page builder plugins - Elementor, Divi, WPBakery, and other visual builders add enormous amounts of CSS and JavaScript to every page. We're talking 200-500KB of extra code just for the builder framework. Some of this code loads even on pages that don't use builder features.
- Analytics plugins - You probably have 2-3 analytics tools running. Google Analytics, Facebook Pixel, maybe a heatmap tool. Each one adds a JavaScript file. Consider whether you actually look at the data from all of them. If not, remove the ones you don't use.
- Security plugins - Necessary, but some are bloated. Wordfence and Sucuri add scanning scripts that run on the frontend. If possible, use a server-level firewall (like Cloudflare) instead of a plugin-based one.
The Fix
Go to your WordPress plugins page. For every plugin, ask: "Does this directly help a visitor call me?" If the answer is no, consider removing it.
A lean WordPress site needs about 8-12 plugins. If you're running 25+, you almost certainly have redundant plugins, abandoned plugins that haven't been updated in years, and plugins you installed once to solve a problem and forgot about.
Deactivate plugins one at a time and test your site speed after each removal. You'll be surprised how much speed you gain from removing plugins you forgot you had.
Problem 3: Bad Hosting
Hosting is the foundation your website sits on. Cheap hosting means a slow foundation. And most contractor websites are on the cheapest hosting available.
Here's how hosting affects speed. When someone visits your website, their browser sends a request to your hosting server. The server processes the request, builds the page, and sends it back. The time it takes for the server to respond is called Time to First Byte (TTFB). On cheap shared hosting, TTFB can be 800ms-2 seconds. On good hosting, it's under 200ms.
That means before a single image loads, before a single line of CSS renders, your visitor has already waited 1-2 seconds just for the server to respond. On a phone with a mediocre cell connection, add another second or two for network latency. You're at 3-4 seconds and the page hasn't even started rendering yet.
Shared Hosting vs. Everything Else
Most budget hosting plans ($3-10/month from GoDaddy, Bluehost, HostGator, etc.) are shared hosting. Your website shares a server with hundreds or thousands of other websites. When someone else's site gets a traffic spike, your site slows down. When the server is busy, your site waits in line.
The alternatives:
- Managed WordPress hosting ($25-50/month): Companies like Cloudways, SiteGround (GoGeek plan), or Kinsta run optimized servers specifically for WordPress. Built-in caching, faster hardware, fewer sites per server. TTFB drops from 800ms to 200ms.
- VPS hosting ($20-60/month): Your own virtual server. Not shared with anyone. You get guaranteed resources and consistent performance. Requires some technical knowledge to set up but delivers excellent speed.
- Static hosting (often free): If your site doesn't need WordPress, a static HTML site hosted on Cloudflare Pages, Netlify, or Vercel loads incredibly fast. TTFB under 50ms. No server processing. Just files served directly to the browser from the nearest data center. This is the fastest option available.
The difference between $5/month hosting and $30/month hosting can mean 1-2 seconds faster load times. For a contractor whose average job is $350, those 1-2 seconds are worth thousands per month in calls you're currently losing.
Problem 4: Render-Blocking Scripts
When your browser loads a webpage, it reads the HTML from top to bottom. When it hits a JavaScript file or a CSS file, it stops rendering the page until that file downloads and processes. These are called render-blocking resources.
A typical contractor website has 5-15 render-blocking scripts. Google Fonts, jQuery, your theme's CSS, your page builder's CSS, analytics scripts, and whatever else got added over time. Each one pauses the page render for a fraction of a second. They add up fast.
The Fix
- Move scripts to the bottom. JavaScript that doesn't need to run immediately (analytics, animations, interactive features) should load after the page content renders. In HTML, this means putting script tags before the closing body tag, not in the head. Or better, add the "defer" attribute to your script tags.
- Inline critical CSS. The CSS needed to render what the visitor sees without scrolling (above the fold) should be embedded directly in the HTML head. The rest of the CSS can load asynchronously. This lets the browser paint the initial view instantly while the full stylesheet loads in the background.
- Preconnect to external domains. If your site loads Google Fonts, add a preconnect hint in your HTML head. This tells the browser to start connecting to Google's servers before it encounters the font request, saving 100-300ms.
- Use font-display: swap. When loading web fonts, add font-display: swap so the browser shows text immediately in a fallback font and swaps to the web font when it's ready. Without this, visitors see invisible text until the font loads. Google Fonts supports this by adding &display=swap to your font URL.
- Remove unused CSS and JavaScript. Most WordPress themes and page builders load their entire CSS and JavaScript library on every page, even if the page only uses 10% of it. Tools like PurifyCSS can identify and remove unused code. This is more advanced but the speed gains are significant.
Problem 5: No Caching
Without caching, your server rebuilds every page from scratch every time someone visits. It queries the database, processes the PHP code, assembles the HTML, and sends it to the browser. This takes 500ms-2 seconds on WordPress.
With caching, the server builds the page once and saves the result. The next visitor gets the pre-built page instantly. Server response time drops from 1 second to 50 milliseconds.
The Fix
If you're on WordPress, install a caching plugin. WP Rocket ($49/year) is the best option for people who don't want to fiddle with settings. It handles page caching, browser caching, CSS/JS minification, and lazy loading in one plugin. LiteSpeed Cache is free and excellent if your host runs LiteSpeed servers.
If you're on a managed WordPress host like Kinsta or Cloudways, caching is built in at the server level. You don't need a plugin.
For any hosting setup, add a CDN (Content Delivery Network). Cloudflare offers a free plan that caches your site's static files on servers around the world. When a visitor in Miami loads your site, they get files from Cloudflare's Miami server instead of your origin server in Dallas. That cuts latency by 50-200ms per request.
Problem 6: Too Many HTTP Requests
Every file your page needs - every image, CSS file, JavaScript file, font file, icon - is a separate HTTP request. A typical contractor website makes 50-100 requests to load the homepage. Each request has overhead: DNS lookup, connection, SSL handshake, data transfer. Even on fast connections, 80 requests take time.
The Fix
- Combine CSS files. Instead of loading 8 separate CSS files, combine them into 1 or 2. Most caching plugins do this automatically.
- Combine JavaScript files. Same idea. Fewer files means fewer requests.
- Use SVG icons instead of icon fonts. Font Awesome loads a 100KB+ font file with 2,000 icons even if you're only using 5. Inline SVG icons add a few bytes each and require zero additional requests.
- Limit fonts. Every font weight and style is a separate file. If you're loading a Google Font in regular, italic, bold, and bold italic, that's 4 files. Most contractor sites only need 2-3 font files total. Load only what you use.
- Reduce third-party scripts. Every chat widget, analytics tool, review badge, and social embed is a third-party script that loads from an external server. Each one adds 100-500ms to your load time. Audit your third-party scripts and remove any that aren't directly contributing to calls.
How to Test Your Speed
Go to Google PageSpeed Insights and enter your website URL. Run the test on mobile (that's what matters - over 70% of your visitors are on mobile).
Here's what the scores mean:
- 90-100: Your site is fast. Nice work. Focus on other things.
- 50-89: There's room for improvement. You're probably losing some visitors to speed but it's not catastrophic.
- 0-49: Your site is slow. You're actively losing calls every day. This needs to be fixed before anything else matters.
Pay special attention to three metrics:
- Largest Contentful Paint (LCP): How long until the main content is visible. Should be under 2.5 seconds. This is the metric that most directly affects whether someone stays or bounces.
- Interaction to Next Paint (INP): How quickly the page responds when someone taps a button or link. Should be under 200 milliseconds. Slow INP means buttons feel laggy and visitors lose confidence.
- Cumulative Layout Shift (CLS): How much the page content jumps around while loading. Should be under 0.1. When images load and push text down, or a banner appears and shoves the content lower, that's layout shift. It's disorienting and makes people misclick.
The Speed-to-Calls Connection
Let's put real numbers on this. Say your contractor website gets 600 visitors per month from Google (organic and ads combined). Your site takes 5 seconds to load on mobile.
At 5 seconds, roughly 38% of those visitors leave before the page even finishes loading. That's 228 people gone. Of the 372 who stay, maybe 3% call you. That's about 11 calls per month.
Now fix the speed to 2 seconds. Your bounce rate drops to about 9%. Now 546 people see your site. At 3% conversion, that's 16 calls per month. And because a faster site feels more professional and trustworthy, your conversion rate probably climbs to 4-5%. Call that 22-27 calls per month.
That's 11 to 22 calls per month. Double the calls from the same traffic. If your average job is $350 and you close half of those calls, that's an extra $1,925 per month in revenue. From fixing your load time.
Speed isn't a tech detail. It's a revenue multiplier.
The Priority List
If your site is slow, fix these things in this order. Each step gives you the most speed gain for the least effort:
- Compress and resize images. Biggest speed gain, easiest fix. Use Squoosh.app or ShortPixel. Takes an afternoon.
- Install a caching plugin. WP Rocket or LiteSpeed Cache. 15 minutes to set up. Immediate improvement.
- Add Cloudflare CDN. Free plan. 20 minutes to set up. Reduces latency for every visitor.
- Remove unused plugins. Audit your plugin list. Deactivate and delete anything you don't need. An hour of work.
- Upgrade hosting. Move from shared hosting to managed WordPress hosting. Takes 1-2 hours with a migration plugin. Biggest infrastructure improvement you can make.
- Defer render-blocking scripts. More technical. May need a developer. But eliminates the biggest rendering bottleneck.
Steps 1-3 alone will cut most contractor websites from 5+ seconds to under 3 seconds. Steps 4-6 get you under 2 seconds. The whole process can be done in a weekend if you're hands-on, or in a day if you hire someone who knows what they're doing.
Your website's speed is the first impression your business makes. Before a homeowner reads your copy, sees your reviews, or finds your phone number, they're waiting for the page to load. Make sure they don't have to wait long.