Diagnose first, then fix
Most Shopify speed advice is a list of generic optimizations: compress images, use a fast theme, enable lazy loading. The list is not wrong. It is just the wrong starting point. You will spend an hour optimizing images on a store whose actual bottleneck is a chat widget, and the load time will not change.
The right starting point is diagnosis: figure out specifically what is slowing your store, then fix that. This guide is the diagnostic workflow first, then the targeted fixes for what you find.
Core Web Vitals in 2026: what to measure
Google's ranking algorithm uses three Core Web Vitals as user-experience signals:
Full reference at web.dev's Core Web Vitals page.
The diagnostic workflow (15 minutes)
This is the workflow I would run on any Shopify store before optimizing anything.
Step 1: Identify your slowest high-traffic page
Open Google Search Console → Core Web Vitals (under Experience). This shows which pages are failing Core Web Vitals based on real-user data from Chrome. Pick your highest-traffic failing page — that is the priority target.
If your store does not have enough Chrome User Experience Report data yet (under 200 monthly visitors), use lab data from PageSpeed Insights on your top traffic page from analytics instead.
Step 2: Run PageSpeed Insights on that page
Go to PageSpeed Insights and paste the URL. You get two reports:
Look at the lab-data diagnostic sections, in this order:
Step 3: "Reduce the impact of third-party code"
This is the highest-leverage section. It lists every third-party domain loading scripts on the page, with its blocking time. App scripts, analytics, chat widgets, review apps — they all show up here.
For each third-party entry over 200 ms of blocking time, ask: "do I actually use this?" If not, uninstall the corresponding app. This single workflow accounts for the largest speed improvements I have seen on Shopify stores.
Step 4: "Reduce unused JavaScript"
Closely related. If a script is loading but most of its code is unused on this page, the app is injecting more than it needs to. Some apps offer settings to load scripts only on pages where they are used — check the app's settings before assuming you need to uninstall it.
Step 5: "Properly size images" and "Serve images in next-gen formats"
If these warnings show up, your source images are too large or the theme is not requesting the CDN-optimized versions. Shopify's CDN handles WebP delivery and responsive sizing automatically on modern themes; if you are seeing these warnings, you either have very large source uploads or an older theme.
Step 6: "Avoid large layout shifts"
CLS issues. The diagnostic will name the elements that are shifting. Usually one of: images without explicit dimensions, web fonts without font-display: swap, sticky banners that pop in late, or app-injected content that appears above already-rendered content.
Step 7: Cross-check with Shopify's built-in speed report
In your Shopify admin → Online Store → Themes → "View report" under the theme. Shopify's own speed score gives you a directional sense of where your store sits relative to the median, plus app-specific impact estimates. It is rougher than PageSpeed Insights but useful as a sanity check.
After this 15-minute diagnostic, you should know exactly which one or two issues are costing you the most loading time. That is what to fix first.
What Shopify ships natively (so you do not optimize what is already handled)
Before manually optimizing, know what Shopify already does for you:
loading="lazy" attribute on below-the-fold imagesYou do not need an app or a developer for any of this. If you are running a modern Online Store 2.0 theme, you have all of it. The optimization work is for the layers on top.
Fixing the most common issues
App bloat (the biggest one)
This is the cause of most slow Shopify stores. The fix:
theme.liquid; uninstalling the app from your admin does not remove those tags. Edit theme code if neededMost stores I have audited could remove 2 to 4 apps with no functional impact. The performance improvement is usually significant.
Source image weight
The Shopify CDN can only optimize from your source files. If you upload 8 MB photos straight from a DSLR, the CDN does extra work and storage is wasted.
Targets for source uploads:
Free compression: TinyPNG for JPEG/PNG, Squoosh for more control. Or use an app like TinyIMG if you need bulk compression across an existing large catalog.
Custom fonts
Custom web fonts can add render-blocking requests. Practical limits:
font-display: swap in the @font-face declaration so text shows immediately in a fallback font while the custom font loadsMost OS 2.0 themes have font settings in the theme editor. Check those before editing Liquid.
Third-party scripts that are not apps
Analytics, advertising pixels, A/B testing tools, customer support widgets — these are often added by pasting script tags into theme code, not through the Shopify App Store. They are easy to forget and easy to leave loading after they are no longer needed.
Open theme.liquid in your theme code editor and search for