Key takeaways
- The top causes of slow Shopify stores: large images, too many app scripts, render-blocking JavaScript, and outdated themes.
- Check your speed: use Shopify’s built-in speed report (Online Store → Themes → Speed) and PageSpeed Insights.
- Image optimization alone typically improves load time more than any other single change.
- Fudge writes native Shopify code without the external script overhead that slows app-dependent stores down.
A slow Shopify store costs money. Studies consistently show that each additional second of load time reduces conversion rates. Mobile shoppers in particular are unforgiving — a 3-second load drops conversions measurably compared to a 1-second load.
The good news: most Shopify stores have several obvious performance problems, each with clear fixes.
How do I improve my Shopify speed?
Start by measuring. Then fix the biggest problems first.
Check your current speed
Shopify’s built-in speed report: Online Store → Themes → click on your theme → Speed. This shows your theme’s speed score and compares it to similar stores. It’s a useful starting point.
PageSpeed Insights: Run your homepage, a product page, and a collection page at pagespeed.web.dev. The mobile score is what matters most — desktop performance is usually much better.
Lighthouse in Chrome DevTools: F12 → Lighthouse tab → Generate report. More detailed breakdown than PageSpeed Insights with specific opportunities listed by impact.
Why is Shopify so laggy?
If your store feels sluggish, here are the most common causes ranked by how often they’re the culprit:
1. Oversized images. A 4MB hero image. Product images uploaded from a DSLR at full resolution. This is the #1 performance issue in most Shopify stores. A 2000px wide image served at 400px width wastes 70% of the download.
2. Too many apps. Every app adds JavaScript. 15 installed apps can mean 15 separate external script requests before your page loads. Even apps you never open slow your store if their scripts are still loading.
3. Render-blocking scripts. Scripts in <head> without async or defer freeze page rendering while they download. See our guide on render-blocking scripts.
4. An old or bloated theme. Older Shopify themes (pre-2.0) weren’t built for performance. Dawn scores well; older premium themes often don’t.
5. Embedded video not lazy loaded. YouTube iframes load megabytes of scripts from Google’s servers. Without the facade pattern, every page with an embedded video has a significant performance penalty.
Fix 1 — Compress images before uploading
This is the highest-impact change for most stores. Target sizes:
- Hero/banner images: under 200KB, maximum width 2000px
- Product images: under 150KB each
- Collection thumbnails: under 80KB
Tools:
- Squoosh.app — free, browser-based, excellent compression with quality preview
- TinyPNG — free, drag and drop, good for PNGs
- Adobe Photoshop / Lightroom “Export for Web” — for bulk processing
Use WebP format. WebP images are typically 25-35% smaller than JPEG at equivalent quality. Shopify’s CDN serves WebP automatically to supporting browsers, but you can also upload WebP directly.
Fix 2 — Audit and remove unused apps
Go to Apps in your Shopify admin. For each app, ask: “When did I last actively use this?” If the answer is “months ago” or “I’m not sure,” uninstall it.
After uninstalling, clean up any leftover code. See our guide: how to remove leftover app code from Shopify.
Rule of thumb: every app you remove that had a script tag in theme.liquid reduces your page weight by one external HTTP request and potentially 20-200KB of JavaScript.
Fix 3 — Add lazy loading to images
Check if your theme already includes loading="lazy" on product and collection images. Modern themes do. If not, add it to image tags in your section files.
Never lazy load your hero image — that’s your LCP element and must load immediately.
Full guide: how to lazy load images in Shopify.
Fix 4 — Fix render-blocking scripts
Run PageSpeed Insights and look under “Opportunities” for “Eliminate render-blocking resources.” It will list specific scripts.
For each: add defer if it’s a theme script, async if it’s an analytics or marketing script. Full guide: how to optimize render-blocking scripts in Shopify.
Fix 5 — Use a fast base theme
If your current theme scores below 40 on mobile PageSpeed after the above fixes, consider switching to a faster theme.
Fast themes to consider:
- Dawn — Shopify’s official free theme, consistently scores 90+ on mobile PageSpeed
- Craft — built on Dawn architecture, clean performance
- Sense — same architecture, strong default scores
The performance difference between a well-built theme (Dawn: 90+) and an older premium theme (50-60) is significant and hard to recover through optimization alone.
Why Fudge is faster than app-based customization
Most Shopify store “features” — countdown timers, sticky CTAs, announcement bars, FAQ sections — are added via apps. Each app adds external scripts and styles.
Fudge builds these same features as native Liquid/HTML/CSS code directly in your theme. No external script requests. No app JavaScript loading on every page. The code is optimized for your specific theme.
A sticky add-to-cart bar built with Fudge adds negligible performance overhead. The equivalent app-based solution adds a script tag, an external API call, and potentially additional CSS conflicts.
What to track after making performance improvements
Run PageSpeed Insights before and after each change and note the scores. The specific metrics to track:
- LCP (Largest Contentful Paint) — should be under 2.5 seconds (good)
- TBT (Total Blocking Time) — related to JavaScript, should be under 200ms (good)
- CLS (Cumulative Layout Shift) — layout stability, should be under 0.1 (good)
These three are Google’s Core Web Vitals and affect your search ranking in addition to user experience.