Skip to content
Website speedometer inside a browser window, surrounded by code, settings, server, and rocket icons, representing Shopify website speed optimization and improved performance.
Shopify·Sep 4, 2026·21 min·

Shopify Speed Optimization: A Core Web Vitals Plan for INP, LCP, and CLS

Your store scores 95 in Lighthouse. Search Console still says the product template fails Core Web Vitals. Both readings are correct, and Shopify speed optimization work usually goes into the one that doesn’t count.

Google’s assessment is built from real customer sessions at the 75th percentile over a trailing window. Lighthouse is one simulated load, on one machine, on a connection somebody picked. Optimize the simulation and the assessment sits there, unmoved, for another quarter.

Shopify Speed Optimization Fails When You Optimize The Lab Number

Google’s own definition splits the two cleanly. Lab data is “determined by loading a web page in a controlled environment with a predefined set of network and device conditions,” while field data reflects “actual devices, network conditions, and geographic locations of your users,” per Google’s lab and field data guidance. The same page states the outcome plainly: “Your lab data might indicate that your site performs great, but your field data suggests it needs improvement.”

That page also gives the instruction that should organize your whole workflow: “Field data is what you should use to prioritize your efforts.”

The reasons they diverge are specific, not mysterious. Lab runs a cold cache while real customers arrive with warm ones. Lab only measures layout shifts above the fold during load, so a lazy-loaded image or an app banner that shifts the page when a customer scrolls never registers. And lab cannot predict interaction timing at all, because no simulated load taps your variant picker.

Is a Lighthouse score the same as Core Web Vitals? No. Run PageSpeed Insights and you get two reports stacked on one screen. The top half is field data covering “the previous 28-day collection period.” The bottom half is “based on a simulated load of a page on a single device and fixed set of network conditions,” per Google’s PSI documentation. Merchants screenshot the bottom half.

What Are Core Web Vitals, And What Google Measures In 2026

Core Web Vitals are three metrics that “measure real-world user experience for loading performance, interactivity, and visual stability of the page,” per Google Search Central. The set and the thresholds were confirmed on 2026-08-31 against Search Central, web.dev’s Web Vitals article, and the Chrome UX Report release notes, whose latest entry at that point was August 11, 2026. Nothing has been added, removed, or re-thresholded since INP replaced First Input Delay in 2024.

Metric What it measures Good Where it usually breaks on Shopify
Largest Contentful Paint (LCP) Loading Within 2.5 seconds Lazy-loaded hero or first product image, slow Liquid render
Interaction to Next Paint (INP) Responsiveness 200 milliseconds or less Variant pickers, cart drawers, collection filters, app JavaScript
Cumulative Layout Shift (CLS) Visual stability 0.1 or less Images without dimensions, font swap, app-injected banners

Each metric’s full band split is published on its own page. For INP, at or below 200 milliseconds is good, above 200 and at or below 500 needs improvement, and above 500 is poor. For LCP, “Good LCP values are 2.5 seconds or less, poor values are greater than 4.0 seconds, and anything in between needs improvement.” For CLS, “Good CLS values are 0.1 or less, poor values are greater than 0.25, and anything in between needs improvement.”

Several numbers people call Core Web Vitals are not. FID was retired when INP became stable in 2024. Time to First Byte, First Contentful Paint, Total Blocking Time, and the Lighthouse performance score are diagnostics, useful for finding causes and not part of the assessment. Total Blocking Time specifically is the lab stand-in for INP, which is what Lighthouse reports when nobody is clicking.

INP also has a narrow definition of interaction. Only “Clicking with a mouse. Tapping on a device with a touchscreen. Pressing a key on either a physical or onscreen keyboard” are observed. Scroll jank and hover lag feel slow to a customer and do not enter the score.

One thing in the pipeline is worth keeping off your roadmap for now. Chrome ran a final origin trial for Soft Navigations and a new Interaction to Contentful Paint entry that brings LCP-style measurement to single-page apps, through Chrome 149, and has said it plans to ship the API. Google stated the trial “is to evaluate the new API and not how this data will be used in CrUX or tooling,” per the final soft navigations origin trial post from April 20, 2026. It isn’t a Core Web Vital. It matters mainly to headless builds, which is a separate decision covered in our breakdown of Hydrogen in 2026.

