In 2020 I ran Lighthouse on the top 1,000 Shopify stores. The average performance score was 27. Not one store scored 90 or more. Average time to interactive was 18.8 seconds (original study, archived).
That study was picked up by Shopify SEO guides and developer articles, and it still gets cited. A lot has changed since. Google swapped one of the three Core Web Vitals and Lighthouse changed how it scores. So in October 2026 I ran it again on a fresh list of the top 1,000 Shopify stores.
This time I added the thing the 2020 edition could not measure: how fast these stores are for real visitors on real phones, from Google's Chrome UX Report. That second dataset changes the conclusion.
Disclosure: nobody sponsored this. I co-founded Skuology and Upsellr; neither sells a speed product, and no store in the dataset is named here because of any client relationship.
Key Takeaways
- Lab scores rose from 27 to 48 on average, and 10 stores now score 90 or more (2020: none). Much of that rise comes from a scoring change, not faster pages.
- The pages got heavier and slower to settle. Mean time to interactive went from 18.8 to 26.1 seconds. Median page weight is 6.1 MB across 377 requests.
- On real phones, 40% of top stores pass all three Core Web Vitals. 389 of 965.
- Responsiveness is the wall. Only 49% pass Interaction to Next Paint. 288 stores pass everything else and fail on that alone.
- The full dataset is public. Download the CSV (1,000 rows).
The headline numbers, 2020 vs 2026
| Measure | 2020 (Lighthouse 6.0) | 2026 (Lighthouse 13.5) |
|---|---|---|
| Stores tested (lab) | 1,000 | 992 |
| Mean performance score | 27 | 48 |
| Stores scoring 90 to 100 | 0 | 10 (1.0%) |
| Stores scoring 70 to 89 | 2.52% | 8.7% |
| Largest score group | 10 to 19 (33.93%) | 30 to 39 (23.7%) |
| Mean First Contentful Paint | 3,841 ms | 4,289 ms |
| Mean time to interactive | 18,849 ms | 26,146 ms |
| Time to interactive over 30 s | 9.6% | 30.2% |
| Lab layout shift rated good | 68.1% | 84.6% |
| Real-user Core Web Vitals pass | not measured | 40.3% |
Every 2026 lab number is mobile, from Google's PageSpeed Insights, run on 22 and 23 October 2026. The real-user figures come from the Chrome UX Report API, phone, for the 28 days ending 20 October 2026.
Lab scores went up. The pages did not get faster.
A mean score of 48 against 27 looks like six years of progress. Read the rest of the table before believing it.
First Contentful Paint got slower. Time to interactive got much slower: three times as many stores now take more than 30 seconds to settle on a throttled mid-range phone. The 2020 edition found no store interactive within 2.5 seconds. In 2026 there are two.
So why did the score rise? Because the ruler changed. Lighthouse 10 removed time to interactive from the performance score, and 80% of the score now sits on Total Blocking Time (30%), Largest Contentful Paint (25%) and layout shift (25%) (Chrome for Developers, Lighthouse performance scoring). One of the metrics these stores do worst on stopped counting.
One part of the improvement is real. Layout shift is largely fixed. In 2020, 16.5% of stores were rated poor for layout shift in the lab. In 2026 it is 7.3%, and on real phones 86% of stores are rated good. Content jumping around as the page loads used to be common on top stores. It no longer is.
What the pages weigh
| Page weight (mobile homepage) | 2026 |
|---|---|
| 25th percentile | 4.2 MB |
| Median | 6.1 MB |
| 75th percentile | 10.2 MB |
| Median requests | 377 |
| Median Total Blocking Time (lab) | 540 ms |
In 2020 I singled out one audited store with 13 MB of images and 719 requests. In 2026, 173 of the 992 homepages weigh more than 13 MB in total, images and everything else. Thirty-seven make more than 719 requests.
Weight shows up in the field, mostly at the light end. Among the lightest quarter of stores, 55% pass all three Core Web Vitals. The other three quarters sit between 33% and 38%.
On real phones, 40% pass
Lab tests simulate one slow phone on one throttled connection. Google's Chrome UX Report records what real Chrome users experienced, and Google assesses a page by the 75th percentile of those visits (web.dev, Web Vitals). Of the 1,000 stores, 968 had enough traffic to appear in that report for phones, and 965 had all three metrics.
| Core Web Vital (phone, 75th percentile) | Good threshold | Stores rated good |
|---|---|---|
| Largest Contentful Paint | 2.5 s or less | 77.1% |
| Interaction to Next Paint | 200 ms or less | 49.0% |
| Cumulative Layout Shift | 0.1 or less | 86.4% |
| All three | 40.3% (389 of 965) |
Two things stand out.
Real phones are kinder than the lab. The median lab Largest Contentful Paint is 10.7 seconds; only 7 stores hit 2.5 seconds in the lab. The median real-user value is 2.0 seconds across the whole store, and 77% of stores pass. Most real visitors are on faster phones and connections than the simulation, and returning visitors arrive with files already cached. If you have been panicking over a red lab number, check your field data first.
Loading is mostly solved. Responding is not. Largest Contentful Paint passes for three stores in four. Interaction to Next Paint, the measure of how quickly the page reacts when someone taps, passes for one in two.
Interaction to Next Paint is the new wall
Interaction to Next Paint replaced First Input Delay as a Core Web Vital in March 2024 (web.dev, 2024). The 2020 study listed First Input Delay as the responsiveness vital. Its replacement times every tap and click on the page through to the next paint, not only the delay before the first one.
The median store's 75th percentile Interaction to Next Paint is 202 ms, two milliseconds over the line. 288 stores, almost 30% of those measured, pass loading and layout shift and fail on responsiveness alone. Only 36 fail on loading alone.
The lab data points at the cause. I split the stores into quarters by Total Blocking Time, which measures how long JavaScript keeps the main thread busy during load:
| Total Blocking Time (lab) | Stores | Pass Interaction to Next Paint |
|---|---|---|
| Lowest quarter (under 199 ms) | 239 | 61% |
| Second quarter (199 to 554 ms) | 239 | 58% |
| Third quarter (554 to 1,164 ms) | 240 | 45% |
| Highest quarter (over 1,164 ms) | 239 | 35% |
The more JavaScript a homepage runs while loading, the less likely it responds in time on a real phone. On a Shopify store that JavaScript is the theme, the apps, and the tracking scripts. This data cannot tell you which of the three is responsible on your store. It does say where to look first.
Server response is a smaller factor. Of the 222 stores failing Largest Contentful Paint, 97 also had a real-user time to first byte above 800 ms, so slow delivery is part of their problem before a single image loads.
Does the Lighthouse score predict a real-user pass?
In 2020 I led with the Lighthouse score. With the field data next to it, I would not do that again.
| Lab score | Stores with field data | Pass all three Core Web Vitals |
|---|---|---|
| 0 to 24 | 36 | 14% |
| 25 to 49 | 515 | 35% |
| 50 to 74 | 358 | 49% |
| 75 to 89 | 40 | 55% |
| 90 to 100 | 8 | 75% |
The score points the right way. It does not decide anything. A store scoring in the 30s passes in the field one time in three. Two of the eight 90-plus stores with field data fail: one with a lab score of 96 has a real-user Largest Contentful Paint of 4.3 seconds, another scoring 91 has a real-user Interaction to Next Paint of 764 ms.
That is the same position I take in the Shopify speed optimization guide: optimise what a buyer waits for, and check it with field data, not the score.
The fastest stores in the test
The ten Shopify-hosted homepages that scored 90 or more in the lab:
| Store | Lab score | Real-user LCP | Real-user INP |
|---|---|---|---|
| palm.com | 99 | 1.2 s | 56 ms |
| ethnc.com | 98 | 1.5 s | 78 ms |
| lamaretail.com | 98 | 1.9 s | 99 ms |
| matchesfashion.com | 96 | 0.9 s | 110 ms |
| drune.de | 96 | 0.6 s | 112 ms |
| reelup.io | 96 | 4.3 s | 239 ms |
| bluehamham.com | 95 | no field data | no field data |
| pezwaan.com | 93 | 1.4 s | 138 ms |
| coldcultureworldwide.com | 91 | 1.5 s | 764 ms |
| scriptengine.net | 90 | no field data | no field data |
I am not publishing a slowest-ten list. The data is in the CSV for anyone who wants it, and a homepage under load from a sale is not a fair snapshot to single a brand out on.
Does a higher rank mean a faster store?
Not by the lab score. The 100 highest-ranked stores averaged 46, and stores ranked 501 to 1,000 in the sample averaged 49. On real phones the top did a little better: 45 of the 99 with field data passed all three vitals (45%), against 177 of 479 in the bottom half (37%). A higher rank does not buy a fast store by default.
Method
Store list. The 2020 edition ranked stores by Alexa traffic rank. Alexa's ranking service has since been retired, so this edition uses the Tranco list (list ID 746PX), a research ranking that combines five popularity lists (Cisco Umbrella, Majestic, Farsight, the Chrome UX Report and Cloudflare Radar). I resolved the top 300,000 Tranco domains and kept those whose root or www host resolves into Shopify's storefront IP range, 23.227.38.0/24. That found 5,069 Shopify-hosted domains. I then fetched each homepage in rank order and kept it only if Shopify still served it, until 1,000 were confirmed. Seventeen were rejected along the way. The 1,000th store sits at Tranco rank 106,747. Adult sites and Shopify's own domains were excluded.
What that misses. Headless storefronts, which use Shopify for checkout but serve their pages from another host, are not in the list, because their homepages do not resolve to Shopify. Several well-known Shopify brands fall in that group. The two populations also differ: 2020's list came from Alexa, 2026's from Tranco, so this compares the top of Shopify then and now, not the same 1,000 stores.
Lab data. One PageSpeed Insights run per homepage, mobile strategy, performance category, Lighthouse 13.5.0, on 22 and 23 October 2026. Eight homepages returned no usable result after a retry, leaving 992. One run per store is noisy at the level of a single store and fine at the level of 992.
Field data. The Chrome UX Report API, origin level, phone form factor, 75th percentile, for the 28 days ending 20 October 2026 (Chrome UX Report API documentation). A store passes when all three vitals meet Google's good thresholds. Field data is origin level: it covers every page real visitors loaded, while the lab run tests the homepage only, so lab and field are not the same page.
Comparing to 2020. The 2020 numbers are quoted from the original post. Lighthouse 6.0 and 13.5 weight and score metrics differently, so the score comparison is directional. The raw metrics, First Contentful Paint and time to interactive, are closer to like for like, which is why the table includes them.
Data. shopify-speed-study-2026.csv: one row per store, with Tranco rank, lab metrics, page weight, requests, and real-user values. Free to use with a link to this page.
What to do with this if you run a Shopify store
- Look up your own field data before your score. PageSpeed Insights shows real-user Core Web Vitals above the lab score when your store has enough traffic. That top section is the one Google uses.
- If you fail, check which vital. Among the 576 top stores that fail, 492 fail Interaction to Next Paint, more than eight in ten. That fix usually lives in JavaScript, the apps and scripts running on every page, not in image compression.
- Count the scripts you no longer use. Every app removed from the theme is JavaScript that no longer competes with a tap.
- Do not chase 90. One store in a hundred got there, and some of them still fail for real users. A store in the 40s that passes in the field is in better shape than a 95 that does not.
If your field data fails and you want to know what on the page is causing it, that is part of what a conversion audit covers.

