Page Speed Optimization: How We Cut Load Times by 60% | AuditMySite
The Problem: A 7.2-Second Load Time Killing Conversions
In January 2026, a mid-sized e-commerce client came to us with a problem they could see in their analytics but could not diagnose: their bounce rate had climbed from 38% to 61% over six months, and conversion rates had dropped from 3.2% to 1.8%. Revenue was down 28% year-over-year despite a 15% increase in traffic from paid ads.
The culprit was page speed. Their homepage loaded in 7.2 seconds on mobile and their product pages averaged 5.8 seconds. Their Lighthouse performance score was 23 out of 100.
Here is exactly what we did to cut their load time by 60%, bringing it down to 2.9 seconds on mobile and pushing their Lighthouse score to 87.
Step 1: Image Optimization (Saved 2.1 Seconds)
Images were the single biggest problem. The site had 342 product images on the homepage with an average file size of 1.2MB each. Total image payload: 41MB.
- Converted all images from PNG/JPEG to WebP format with AVIF progressive enhancement — average size dropped from 1.2MB to 180KB (85% reduction)
- Implemented responsive images using srcset and sizes attributes
- Added lazy loading with loading=lazy on all below-fold images — initial load required 12 images instead of 342
- Set explicit width and height on all image elements to prevent CLS
Result: Image payload dropped from 41MB to 2.8MB on initial load. LCP improved from 6.1s to 4.0s.
Step 2: Third-Party Script Audit (Saved 1.3 Seconds)
The site had 23 third-party scripts loading on every page. After auditing each one:
- Removed 8 scripts entirely — 3 analytics tools nobody checked, 2 duplicate tracking pixels, 2 abandoned A/B testing snippets, 1 disabled chat widget still loading JS
- Deferred 9 scripts — social widgets and secondary analytics loaded after DOMContentLoaded
- Self-hosted 3 critical scripts — fonts and primary analytics moved to eliminate DNS lookups
Result: JavaScript payload reduced from 3.8MB to 1.4MB. Main thread blocking time dropped from 4,200ms to 1,100ms. INP improved from 680ms to 190ms.
Step 3: Server and Hosting Optimization (Saved 0.6 Seconds)
The site ran on shared hosting at $12/month. TTFB averaged 1,800ms.
- Migrated to a managed VPS (DigitalOcean, $48/month) with NGINX, PHP 8.3, and OPcache
- Implemented Cloudflare CDN with edge caching across 300+ locations
- Enabled Cloudflare APO for full-page edge caching on WordPress
- Added Redis object caching — database queries per page dropped from 180 to 23
Result: TTFB dropped from 1,800ms to 280ms (84% improvement).
Step 4: CSS and Font Optimization (Saved 0.3 Seconds)
The site loaded 4 CSS files totaling 680KB and 6 Google Fonts weights.
- Inlined critical CSS using the Critical npm package for above-the-fold styles
- Purged unused CSS with PurgeCSS — 72% of CSS was unused, reducing total from 680KB to 190KB
- Self-hosted fonts in WOFF2 format with font-display: swap and preload hints, reduced from 6 to 3 weights
- Enabled Brotli compression — 15-20% better than Gzip for text assets
Result: Render-blocking time reduced by 300ms. FCP improved from 3.2s to 2.1s.
Step 5: JavaScript Bundle Optimization (Saved 0.4 Seconds)
The site own JS bundle was 1.1MB uncompressed.
- Code splitting — route-based chunks so each page only loads its own JS
- Tree shaking — the site imported all of Lodash for 3 functions. Individual imports saved 70KB.
- Dynamic imports — image zoom, size guide modal, and carousel loaded on demand
Result: Initial bundle reduced from 1.1MB to 340KB.
Step 6: Caching Strategy (Saved 0.5 Seconds for Return Visitors)
No caching headers were set. Every visit was a cold load.
- Static assets: Cache-Control max-age=31536000, immutable with content-hash filenames
- HTML pages: max-age=3600 with stale-while-revalidate=86400
- Service Worker: Basic caching for offline capability and instant repeat loads
Result: Return visitor load time dropped from 5.8s to 1.2 seconds.
Complete Before and After Results
- Homepage Load Time (Mobile): 7.2s to 2.9s (60% improvement)
- Lighthouse Score: 23 to 87
- LCP: 6.1s to 2.3s (Good)
- INP: 680ms to 190ms (Good)
- CLS: 0.32 to 0.04 (Good)
- Bounce Rate: 61% to 34% (44% improvement)
- Conversion Rate: 1.8% to 3.8% (111% improvement)
- Revenue: Increased 47% month-over-month post-optimization
Total project cost: $8,400. Revenue increase in month one: $34,000. ROI: 4x in month one alone.
Key Takeaways
- Images are almost always the biggest win — start there
- Third-party scripts accumulate silently — audit them quarterly
- Cheap hosting is expensive — the $36/month difference paid for itself in hours
- Measure field data, not just lab data — CrUX tells you what real users experience
Speed Is a Brand Statement
A fast website tells visitors you respect their time. Speed is not just technical — it is brand experience. Companies investing in brand excellence through partners like BrandScout know that technical performance is inseparable from brand perception.
For restaurants and hospitality businesses, speed is even more critical. When a customer scans a QR code, they expect the menu instantly. Zenith Digital Menus builds digital menu systems optimized for sub-second load times because in restaurants, every second of friction costs you an order.
Ready to audit your site?
Run a free SEO scan and get actionable recommendations in seconds.
Start Free Scan →