Your Assessment Is The Slowest Quarter Of Your Sessions

Google grades at the 75th percentile of page loads, “segmented across mobile and desktop devices,” per web.dev’s Web Vitals overview. A site or URL group is classified good when at least 75% of page views meet the good threshold, and poor when at least 25% meet the poor threshold, per Google’s writeup on defining Core Web Vitals thresholds. Note that the thresholds themselves are not device-segregated: that same page says “the Core Web Vitals recommended thresholds are not segregated by device and the same threshold is used for both.” Google’s stated reasoning is that “most visits to the site (3 of 4) experienced the target level of performance or better,” while the number stays resistant to outliers.

How fast does a Shopify store have to load? Fast enough for the slowest quarter of your sessions, which is a different question than the one your laptop answers. For most DTC stores that slowest quarter is a mid-range Android phone on a mediocre connection rather than a MacBook on office fiber, and no amount of testing on the second device tells you anything about the first. Check your own device mix rather than assuming ours.

The Shopify Speed Score Out Of 100 No Longer Exists

The weighted Lighthouse score merchants were told to check in their admin was retired. Shopify’s own announcement says the new metrics “replace the old Speed Score,” and that the previous version “used a single Lighthouse score to assess site performance,” per the Web Performance dashboard post published January 31, 2024.

What replaced it reports LCP, INP, and CLS from real user metrics collected across “all Chromium browsers (Chrome, Opera, Edge, Samsung Internet) and Firefox,” per Shopify’s Web Performance overview. Its reports documentation adds that “the data in this report might be delayed by up to 36 hours” and that “Web performance data is available for only the last 90 days.”

Your Shopify dashboard and PageSpeed Insights will disagree, and both can be right. Shopify collects from a broader browser set and reports on UTC, while CrUX draws from opted-in Chrome users only. Shopify also notes that a low-traffic store simply “won’t have the real-user traffic necessary to generate Core Web Vitals.”

So the first correction in any Shopify speed optimization project is where you’re looking. There’s no score out of 100 in the admin to chase anymore. There are three metrics, per template, from customers.

Lighthouse Never Clicks Anything, So Certified Apps Still Wreck Shopify Site Speed

Shopify’s App Store requirements state that “Your app shouldn’t reduce Lighthouse performance scores by more than 10 points,” per its app store best practices, and Shopify “tests the app’s effect on store performance by measuring the Lighthouse score before and after the app is installed,” weighting home at 17%, product details at 40%, and collection at 43%, per its storefront performance docs.

Themes clear a lab gate too. Shopify’s theme store requirements set “a minimum average Lighthouse performance score of 60 across the theme’s product, collection, and home page, for both desktop and mobile,” alongside an accessibility minimum of 90.

Both gates are Lighthouse. Lighthouse never performs an interaction, so it cannot measure INP and reports Total Blocking Time instead. The merchant-facing dashboard, meanwhile, moved to field data.

Follow that to its conclusion. Certification is per app with no aggregate ceiling, each app “can add third-party JavaScript that competes for the main thread” as Shopify puts it in its sustainable performance guidance, and ten apps costing nine points each all pass individually. Your store can have a fully certified app stack and a failing INP, and that isn’t a mistake you made. It’s a property of how the gates are built.

Which is why “uninstall your apps” is a bad instruction. The useful instruction is to find the one interaction, on the one template, that your customers are actually waiting on.

Start Shopify Speed Optimization On Templates, Not The Homepage

Shopify’s own testing weights say it first: 40% product plus 43% collection means 83% of the weight sits somewhere other than the homepage. Google’s tooling says it a second way. Google’s Core Web Vitals report says “URLs in the report are grouped into pages that have a similar user experience,” and that “The LCP, INP, and CLS status applies to the entire group,” on the reasoning that grouped pages share a framework and share causes.

