How We Helped a SaaS Company Improve Their Score by 40 Points
A real-world case study of how a B2B SaaS company went from a Lighthouse score of 35 to 75, improving conversions and reducing bounce rate.
A B2B SaaS company in the project management space came to us with a problem: their marketing site had a Lighthouse mobile score of 35, a bounce rate of 65%, and their trial signup conversion rate was declining. Here's what we found and fixed.
The Starting Point
Initial Audit Results
| Metric | Score | Status |
|---|---|---|
| Lighthouse Mobile | 35 | π΄ Poor |
| LCP | 5.8s | π΄ Poor |
| FID/INP | 380ms | π΄ Poor |
| CLS | 0.32 | π΄ Poor |
| TBT | 1,200ms | π΄ Poor |
| Page Weight | 4.2MB | π΄ Heavy |
| HTTP Requests | 87 | π΄ Excessive |
Root Causes Identified
- Hero video autoplaying on mobile β 2.8MB video file loading on cellular connections
- 12 third-party scripts β analytics, chat, heatmaps, A/B testing, personalization, retargeting
- Unoptimized images β PNG screenshots at 3000px wide, no lazy loading
- Three animation libraries β GSAP, AOS, and CSS animations all used on the same page
- No caching headers β every asset re-downloaded on repeat visits
- Custom fonts β 6 weights of Inter loaded (300KB+ of font files)
Phase 1: Quick Wins (Week 1)
Image Optimization
- Converted PNGs to WebP with AVIF fallback
- Resized images to 2x display size (not 4-5x)
- Added
loading="lazy"to all below-fold images - Added explicit
widthandheightattributes
Impact: -1.8MB page weight, CLS improved from 0.32 to 0.04
Font Optimization
- Reduced font weights from 6 to 3 (400, 500, 700)
- Added
font-display: swap - Self-hosted fonts instead of Google Fonts API
- Preloaded the primary weight
Impact: -200KB, LCP improved by 400ms
Results After Week 1
| Metric | Before | After Week 1 |
|---|---|---|
| Lighthouse | 35 | 52 |
| Page Weight | 4.2MB | 1.8MB |
| LCP | 5.8s | 3.2s |
| CLS | 0.32 | 0.04 |
Phase 2: Third-Party Script Audit (Week 2)
We audited all 12 third-party scripts:
| Script | Size | Decision |
|---|---|---|
| Google Analytics (GA4) | 45KB | β Keep |
| Hotjar | 85KB | β Remove (not being used) |
| Intercom | 300KB | β οΈ Load on scroll |
| Drift (chat) | 250KB | β Remove (duplicate of Intercom) |
| Segment | 70KB | β Remove (GA4 sufficient) |
| Facebook Pixel | 60KB | β Keep (defer) |
| Google Tag Manager | 80KB | β οΈ Simplify tags |
| Optimizely | 150KB | β Remove (no active tests) |
| Clearbit | 90KB | β Remove |
| HubSpot tracking | 95KB | β Keep (CRM integration) |
| Stripe.js | 40KB | β Keep (load on pricing page only) |
| Sentry | 30KB | β Keep |
Removed 5 scripts, deferred 2, conditionally loaded 1.
Impact: -655KB JavaScript, TBT dropped from 1,200ms to 450ms
Phase 3: Architecture Changes (Weeks 3-4)
Replaced Hero Video with Static Image
- Desktop: optimized WebP hero image (80KB vs. 2.8MB video)
- Added video as optional "Watch Demo" click-to-play
- LCP element now loads in 800ms instead of 4.5s
Consolidated Animation Library
- Replaced GSAP + AOS with CSS animations only
- Used
@media (prefers-reduced-motion)for accessibility - Animations trigger on
IntersectionObserver(no library needed)
Added Proper Caching
Cache-Control: public, max-age=31536000, immutable (static assets)
Cache-Control: public, max-age=3600, s-maxage=86400 (HTML pages)
Final Results
| Metric | Before | After | Improvement |
|---|---|---|---|
| Lighthouse Mobile | 35 | 78 | +43 points |
| LCP | 5.8s | 1.4s | -76% |
| INP | 380ms | 120ms | -68% |
| CLS | 0.32 | 0.02 | -94% |
| TBT | 1,200ms | 180ms | -85% |
| Page Weight | 4.2MB | 620KB | -85% |
| HTTP Requests | 87 | 24 | -72% |
Business Impact (30 Days Post-Optimization)
- Bounce rate: 65% β 48% (-26%)
- Trial signups: +22% increase
- Pages per session: 2.1 β 3.4 (+62%)
- Organic traffic: +15% (improved rankings)
Key Takeaways
- Images and video are usually the biggest win β optimize them first
- Third-party scripts accumulate over time β audit quarterly
- You don't need most analytics tools β GA4 alone is often sufficient
- CSS animations are almost always enough β you rarely need GSAP on a marketing site
- Caching is free performance β set proper headers
Monitor Your Performance
Don't let your site slowly regress. BadPageSpeed monitors your Lighthouse scores and Core Web Vitals 24/7.
Ready to stop wasting ad spend?
Track your landing page performance, monitor Core Web Vitals, and calculate exactly how much slow pages cost you.
Start Free β No Credit Card