Short answer: To speed up a Shopify store, measure real-user Core Web Vitals first, then work through the usual culprits in order: unused apps and leftover app code, oversized images, third-party scripts and tracking pixels, heavy fonts and sliders, and bloated theme sections. Shopify already handles hosting, caching and the CDN, so almost every speed gain comes from what you add on top of the platform, not from the platform itself.
Most slow Shopify stores were not slow on launch day. They got slow one app, one pixel and one homepage section at a time. A review widget here, a chat bubble there, a second analytics tag someone forgot to remove, and a hero image uploaded straight off a camera. None of these feel expensive on their own. Together they decide whether a shopper on a mid-range phone sees your product in under three seconds or gives up first.
This guide walks through how to test your Shopify speed properly, what the numbers mean, why stores slow down, and the fixes that actually move the needle, roughly in the order you should try them. It is written for store owners and marketers, with the developer-level steps flagged so you know when to hand something off.
Speed shows up in three places that matter to a store: conversion, search and ad spend.
On the conversion side, the shoppers you lose to a slow page never appear in your analytics as complaints. They simply bounce before the product image loads, and mobile visitors on patchy connections feel it most. A store that loads quickly also feels more trustworthy, which matters for brands that shoppers have not bought from before.
On the search side, Google uses Core Web Vitals as part of its page experience signals. Speed will not lift a thin page above a genuinely better one, but among comparable pages it is a tiebreaker you can control. On the paid side, every click you buy from Google, Meta or TikTok lands on the same page, so a slow landing page quietly raises your real cost per acquisition.
The good news is that Shopify stores start from a strong position. The hard infrastructure problems are solved for you. What is left is mostly housekeeping, and housekeeping is cheap.
Before changing anything, get a baseline. The most common mistake in Shopify speed work is optimizing the wrong number, usually a lab score that does not reflect what real shoppers experience.
There are two kinds of speed data. Field data comes from real visitors on real devices and is what Google uses for ranking. Lab data comes from a single simulated test run and is useful for debugging, but it swings from run to run and often looks worse than reality. Use field data to decide whether you have a problem and lab data to find out why.
| Tool | Data type | Best used for |
| Shopify Web Performance dashboard (Online Store, Themes, or Analytics, Reports) | Field (real visitors) | Your store-wide Core Web Vitals over time, by page type and by URL |
| Google PageSpeed Insights | Field and lab | Checking a single URL; the top panel is field data, the score below it is lab |
| Google Search Console, Core Web Vitals report | Field | Seeing which groups of URLs Google rates as poor or needing improvement |
| Chrome DevTools, Performance and Lighthouse panels | Lab | Finding the exact script, image or layout shift causing a problem |
| Shopify Theme Inspector for Chrome | Lab | Profiling how long your Liquid theme code takes to render on the server |
| WebPageTest | Lab | Waterfall views, testing from different locations and connection speeds |
Shopify’s own Web Performance dashboard is the place to start because it reflects your actual shoppers. It needs a few weeks of real traffic to populate, so a brand-new or password-protected store will show nothing yet. In that case, lean on lab testing until real data builds up.
Pick three to five representative URLs to test every time: the homepage, your busiest collection page, your best-selling product page, and one blog or landing page if you run paid traffic to it. Test on mobile settings, since that is where most stores struggle and where most of their traffic comes from.
Google measures page experience with three Core Web Vitals. Each is judged at the 75th percentile of visits, which means three out of four visits need to hit the target, not just the average.
| Metric | What it measures | Good | Needs improvement | Poor |
| Largest Contentful Paint (LCP) | How fast the main content, usually the hero or product image, appears | 2.5 seconds or less | 2.5 to 4 seconds | Over 4 seconds |
| Interaction to Next Paint (INP) | How quickly the page responds to taps and clicks | 200 ms or less | 200 to 500 ms | Over 500 ms |
| Cumulative Layout Shift (CLS) | How much the layout jumps around while loading | 0.1 or less | 0.1 to 0.25 | Over 0.25 |
INP replaced First Input Delay as a Core Web Vital in March 2024. It is a stricter test, because it measures every interaction during a visit rather than just the first one, and it is where app-heavy stores most often fail.
If you remember an older Shopify speed score out of 100, that number is gone. Shopify retired its Lighthouse-based score in early 2024 and replaced it with the Web Performance dashboard built on these three Core Web Vitals. A lab score from Lighthouse or PageSpeed Insights can still be a useful debugging hint, but a store can post a mediocre lab score and still pass Core Web Vitals in the field. Field data is what counts.
When a Shopify store is slow, the cause almost always sits in one of a handful of places. This table maps the common culprits to the metric they usually hurt, which helps you match what your report shows to where to look.
| Cause | What you notice | Metric it usually hurts |
| Too many apps loading scripts on every page | Pages feel sluggish after they appear; taps lag | INP, LCP |
| Leftover code from uninstalled apps | Requests to services you no longer use | LCP, INP |
| Oversized or uncompressed images | Hero and product images load last | LCP |
| Lazy loading applied to the hero image | Main image waits even though it is first on screen | LCP |
| Tracking pixels and tag managers stacked up | Long blocking scripts in the waterfall | INP, LCP |
| Images and widgets without reserved space | Content jumps as reviews, banners or badges pop in | CLS |
| Several custom web fonts and weights | Invisible or shifting text on load | LCP, CLS |
| Autoplay video and heavy sliders above the fold | Slow first view, especially on mobile | LCP |
| Complex Liquid loops and very large collections | Slow server response before anything renders | LCP |
| Outdated or heavily customized theme | Everything is a little slow everywhere | All three |
If your store is slow mainly on mobile, the usual suspects are the same, just amplified. Phones have slower processors, so the JavaScript cost of apps and pixels shows up as poor INP on mobile long before it bothers anyone on a desktop.
These fixes run roughly from highest impact and lowest effort to more technical work. Make one change at a time, retest your key URLs, and keep a short log of what you changed and when, so you can tie any movement in your field data back to a specific fix.
Your theme sets the ceiling for everything else. Shopify’s own Online Store 2.0 themes, including Dawn and the newer Horizon family, are free and built with performance budgets in mind, and Shopify notes that all of its Online Store 2.0 themes are optimized for web performance. Many paid themes are fast too, but feature-packed themes that bundle mega menus, animations, quick view, popups and sliders into every page tend to ship code whether you use those features or not.
If you are on a theme that is several years old or has been heavily edited by different developers, check whether a current version exists. Updating, or moving to a lighter theme during a redesign, can do more than dozens of small tweaks. Always preview a new theme with your real products, apps and content before publishing it, since a demo store with three products is always fast.
Apps are the single most common reason a Shopify store slows down. Many of them add JavaScript and CSS to every page of your storefront, including pages where they do nothing.
Open Settings, then Apps and sales channels, and go through the list honestly. For each app, ask whether it earns its keep, whether it needs to run on every page, and whether a native Shopify feature now does the same job. Shopify has absorbed a lot of functionality over the years, including product reviews through apps that use app blocks, bundles, search and discovery filters, and customer accounts, so apps installed years ago may be doing something the platform now handles.
A useful test is to temporarily disable an app’s embed in the theme editor, under App embeds, and retest the page. If speed improves noticeably and nobody misses the feature, uninstall it.
Newer apps built on theme app extensions remove their code cleanly when you uninstall them. Older apps often injected snippets directly into your theme files, and uninstalling the app does not remove them. The result is a store still trying to load scripts from services you stopped paying for.
Check your theme.liquid file and the snippets folder for references to apps you no longer use, and look in your browser’s network tab for requests to unfamiliar domains. This is a good job for a developer if you are not comfortable editing theme code, and you should always duplicate the theme before touching it so you have a clean rollback.
Shopify’s CDN does a lot of image work automatically. When a theme requests images using Shopify’s image_url filter with a width, Shopify resizes them and serves modern formats such as WebP or AVIF to browsers that support them. That means you do not need an app to convert formats on a modern theme.
What Shopify cannot fix is a theme that requests a far larger image than it displays, or source files that are enormous to begin with. As a working habit, upload product and hero images at sensible dimensions, typically around 2,000 to 2,500 pixels on the long side for product zoom, and compress them before upload. If you edit theme code, make sure images use responsive sizes through the image_tag filter with a widths list, so phones download phone-sized files.
Lazy loading tells the browser to wait before downloading images that are further down the page, which saves bandwidth and gets the first screen up faster. Most current Shopify themes already apply loading=”lazy” to images below the fold, and you can add it in Liquid through the image_tag filter’s loading option.
The common mistake is applying lazy loading to everything, including the hero banner or the main product image. Those images are the Largest Contentful Paint element on most pages, and lazy loading them makes the browser deliberately delay the one image it should load first. If your LCP is poor and your hero is lazy loaded, that is often the whole problem.
The flip side of lazy loading is telling the browser what matters most. Adding fetchpriority=”high” to the hero or first product image, and making sure it loads eagerly, helps the browser start downloading it before less important resources. Some themes already do this for the first section; if yours does not, it is a small Liquid change with an outsized effect on LCP.
Keep the above-the-fold area simple. A single strong hero image will nearly always beat a five-slide carousel, both for speed and, often, for clarity.
Marketing tags pile up quietly. A store might carry Google Analytics, Google Ads, a Meta pixel, TikTok, Pinterest, a heatmap tool, an affiliate tracker, and an email pop-up script, sometimes loaded twice through both an app and a tag manager.
Make a list of every tag on the site and who owns it. Remove anything nobody can justify, and remove duplicates. Where possible, move tracking into Shopify’s Customer Events, found under Settings, where pixels run in a sandbox and are less able to block the main page. Load non-essential widgets such as live chat only when a shopper interacts with them, or after the page has finished loading, rather than at the very start.
Layout shift, measured by CLS, is what happens when a shopper goes to tap a button and the page moves under their finger because a banner, review star row or app badge just loaded above it. It is frustrating and it fails Core Web Vitals.
The fixes are about reserving space. Make sure images have width and height set so the browser knows their size in advance, which Shopify’s image_tag does for you. Give app widgets, announcement bars and review summaries a fixed minimum height in CSS. Avoid inserting content above existing content after load, such as a promo bar that appears a second after the page renders.
Every custom font family and weight is another file to download before text renders properly. Two families with two or three weights each is plenty for most stores. If you use Shopify’s font library through the theme editor, fonts are served from Shopify’s CDN; if you load custom fonts, make sure they use font-display: swap so text appears immediately in a fallback font instead of staying invisible.
System font stacks, which use the fonts already on the shopper’s device, are the fastest option of all and can look clean and modern on a well-designed theme.
Autoplay background video at the top of the homepage is one of the most expensive design choices a store can make, particularly on mobile data. If video is essential to the brand, host it on Shopify, give it a lightweight poster image, and avoid autoplay on mobile. For embedded YouTube or Vimeo videos further down the page, use a click-to-play preview so the full player only loads when someone wants it.
Sliders and carousels carry similar costs: multiple large images, extra JavaScript, and frequent layout shift. Ask whether the slides beyond the first one get any engagement at all. In most stores they do not.
Online Store 2.0 makes it easy to stack sections, and homepages tend to grow until they carry a dozen of them: featured collections, Instagram feeds, testimonials, logo walls, video, blog posts and more. Each one adds HTML, images and sometimes scripts.
Look at your scroll depth data and remove or consolidate sections that few people reach. Instagram feed apps are a frequent offender, loading external images and scripts for content most shoppers never scroll to. The same review applies to product page templates, where accordions, upsell blocks and recommendation widgets can multiply.
Before a page reaches the browser, Shopify renders your theme’s Liquid code on its servers. Usually this is fast, but complex themes can slow it down with nested loops over large collections, repeated filtering of all products, or many includes that each do expensive work.
The Shopify Theme Inspector for Chrome shows a flame graph of how long each part of your Liquid takes to render, which makes slow snippets easy to spot. Developers can also run Theme Check through Shopify CLI to catch common performance anti-patterns. This is developer territory, but it is worth asking about if your server response time is consistently slow while images and scripts look fine.
Every redirect adds a round trip before the page can start loading. Old campaign URLs that redirect to a page that itself redirects, or internal links still pointing at retired product URLs, add delay for no benefit. Review your redirects under Content, then Menus, then URL Redirects, and update internal links and navigation to point straight at final URLs.
Also check for broken resources in the browser console: scripts, fonts or images that return errors. A failed request still costs time, and it is usually a sign of leftover code from a removed app or an old theme customization.
If your INP is poor, the page looks loaded but feels sticky. Shoppers tap a variant swatch or the add to cart button and nothing happens for a beat. The cause is almost always JavaScript keeping the browser’s main thread busy, usually from apps, pixels or a heavy theme script.
Fixes overlap with steps 2, 3 and 7: fewer scripts on the page is the most reliable cure. Beyond that, a developer can use Chrome DevTools’ Performance panel to find long tasks and see which scripts own them, then defer, split or remove the worst ones. Pay special attention to anything that runs on every scroll or every click, such as some analytics and personalization tools.
Speed is not a one-time project. New apps, new campaigns and new homepage sections will push it back down if nobody is watching. Check the Web Performance dashboard monthly, and make a quick speed test part of the process whenever an app is installed or a theme is changed.
Remember that field data trails your changes. Google’s public Core Web Vitals data is based on a rolling 28-day window, so an improvement you ship today will take a few weeks to show fully in Search Console and PageSpeed Insights. Lab tests show the effect immediately; field data confirms it later.
There are many apps that promise to make a Shopify store faster, and the honest answer is that some help a little, some do nothing measurable, and some make things worse.
Apps that compress images before or after upload can be useful, especially if you have a large back catalog of oversized photos. Apps that promise to minify code, add caching or install a CDN are mostly redundant, because Shopify already serves storefronts through a global CDN with caching and compression built in. Apps that aggressively delay or preload scripts can produce impressive lab scores while breaking things shoppers rely on, such as variant pickers, cart drawers or tracking, and the lab score is not what Google ranks anyway.
There is also an irony to watch for: a speed app is itself an app, with its own code. Before installing one, run through the free fixes in this guide. If you still need help after that, a person who can read your theme and app stack will usually get further than another script.
One reason Shopify speed advice can be confusing is that much of the generic website speed advice online does not apply. You cannot change servers, install server caching or tune the database on Shopify, and you do not need to. This split is what makes the platform fast by default.
| Shopify handles | You control |
| Hosting, servers and uptime | Which theme you use and how heavily it is customized |
| Global CDN for pages, images and theme files | How many apps you install and where they load |
| Caching and compression | Image dimensions and how images are requested in the theme |
| Automatic modern image formats such as WebP and AVIF | Third-party scripts, pixels and tag managers |
| HTTPS and modern network protocols | Fonts, video and sliders |
| Checkout performance and infrastructure | Homepage and template sections, and custom Liquid code |
Checkout runs on Shopify’s own infrastructure, and with the move to checkout extensibility, merchants can no longer add arbitrary scripts there the way they once could with checkout.liquid. That makes checkout one of the faster parts of most stores. Your effort is better spent on the storefront pages that come before it.
Not every fix needs a developer. This table splits the work so you can knock out the easy gains this week and scope the rest.
| Task | Effort | Who usually does it |
| Remove unused apps and disable unneeded app embeds | Low | Store owner |
| Compress and resize new image uploads | Low | Store owner or content team |
| Remove duplicate tracking pixels | Low to medium | Marketing team |
| Cut homepage sections and sliders | Low | Store owner |
| Reduce font families and weights | Low | Store owner or designer |
| Remove leftover code from old apps | Medium | Developer |
| Fix hero lazy loading and add fetchpriority | Medium | Developer |
| Reserve space for widgets to fix layout shift | Medium | Developer |
| Profile and refactor slow Liquid | High | Developer |
| Diagnose long JavaScript tasks hurting INP | High | Developer or speed specialist |
| Update or replace an outdated theme | High | Developer or agency |
Plenty of stores can reach good Core Web Vitals with the owner-level fixes above. It is worth getting outside help when your field data is still poor after cleaning up apps, images and pixels, when the theme has been customized by several developers over the years and nobody fully understands it, when INP is failing and you cannot tell which script is responsible, or when you are planning a redesign or replatform and want performance built in from the start.
When you talk to a specialist, ask how they measure success. A good answer is improvement in field Core Web Vitals over the following weeks, not a single lab score screenshot. Ask what they will change, whether changes are made on a duplicate theme first, and how they handle apps you depend on. If you want a starting point, our roundup of Shopify speed optimization services covers firms that focus on this work, and our list of Shopify web design agencies is useful if a theme rebuild is on the table.
Aim to pass all three Core Web Vitals in your field data: Largest Contentful Paint of 2.5 seconds or less, Interaction to Next Paint of 200 milliseconds or less, and Cumulative Layout Shift of 0.1 or less, each for at least 75 percent of visits. A useful rule of thumb is that shoppers on mobile should see the main product or hero image within about two and a half seconds.
Start with the Web Performance dashboard in your Shopify admin, which shows real-visitor data. Then test individual pages in Google PageSpeed Insights, reading the field data panel at the top first and the lab score second. Test your homepage, a busy collection page and a top product page on mobile settings.
No. Shopify replaced its old Lighthouse-based speed score in early 2024 with the Web Performance dashboard, which reports Core Web Vitals from real visitors. Lighthouse and PageSpeed Insights still produce lab scores, but those are debugging tools rather than the measure Google uses for ranking.
Phones have less processing power and often slower connections, so the cost of apps, tracking scripts, large images and video hits much harder on mobile. Poor mobile INP, where taps feel delayed, almost always points to too much JavaScript from apps and pixels.
Many do. Apps that add scripts to your storefront load on top of your theme, and some load on every page whether they are used there or not. Apps built on theme app extensions are easier to manage and remove cleanly. Auditing apps is usually the fastest single win for a slow store.
Most current Shopify themes apply lazy loading to images below the fold, but it depends on the theme. Check that your hero and main product images are not lazy loaded, since those should load first.
Core Web Vitals are part of Google’s page experience signals, so speed can help, particularly against competitors with similar content. It will not outweigh relevance and quality, but a fast store also converts paid and organic visitors better, which makes it worthwhile either way.
Storefront speed comes from the same infrastructure on every plan, so upgrading to Plus does not make a store faster by itself. Plus adds features such as more checkout customization and automation tools; your theme, apps and scripts still decide how fast your pages load.
For most stores, no. A headless build with Shopify’s Hydrogen framework or another front end can be very fast, but it is a large and ongoing engineering commitment. A clean Online Store 2.0 theme with a disciplined app stack passes Core Web Vitals for the vast majority of merchants.
Lab tests show changes immediately. Field data, which is what Google and the Shopify dashboard rely on, builds up from real visits, and Google’s public data uses a rolling 28-day window, so allow three to four weeks to see the full effect.
Shopify takes care of hosting, caching, the CDN and image formats, so a slow store is almost always slowed down by what has been added to it. Measure with field data from the Web Performance dashboard and PageSpeed Insights, then work through the list: remove unused apps and their leftover code, size images sensibly and never lazy load the hero, prune tracking pixels, reserve space for widgets, simplify fonts, sliders and homepage sections, and keep an eye on the numbers every month. Most stores can get to good Core Web Vitals with a few days of focused housekeeping, and bring in a specialist only for the deep theme and JavaScript work.