The third reason is that most of your product URLs have no individual data to look at. CrUX requires a page to be publicly discoverable and “sufficiently popular,” and the popularity threshold isn’t disclosed, per the CrUX methodology docs. Google states that “Pages and origins that don’t meet the popularity threshold are not included in the CrUX dataset,” and that “An exact number is not disclosed.”

For a catalog of any size, that means the long tail is largely invisible one URL at a time, while Search Console’s grouping and Shopify’s page-type reporting both let you see it in aggregate. Fix the product template and you’ve fixed thousands of URLs, including every one CrUX will never report on. That’s the same unit of work as any serious product page testing program, and it’s why template-level thinking pays twice.

Page Speed Optimization For LCP: Where The Seconds Actually Go

LCP splits into four subparts with published budget targets, per Google’s LCP optimization guide, last updated March 31, 2025. Google’s summary is that “The vast majority of the LCP time should be spent loading the HTML document and LCP source,” which tells you immediately when something else has crept in.

LCP subpart Share of LCP What it is on a Shopify store
Time to First Byte ~40% Liquid render time on the server
Resource load delay Under 10% The preload scanner not finding your hero image
Resource load duration ~40% Image weight and delivery, mostly handled by Shopify
Element render delay Under 10% Render-blocking third-party CSS and JavaScript

Real page speed optimization work starts by finding which of those four is eating the budget, because the fixes have nothing in common. A TTFB problem is Liquid. A load delay problem is markup. A render delay problem is somebody else’s script.

The One Second You Lose By Lazy Loading The LCP Image

Shopify calls lazy-loading the LCP image “one of the most common and damaging performance anti-patterns in Shopify themes” in its never lazy load the LCP image guidance. It also put a number on it: “Shopify sites that lazy load their LCP image have a median LCP that is 1.0 second slower than the eager loaded ones,” from Shopify’s engineering writeup on common causes of slow Liquid storefronts, published January 11, 2024.

That’s first-party, measured across Shopify’s own platform-wide data, and it’s a median comparison between two populations rather than a controlled test. The mechanism behind it is documented separately, which is what makes it actionable rather than merely suggestive.

Two things cause it. The loading="lazy" attribute deprioritizes the image and defers the download until the browser processes an IntersectionObserver event. JavaScript lazy-loading libraries do worse, swapping src for data-src and “completely hiding the URL from the browser’s preload scanner until JavaScript executes.”

The fix is a handful of Liquid attributes. Pipe the image through image_url and then image_tag with loading: 'eager', adding fetchpriority: 'high' for the single most important image on the template. Shopify’s guidance is to use section.index so the first few sections load eagerly by default, forloop.index inside image-dense sections, and explicit sizes attributes so the browser isn’t waiting on JavaScript to work out how big the image will be.

Liquid Render Time Is The Shopify Site Speed Lever On The Server

Shopify states the relationship directly in its theme performance best practices: “Shopify renders Liquid templates server-side on every page request. The time Shopify spends executing your Liquid code directly determines Time to First Byte (TTFB).”

The named causes are worth checking line by line. Shopify lists “loops that grow in cost as catalog size increases, especially nested loops and metafield access inside loops, unnecessary database queries caused by iterating variants or products beyond what’s displayed, and expensive operations that repeat work on every iteration.” Its instruction is to “Eliminate O(n²) patterns, including nested loops and metafield access inside loops, that make rendering time grow quadratically with catalog size.” Shopify’s own illustration: “A theme that’s fast on 10 products can be slow on 100.” The worked example in Shopify’s engineering post is a merchant who put hundreds of metadata checks on the product page.

Client-side rendering is the same problem moved to the browser. Shopify’s server-side rendering guidance is blunt: “Nothing renders until the framework finishes executing and inserting content,” and “Every piece of content visible in the initial viewport should render without JavaScript.” Its recommended pattern is Liquid for the initial render, progressive enhancement for behavior, and the Section Rendering API for updates after load.

INP Is Where Ecommerce Site Speed Breaks On Shopify

