On this page
Snowden Electrical is an electrical contractor in Auckland. Their WordPress site scored 54 on mobile PageSpeed. After the work below it scored 94, and the phone started ringing more often.
The brief
James Snowden’s site had been built by a local agency about 18 months earlier. He was paying for Google Ads, but visitors were leaving before the page finished loading, and fewer than 1% of paid clicks turned into enquiries.
His request was simple: make it fast, whatever that takes.
Before & after: the numbers
| Metric | Before | After |
|---|---|---|
| PageSpeed (mobile) | 54 | 94 |
| PageSpeed (desktop) | 68 | 97 |
| Largest Contentful Paint | 6.2 s | 1.4 s |
| Cumulative Layout Shift | 0.18 | 0.02 |
| Interaction to Next Paint | 340 ms | 68 ms |
| Page size | 4.8 MB | 890 KB |
| HTTP requests | 72 | 18 |
Mobile tested on a Moto G Power over fast 4G, measured 48 hours after deployment.
The audit: what I found
I ran the site through PageSpeed Insights, GTmetrix and the Performance panel in Chrome DevTools. Seven problems stood out:
- A 1.8 MB uncompressed PNG hero image, which alone pushed mobile LCP to 6.2 seconds.
- Elementor loading 14 JavaScript files on every page, including pages that didn’t use it.
- 11 active plugins, four of them doing the same jobs: two SEO plugins, duplicate caching and several form handlers.
- Google Fonts adding two render-blocking requests.
- No caching, so every visit ran PHP and MySQL from scratch.
- Full-size images in small slots, such as a 1,400 px file in a 150 × 150 px space.
- No CDN, with every asset served from a shared host in the US.
The fixes, step by step
I ordered the fixes by expected impact, biggest first.
01Rebuilt the theme without a page builder
I rebuilt the theme in custom PHP with a template for each page type and removed Elementor’s 189 KB core script bundle. That alone cut HTTP requests from 72 to 31.
02Converted images to WebP and lazy-loaded them
The hero went from a 1.8 MB PNG to a 180 KB WebP. Every image got explicit width and height attributes, images below the fold load lazily, and the hero is preloaded.
03Hosted Google Fonts locally
Serving the font files from the same server, with the @font-face rules inlined in the main stylesheet, brought text on screen about 400 ms sooner.
04Cut plugins from 11 to 5
Yoast and Rank Math were fighting each other, so both went. A social-sharing plugin became inline SVG icons, and a one-page form builder and an unused legacy slider were removed.
05Turned on caching with WP Rocket
Full-page caching with a 10-hour lifetime, combined and minified CSS and JS, and browser caching headers. Repeat visits are now served static HTML in under 60 ms.
06Added the Cloudflare CDN
Static files from the US host were adding about 180 ms for New Zealand visitors. Cloudflare’s free tier serves them from an Auckland edge, and time to first byte fell from 480 ms to under 100 ms.
07Fixed layout shift (CLS 0.18 → 0.02)
Three things made the page jump: images without dimensions, web fonts swapping in late, and a cookie banner that appeared after 1.5 seconds and pushed content down. Image dimensions, preloaded fonts with font-display: swap, and a fixed-overlay cookie banner fixed all three.
What each fix contributed
Approximate points each fix added to the mobile score:
These overlap, so they add up to more than the 40-point gain.
The business result
The speed work mattered because of what it did for enquiries.
Same NZ$800 a month on Google Ads. Enquiry rate up from about 1.2% to just over 3% in the first 30 days.
Organic search moved too. Within six weeks the site went from page 3 to page 1 for “electrician Auckland”, helped by the Core Web Vitals gains and the schema markup added during the rebuild.
Tools I used on this project
Is your WordPress site slow?
Run your homepage through PageSpeed Insights on mobile and compare it with these thresholds:
Worth fixing. Look at LCP, image sizes and render-blocking files first.
Usually images without dimensions or fonts loading late.
Too much JavaScript on the main thread, often from a page builder.