Shopify Web Design Case Study: LCP from 4.8s to 1.7s
Mobile LCP was 4.8 seconds. Add-to-cart rate was 3.19%, below the 3.54% Home & Furniture benchmark. Ninety days after we rebuilt the theme, LCP hit 1.7 seconds and mobile conversion was up 27%. The custom brand theme stayed intact.
The Setup
The client is a mid-size home goods brand on Shopify Advanced. Rugs, throw pillows, small furniture. About 200 SKUs across 11 categories on a custom Liquid theme a previous agency had built. The catch: the theme carried a brand look they had spent 2 years building and could not afford to throw away, and 68% of their traffic was mobile. Google Search Console rated the entire site “Poor” on Core Web Vitals. The real problem was mobile add-to-cart rate, 3.19%, sitting below the 3.54% Home & Furniture industry benchmark Dynamic Yield publishes for the vertical.
Google PageSpeed Insights showed a 22 mobile score. Chrome User Experience Report field data confirmed real users, not just lab tests, were seeing the same slowdown. So the numbers were bad in both the synthetic test and in the wild.
The Problem in One Screenshot
Every product page shipped 41 JavaScript files on load. Three different review apps were installed at various points. A Klaviyo signup modal that fired 400ms after load and blocked the main thread while it hydrated the discount code. A chat widget that lazy-loaded but stalled the main thread when it did. Eight tracking scripts injected in the head rather than deferred. The hero image on collection pages was 1.9MB, unoptimized, served from Shopify’s CDN as JPEG rather than AVIF or WebP.
The specialty coffee roaster we migrated off Shopify last year had a nearly identical script pileup, and their mobile LCP was 5.2 seconds before we touched anything. Different vertical, same root cause.
None of this is unusual. It is what happens when a Shopify theme gets built by three different agencies over 4 years, each of whom bolts on their own apps and never removes the previous team’s. The client did not know what was actually running on their own site.
The Rebuild Approach
The brief was clear: keep the visual design, keep the URL structure, keep the product data, kill everything else. We rebuilt the theme in place over 4 weeks on a duplicate Shopify store. Here is the shape of the work.
- Audit and app cleanup. Week 1. Cataloged every installed app, every script tag in the theme, and every external asset. Three review apps were installed at various points; Judge.us was the current one, but Yotpo and Stamped were still injecting scripts on every page because nobody had uninstalled them cleanly. Killed 5 apps entirely. Consolidated 3 tracking scripts into Google Tag Manager. Result: 41 JS files down to 12.
- Critical path rewrite. Week 2. Rewrote the theme’s
theme.liquidto defer every non-critical script. The Klaviyo welcome modal now loads after DOMContentLoaded rather than blocking render. Chat widget deferred to after LCP. The client had considered adding Depict for merchandising but paused it during the rebuild; layering a JS-heavy PLP tool on a broken performance baseline would have masked the underlying fix. - Image pipeline. Week 3. Every product image switched to Shopify’s
img_urlfilter with responsive sizing and AVIF/WebP. Hero images inlined at collection pages. Result: 1.9MB hero image down to 180KB served, LCP element rendering 1.4 seconds earlier. - Layout stability. Week 4. Fixed Cumulative Layout Shift on product pages by reserving space for review widgets that lazy-loaded. CLS dropped from 0.24 to 0.03.
Post-build, we ran 2 weeks of staging QA and a Tuesday 3am rollout. Real card transactions on staging across product types and shipping methods. Pushed the new theme to production during their lowest traffic window. No downtime.
What Actually Moved the Numbers
Three specific changes did most of the work. The rest was cleanup.
Deferring the Klaviyo welcome modal until after LCP. This alone dropped LCP by 1.8 seconds on mobile. The modal was hydrating a personalized discount code inline on load, which meant it blocked the main thread before the LCP element could paint. Rewriting it to render into a portal after DOMContentLoaded meant the hero product image on collection pages could paint immediately.
Serving the hero image inline as AVIF at correct dimensions. The old theme served a 1920×1080 JPEG that browsers then downscaled on mobile. Rewriting to serve a device-appropriate AVIF (400×225 on mobile, 800×450 on tablet, 1200×675 on desktop) cut LCP payload by 90%.
Killing 5 apps. Two leftover review apps (Yotpo and Stamped), a Rebuy upsell widget firing on every product view that added 240KB of JavaScript for a feature the client had disabled 8 months prior, and a leftover shipping calculator that nobody was using. Each was injecting 200KB+ of JavaScript on every page load. Removing them dropped total blocking time from 1.4 seconds to 320 milliseconds.
The 90-Day Results
- LCP (mobile): 4.8s → 1.7s, comfortably inside Google’s Core Web Vitals thresholds
- CLS: 0.24 → 0.03
- Total Blocking Time: 1.4s → 320ms
- Core Web Vitals: Poor across the site → Good on all rated pages
- Mobile add-to-cart rate: 3.19% → 4.42% (+38.6% relative)
- Mobile conversion rate: 1.8% → 2.3% (+27% relative)
- Mobile revenue: +31% comparing the 90 days post-launch against the 90 days prior
What This Means for Other Shopify Stores
The pattern we see across every custom Shopify theme audit: the design is fine. The performance is broken because nobody has cleaned up in years. You can rebuild a Shopify theme for performance without throwing away the brand look and without replatforming.
We have since seen the same 40-plus-script mess on a second Shopify home goods brand selling rugs and textiles. Same story: three review apps stacked, a personalization widget nobody remembered installing, LCP over 5 seconds on collection pages. Cleaned it up in three weeks and their add-to-cart moved from 2.9% to 4.1% on mobile.
Baymard’s research on e-commerce UX friction consistently traces cart-stage drop-off (the roughly 70% industry-average cart abandonment tracked by Baymard) back to page-level performance and layout stability, not checkout copy. The 4.8-second LCP on this project was not because the theme was old. It was because 41 JavaScript files were fighting each other for the main thread.
If you are running a Shopify store on a custom theme and your Core Web Vitals report is red, the fix is not throwing the theme away. Clean up before you rebuild. Replatform only if the cleanup fails. This case was Shopify, but we see the same pattern on WordPress home goods stores; starting from a fast host like WPX at least means the platform is not fighting you. See our website design services or book a 30-minute strategy call to walk through your specific setup.