INP “observes the latency of all interactions a user has made with the page, and reports a single value which all (or nearly all) interactions were beneath.” FID, the metric it replaced, measured only the delay before the first interaction’s handler started running, ignoring how long that handler took and every interaction after it.

That’s why stores failed overnight in 2024 without changing anything. A theme with a heavy add-to-cart handler passed FID trivially. Under INP, the handler itself is on the clock.

Every slow interaction decomposes into three parts, per Google’s INP optimization guide: input delay, which “starts when the user initiates an interaction with the page, and ends when the event callbacks for the interaction begin to run”; processing duration, “the time it takes for event callbacks to run to completion”; and presentation delay, “the time it takes for the browser to present the next frame which contains the visual result of the interaction.” Long input delay usually isn’t your theme’s fault. It’s whatever else is executing when the customer taps, including script evaluation still finishing from page load.

The unit of blame is the long task. “Any task that takes longer than 50 milliseconds is a long task,” and the browser “blocks interactions from occurring while a task of any length is running,” per Google’s long tasks guidance. Five 60ms third-party tasks stacked between a tap and a paint is roughly a third of a second the customer spends wondering whether the button worked.

The documented remedies are all about giving the main thread back. Break work in event callbacks into separate tasks, yield explicitly with scheduler.yield(), limit what runs before the next frame to the logic that produces the visual update, avoid synchronous layout queries right after style changes, keep the DOM small, and use CSS content-visibility for off-screen sections.

The list of interactions to test is short and always the same: variant picker, add to cart, cart drawer, quantity stepper, collection filter, mobile menu, and search. Those seven cover the common INP failure points on a Shopify storefront, and they’re the same interactions that decide whether a session reaches the payment step, which is the other half of the checkout abandonment problem.

Attributing A Shopify Site Speed Problem To The Script That Caused It

Field attribution turns INP from a complaint into a work ticket. The attribution build of the web-vitals library exposes an interactionTarget field, described as “A CSS selector pointing to the element that produced the page’s INP value, for example button#save,” along with the input delay, processing duration and presentation delay breakdown, per Google’s guide to finding slow interactions in the field.

It also exposes Long Animation Frame entries, and inside those a scripts array that “gives you information about the script that was responsible for the slow interaction, and how it was responsible.” The properties include invoker, invokerType, sourceURL, and sourceFunctionName, available from version 4 of the library onward.

sourceURL is the whole reason to do this. On a Shopify store, the file it names is almost always an app, and that converts “our INP is 480 milliseconds” into a sentence with a vendor’s name in it.

CLS Comes From Images, Fonts, And App-Injected Content

Images are the cheapest fix on the list. Shopify’s guidance on preventing image layout shift is to always include width and height attributes on image tags, combined with CSS setting max-width: 100% and height: auto, so the browser can reserve the right space before the file arrives. The image_tag filter does it for you, generating src, srcset, sizes and alt, and deriving width and height from the original image’s aspect ratio. Shopify already picks the format, detecting “which image formats are supported by the client (e.g. WebP, AVIF, etc.)” through image_url.

Fonts are the second source, and Shopify names the mechanism: web fonts are “a render-blocking resource by default” and cause visible layout shift when they swap in. Its recommendation is to “Use size-adjust and override descriptors on fallback fonts to match web font metrics.” Google’s CLS optimization guide adds font-display: optional, properly specified fallbacks, and preloading the fonts that matter.

There’s a Shopify-specific audit item here that takes two minutes. Fonts pulled through font_url come off Shopify’s own CDN in woff2. A theme or app loading Google Fonts from fonts.googleapis.com puts a third-party connection on the critical path for no benefit, and it’s a common leftover from a past customization.

The third source is anything an app renders after the page has settled: cookie banners, review stars, upsell strips, urgency widgets. These are also the shifts lab tools miss entirely, since Lighthouse only sees the shifts that happen above the fold during load.

The 250ms Third-Party Script Budget For Store Speed

