A mid-size retail brand was losing sales due to a slow, aging storefront. We rebuilt their frontend in Next.js, reducing load times by 67% and lifting conversion rate by 40% in the first month.
A retail brand selling home goods online came to us with a familiar problem: their store looked fine but was losing customers they couldn't see leaving. Analytics showed a 68% bounce rate on product pages, and checkout abandonment was high.
A technical audit revealed the root cause immediately. Their storefront โ built on a legacy stack โ was serving unoptimised images, loading 3.2MB of JavaScript on the first visit, and scoring 28/100 on Google PageSpeed. On mobile, the largest contentful paint (LCP) was over 8 seconds.
Every second of load time was costing them conversions.
What We Did
Phase 1 โ Technical Audit (Week 1)
We profiled the existing site with Lighthouse, WebPageTest, and Chrome DevTools. We identified 11 critical performance issues: unoptimised images, render-blocking scripts, no caching strategy, no CDN, and a component architecture that hydrated the entire page on load.
Phase 2 โ Next.js Migration (Weeks 2โ5)
We rebuilt the product listing and product detail pages in Next.js using:
Static Generation (SSG) for the product catalogue โ pages pre-rendered at build time, served from the edge
Incremental Static Regeneration (ISR) for inventory-sensitive pages so stock status stays current without a full rebuild
next/image for automatic format conversion (WebP/AVIF), responsive sizing, and lazy loading
Route-level code splitting to ensure no page loads JavaScript it doesn't need
Phase 3 โ Core Web Vitals Tuning (Weeks 6โ7)
With the migration done, we focused on the three Google Core Web Vitals:
LCP brought from 8.4s โ 1.2s by preloading the hero image and moving it to a static asset CDN
CLS eliminated by setting explicit width/height on all images and ads
FID/INP improved by deferring non-critical third-party scripts (chat widget, analytics)
Phase 4 โ SEO & Structured Data (Week 8)
Product schema markup, breadcrumb schema, updated sitemap, and canonical URL fixes. This resulted in richer Google search previews and a measurable uptick in click-through rates within 3 weeks.
The Results
One month after go-live:
Page load time (3G mobile): 8.4s โ 2.8s (67% faster)
Google PageSpeed score: 28 โ 92
Bounce rate on product pages: 68% โ 40% (-28 points)
Conversion rate: baseline +40% lift
Organic search traffic: +22% (Core Web Vitals improvement as ranking signal)
The client's words: "We'd been losing sales we couldn't explain. Now we can see exactly why โ and it's fixed."
Lessons
Performance is a feature, not an afterthought. A 1-second improvement in load time can increase conversions by 7%. At scale, that's real money.
ISR is underused. Most teams default to either fully static or fully dynamic. ISR gives you the performance of static with the freshness of SSR โ it's the right answer for most e-commerce use cases.
Measure everything before you start. The audit phase is not optional. Without a baseline, you can't prove the value of what you built.
Want to build something like this?
Tell us about your project and let's figure out how we can help.