How to Speed Up Your Shopify Store
Why Speed Matters for Your Revenue
Google uses Core Web Vitals as a ranking signal, meaning a slow store ranks lower in search results than a fast competitor selling the same products. Beyond SEO, speed directly affects conversion rates. Research from Google and Deloitte shows that a 0.1-second improvement in mobile load time increases conversion rates by 8% for retail sites. A store loading in 2 seconds converts at roughly twice the rate of the same store loading in 5 seconds.
Shopify provides an Online Store Speed report (found under Online Store, then Themes, then the speed badge) that scores your store's performance relative to similar Shopify stores. This score is a useful directional indicator, but for detailed diagnostics, you need Google PageSpeed Insights, which breaks down exactly what is slowing each page down and how much each issue costs in load time.
Step 1: Measure Your Baseline
Run your homepage, your highest-traffic collection page, and your best-selling product page through pagespeed.web.dev. Record the mobile score (not desktop, mobile is what Google uses for ranking), the Largest Contentful Paint (LCP) time, the Interaction to Next Paint (INP) time, and the Cumulative Layout Shift (CLS) score. These are your baseline numbers against which you will measure improvement.
Good targets: mobile score above 70, LCP under 2.5 seconds, INP under 200 milliseconds, CLS under 0.1. If your mobile score is above 80, your store is already faster than most Shopify competitors and further optimization has diminishing returns. If your score is below 50, there are significant gains available from the steps below.
Step 2: Audit and Remove Unnecessary Apps
Go to Settings, then Apps and sales channels. For each app, ask: does this app directly contribute to sales, does it save meaningful operational time, and would removing it noticeably impact the business? If the answer is no to all three, uninstall it.
Most Shopify apps inject JavaScript into every page of your store, even pages where the app's functionality is not used. A reviews app loads its script on your About page. A popup app loads its script on product pages where you have no popup configured. A chat widget loads on every page whether a customer wants to chat or not. Each script adds 50 to 500 milliseconds to your page load time, and the effects compound.
After uninstalling apps, check your theme code for leftover snippets. Go to Online Store, then Themes, then Actions, then Edit code. Search the theme files for the names of apps you recently uninstalled. Some apps add Liquid snippets to your theme's theme.liquid file or inject code into specific template files that remain after uninstallation. Remove these orphaned code blocks carefully (duplicate your theme first as a backup).
A common culprit is stores that tried 5 or 6 different popup, chat, or review apps over time, uninstalled them, but never cleaned up the leftover code. These ghost scripts still load and execute, consuming bandwidth and CPU time for zero benefit.
Step 3: Optimize Images
Before uploading images to Shopify, run them through a compression tool like TinyPNG, ShortPixel, or Squoosh (a free Google tool at squoosh.app). Set JPEG quality to 80%, which reduces file size by 60% to 80% with minimal visible quality loss. Resize images to a maximum of 2048 x 2048 pixels for products and 1920 x 800 pixels for hero banners.
Images are typically the largest files on any ecommerce page. An unoptimized product photo straight from a camera or design tool can be 3 to 8 MB. That same image compressed to JPEG at 80% quality and resized to 2048 pixels on the long edge is usually 200 to 400 KB, a reduction of 90% or more with no visible difference to the customer.
Shopify's CDN automatically serves images in WebP format to browsers that support it (all modern browsers do). WebP is 25% to 35% smaller than JPEG at equivalent quality. This automatic conversion only works if your source images are properly sized and compressed, because Shopify will not upscale or significantly recompress images. If you upload a 5 MB JPEG, the WebP version will still be unnecessarily large.
For your homepage hero banner, the single largest image on your store, target 150 to 300 KB after compression. Use a resolution of 1920 x 800 pixels or 1600 x 700 pixels. There is no reason to serve a 3840-pixel-wide hero image when almost no visitor views your store on a display wider than 1920 pixels, and mobile visitors see a fraction of that resolution.
Step 4: Reduce Homepage Complexity
Open your theme editor (Online Store, then Themes, then Customize) and review your homepage layout. Every section with images, carousels, or embedded media adds load time. Prioritize the sections that drive the most clicks and purchases: hero banner, featured collection, value propositions, and one social proof section.
Carousels and image sliders are particularly expensive in terms of performance. Each slide loads a full-resolution image even if the visitor never scrolls to it (unless the theme implements lazy loading for carousel slides, which many do not). If your hero section is a 5-image carousel, you are loading 5 large images for every visitor, when most visitors only see the first one or two. Consider replacing carousels with a single strong hero image, or limit the carousel to 2 to 3 slides.
Embedded videos from YouTube or Vimeo load heavy iframes and scripts. If you have a video on your homepage, use a facade pattern: display a thumbnail image with a play button overlay, and only load the actual video player when the visitor clicks play. Some themes support this natively, or you can implement it with a small Liquid code change.
Step 5: Ensure Lazy Loading Is Active
Most modern Shopify themes (including Dawn and all recently updated themes from the Theme Store) implement native lazy loading using the HTML loading="lazy" attribute. Open your store in Chrome, right-click an image below the fold, click Inspect, and check if the img tag includes loading="lazy".
If your theme does not lazy load images natively, you have two options. First, check if your theme settings include a lazy loading toggle (many themes label this "lazy load images" or "defer image loading" in Theme Settings, then Performance). Second, if there is no built-in option, you can add loading="lazy" to image tags in your theme's Liquid templates, though this requires editing theme code and should be tested thoroughly on a duplicate theme before applying to your live theme.
One common mistake: do not lazy load your above-the-fold images (hero banner, first visible product images). Lazy loading delays image rendering until the browser detects the image is near the viewport, which adds latency to images that should load immediately. Your hero banner and the first row of products should load eagerly (the default behavior when no loading attribute is set).
Step 6: Evaluate Your Theme
Install your theme on a test store with minimal products and no apps. Run PageSpeed Insights on this clean install. If the theme itself scores below 60 with minimal content, switching to a faster theme will produce bigger gains than any other optimization.
Older Shopify themes (pre-2022, before Online Store 2.0) use different architecture and often include heavy jQuery dependencies, unoptimized Liquid rendering, and CSS/JavaScript patterns that modern themes have moved past. If you are on a theme that has not been updated in over a year, seriously consider migrating to a modern theme. Dawn is the fastest free option. Among paid themes, Impulse, Prestige, and Symmetry all maintain strong performance scores while offering richer feature sets.
Migrating themes takes time (you will need to reconfigure your homepage layout, navigation, and page templates), but the performance and SEO benefits of a modern theme compound over every page view for as long as you run your store. For guidance on theme selection, see Best Shopify Themes for Conversions.
Advanced Optimizations
Preload critical fonts: If your theme uses custom web fonts, ensure the primary font files are preloaded in the theme's head section using link rel="preload". This prevents the flash of unstyled text (FOUT) that causes layout shift and makes pages feel janky. Most well-maintained themes handle this correctly, but check by loading your store with throttled network in Chrome DevTools and watching for text that flashes or changes size.
Minimize third-party scripts: Google Analytics, Facebook Pixel, TikTok Pixel, and other tracking scripts add load time. You cannot eliminate these if you run paid advertising, but you can ensure they load asynchronously (using the async or defer attributes, which Shopify's native integrations handle correctly). Avoid adding tracking pixels through manual script injection in your theme code when a native Shopify integration exists, because the native integration is optimized for Shopify's loading sequence.
Use Shopify's built-in features instead of apps: Shopify now includes several features that previously required apps: abandoned cart emails (built into Marketing, then Automations), discount codes and automatic discounts (built into Discounts), basic email campaigns (Shopify Email), and product reviews (Shopify Product Reviews app, free). Each app you replace with a native feature eliminates one external JavaScript dependency.