There’s a published number for how much third-party JavaScript is too much. Lighthouse “calculates how long each of the third-party scripts blocks the main thread,” and “If the total blocking time is greater than 250 ms the audit fails,” per the third-party summary audit documentation. The arithmetic is less forgiving than it looks, because blocking time counts only the part of each task past 50 milliseconds. A 50ms task contributes nothing. To fail you need about 250ms of excess, which is five 100ms scripts, or a single 300ms vendor script on its own.

Shopify documents one case of what a single app can do. An app injection blocked rendering on product pages and degraded LCP from 2.1 seconds to 3.4 seconds until the script was deferred. That’s one documented example rather than a statistic, and it’s enough to move a store from passing to failing on its own.

You won’t find a credible table of what specific chat, review, or personalization apps cost in milliseconds, because nobody has published per-vendor measurements from a primary source. Any number like “review widgets cost 300ms” is somebody’s guess. Google publishes the method instead, and the third-party summary in your own Lighthouse run is a list of your own vendors with your own numbers next to them.

Tag managers deserve an honest treatment here. Google Tag Manager helps “deploy tags asynchronously so they don’t block each other from loading,” per Google’s guidance on loading third-party JavaScript, and the container itself isn’t your cost. What merchants push through it is. Shopify’s instruction to merchants is simply to “Audit your tag manager to remove any unused or low-value tags,” in its guide to improving web performance.

The single cheapest intervention available sits in your theme editor. App embed blocks are rendered and injected by Shopify before the closing head and body tags, and Shopify notes they “allow you to only load scripts on specific pages, which isn’t possible with the ScriptTag object,” in its theme app extension configuration docs. Merchants toggle app embeds on and off in the theme editor without uninstalling anything, which makes it a reversible experiment you can run before lunch.

Self-hosting a vendor’s script is the tempting next step and it needs a caveat. It buys “more control over how a critical script loads, for example to reduce DNS time or improve HTTP caching headers,” while self-hosted scripts “won’t get automatic updates for API changes or security fixes.” On Shopify it also collides with the script tag migrations below, so keep it narrow.

How To Spot A Fake Shopify Speed Optimization App In Two Minutes

Shopify publishes documentation on services that move performance numbers without improving performance, and it describes three techniques by name in its guidance on fake performance apps.

The first is LCP hijacking, injecting “an element that paints almost immediately and covers the viewport, typically a transparent 1-pixel image scaled to full size” so the browser reports that element as the Largest Contentful Paint. The second is testing tool detection, where scripts “serve two different pages: a stripped-down one to testing tools and the original one to real users,” fingerprinting the client by looking for “Chrome-Lighthouse” in the user agent, a Linux platform, or missing touch support. The third is resource manipulation, patching the browser APIs the theme depends on and releasing the work later by intercepting IntersectionObserver, overriding lazy loading, or queuing third-party tags that “only drain on the first scroll, mouse move, or touch.”

Shopify’s verdict on all of it is one sentence: “A change that only moves a number leaves the filmstrip and the interaction timings looking the same as before.”

Should you install a speed app? Test first, and the test is free. Run PageSpeed Insights on a URL, then run Lighthouse on the same URL from Chrome DevTools. Shopify’s threshold is “If scores differ by 20 or more points, then you’re likely affected.” The reason it works is that PSI runs from Google’s infrastructure with a recognizable fingerprint while DevTools runs from your own browser, so a cloaking script fools one and not the other.

If you find something, Shopify’s remediation advice is to “Test in a duplicate theme first” before removing code, and to search theme files for obfuscated JavaScript and telltale strings like Linux x86_64 or references to Lighthouse. Shopify documents the category of behavior rather than naming any particular product.

The honest line between legitimate and illegitimate deferral is whether the deferred work is needed for the page to function. Deferring a chat widget until interaction, loading a review widget when it scrolls into view, running analytics asynchronously: all fine. Deferring your own variant selector until the customer touches something moves the metric and makes the page worse. Over-correcting in the other direction is documented too, with “Overuse of preloads and fetchpriority="high"” listed among the causes of poor FCP in Shopify’s engineering post, because preloading everything just re-sorts the queue.

One lower-confidence signal, labeled as what it is: merchants on Shopify’s developer forum have reported that some optimization apps change the execution order of app block JavaScript and stop it running normally. That’s a user report on a community forum, not Shopify’s documented position, and it’s a thing to check rather than a thing to conclude.

Two Script Tag Deadlines That Change What Loads On Your Storefront

Script tags are being retired in two separate tracks that get conflated constantly. On the order status page, apps lost the ability to create script tags scoped to order_status or all on February 1, 2025, those tags stopped running for Plus stores on August 28, 2025, and they “stop running on the Order status page for all other stores” as of August 26, 2026, per Shopify’s blocking script tags notice. That date has passed, which is why any post-purchase tracking still leaning on it is already dark. We covered the consequences of that specific deadline in what broke on August 26.

The online store track is still ahead of you. Shopify’s script tag deprecation changelog, published August 24, 2026, states that scriptTagCreate and scriptTagUpdate “will return an user error” from October 1, 2026, while “Existing script tags will keep running,” and that Shopify “will stop injecting script tags into storefronts” on March 1, 2027. The migration path Shopify names is app embed blocks shipped in a theme app extension, or a web pixel for analytics and conversion tracking.

That’s a speed story as much as a compliance one. Script tags get injected into every storefront page with no merchant control over placement or conditionality, while app embed blocks can be scoped to the pages that need them. Apps that migrate properly hand you a performance improvement you didn’t have to ask for. Apps that don’t hand you a broken feature on March 1, 2027, so inventory which of your installed apps still ship a script tag while there’s time to replace them.

The Ceiling: What Shopify Controls And You Cannot Change

Half the generic advice on page speed doesn’t apply to you, because Shopify already did it. Its platform performance documentation lists a Cloudflare-backed CDN, files “minified and compressed automatically using Brotli and gzip,” requests over “HTTP/3 and TLS 1.3,” image caching on “thousands of servers around the world,” automatic cache-busting version numbers on asset_url, automatic minification of CSS and of JavaScript with valid ES5 syntax, automatic injection of speculation rules in supporting browsers, and the es-module-shims polyfill. Enabling compression and adding a CDN are not tasks on your list.

There’s also a hard wall in the head of every page. The content_for_header object “Dynamically returns all scripts required by Shopify,” must sit inside the document head, and Shopify explicitly tells developers not to modify or parse it because the contents change, per the content_for_header documentation. Whatever Shopify injects there is not yours to reorder, defer, or strip, and any product claiming to optimize it is either parsing something Shopify warns against parsing or claiming something it doesn’t do.

Shopify frames the outer limit itself, in its web performance reports documentation: “Certain factors are beyond your control, such as a customer’s device, network, and location.” A store selling to rural customers on older Android phones will show a worse 75th percentile than an identical store selling to urban iPhone owners, with identical code.

One boundary we won’t draw for you. Shopify publishes no statement that checkout performance is excluded from your storefront’s Core Web Vitals assessment, so don’t build a plan around the assumption that it is.

Does Shopify Speed Optimization Move Rankings?

Google says both of these things on the same page. “Core Web Vitals are used by our ranking systems,” and “There is no single signal. Our core ranking systems look at a variety of signals that align with overall page experience,” per the page experience documentation, last updated December 10, 2025. No weight has ever been published, so anyone quoting you a percentage is making it up.

The sentence that should set your expectations is the next one: “Google Search always seeks to show the most relevant content, even if the page experience is sub-par. But for many queries, there is lots of helpful content available. Having a great page experience can contribute to success in Search, in such cases.”

Shopify’s theme docs compress this into “LCP, CLS, and INP are the Core Web Vitals (CWV), which Google uses as a ranking signal.” Google is the authority on Google’s ranking systems, so use Google’s version: a tiebreaker among comparably relevant results. For a store selling the same SKU as fifteen other stores with near-identical descriptions, being the tiebreaker candidate is exactly the situation you’re in, which is why this matters commercially without needing to be inflated. If your rankings dropped and you’re trying to work out why, speed is one line on a longer ranking drop diagnosis, and the same is true during a replatform, where speed changes land alongside everything else on the SEO migration checklist.

The conversion case is stronger and better evidenced. Vodafone ran an actual A/B test where “version A was optimized for Web Vitals and had a 31% better LCP score in the field than version B,” with both arms getting around 100,000 clicks and 34,000 visits per day, and version A produced “An 8% increase in sales,” a 15% improvement in lead-to-visit rate and 11% in cart-to-visit, per the web.dev case study published March 17, 2021. Read the limits alongside it: telecom landing page rather than a store, and a starting LCP of 8.3 seconds, which is far worse than most Shopify stores and leaves more room to gain.

The other number people reach for needs its caveats attached. Google commissioned Deloitte’s Milliseconds Make Millions, published June 24, 2020, covering 37 European and American brand sites and over 30 million sessions across 30 days at the end of 2019, and reporting that a 0.1 second improvement in mobile site speed increased conversion rates by 8.4% for retail sites. It’s correlational rather than a controlled test, the data is nearly seven years old, and the four metrics it measured were First Meaningful Paint, Estimated Input Latency, average page load time and max server latency, none of which is a Core Web Vital. It supports “faster sites convert better.” It does not support “0.1 seconds of LCP buys you 8.4%.”

The famous ones don’t survive the same check. The Amazon 100-millisecond line traces to a 2006 guest lecture at Stanford and was never published with a method or a sample. The Walmart one-second figure, the 53% mobile abandonment stat, and the one-second-costs-7% claim have no primary source we could reach. They’re repeated constantly and none of them belongs in your business case.

A Shopify Speed Optimization Sequence You Can Run This Quarter

Shopify’s own advice on where to start is a single sentence, from its web performance tools guide published January 13, 2026.

If you only do one thing: use Shopify's Web Performance dashboards to identify your real problem areas, then validate the issue using the Chrome DevTools Performance panel to confirm the root causes.

Expanded into a working sequence, that’s seven steps:

  • Read field data first, from Shopify's Web Performance dashboard and the Google Core Web Vitals report in Search Console. Lab tools come later.
  • Work per template. Home, collection, product, cart, and search, in the order your traffic and Shopify's weighting suggest.
  • Identify which metric fails and which subpart of it. LCP splits four ways, INP splits three ways, CLS is images, fonts, or injected content.
  • Reproduce it in the Chrome DevTools Performance panel with CrUX field data loaded alongside your local trace, so you're debugging the problem your customers have.
  • Attribute the slow interaction to a file using the web-vitals attribution build, then take that filename to the app vendor or remove the app.
  • Fix locally with the Shopify CLI, on a duplicate theme, and validate with before-and-after traces.
  • Confirm in the field, later than feels comfortable.

That last step is where most projects declare victory too early. PSI field data is a trailing 28-day collection period and Shopify’s dashboard covers 90 days with up to 36 hours of delay, so a Lighthouse rerun the same afternoon proves only that the lab changed. Chrome DevTools can pull CrUX field data into the Performance panel alongside your local trace, a capability the CrUX release notes record arriving with the March 2025 dataset, which makes the comparison easy to run properly and hard to fake.

Most failing stores don’t have a speed problem in the abstract. They have one template, one image loading late, and two scripts fighting over the main thread when a customer taps Add to Cart. Shopify speed optimization is the work of finding those four things and nothing else.

If you’d rather hand that off, Shopify Core Web Vitals optimization is exactly this sequence, run on your store, reported in field data. Or start with a free Growth Audit and we’ll show you which template is costing you and why. No assumptions. No selling you work you don’t need.

EJ Ulery

About the author

EJ Ulery

Co-Founder & CTO

EJ Ulery on LinkedIn

Not sure where the gap is? That's exactly what the Digital Marketing Growth Audit is for.

A free, no-obligation look at where your site can win more traffic and conversions, with a clear digital marketing roadmap to get there. Just a straight read on where your digital presence stands and where it's headed.