This article is produced with scandiweb's eCommerce expertise

Collaborate with our development, PPC, SEO, data & analytics, or customer experience teams to grow your eCommerce business.

How to Audit Magento Performance: A Checklist to Measure Your Store’s Real Speed

A speed test of your Magento homepage times one of the easiest pages your store has to serve. Most visitors arrive there logged out, so Magento (Adobe Commerce) can answer from its full page cache, a set of finished pages kept ready to send, without building anything. Shoppers wait on the pages a homepage test never reaches: a filtered category, a search nobody has run this week, the catalog a logged-in trade customer sees.

Auditing Magento performance means timing those pages as well. It measures how long the server takes to start sending each page, called time to first byte (TTFB), both from the cache and built from scratch. It also reads Google’s Core Web Vitals, three scores for loading, responsiveness and visual stability, taken from real Chrome users’ visits. In September 2026, only 23% of Magento sites had a good TTFB on mobile, against 46% of websites overall.

What does auditing Magento performance cover?

Auditing Magento performance means measuring how fast your store answers and renders for real shoppers, page type by page type, and ties each slow number to a cause. It times server response on cached and uncached pages, reads Core Web Vitals from real-user data, tests the server under rising traffic, and checks the setup behind all three.

A speed score gives you one number for one URL on one run. The audit covers six page types in four states, and every slow number in it comes with a likely cause and the team that fixes it.

Performance audit vs code audit

A code audit reads the code: security holes, coding standards, extension quality, slow database queries. A performance audit starts from measurements of what shoppers get and works back toward a cause. The two meet when the numbers point at a specific module, template or query. When they do, the next step is a Magento code audit, which reads the code behind the slow page. A general Magento audit mixes both. This checklist covers the measurement half.

🚀 Quick takeaway

One speed score covers one URL, one load and one test device. An audit covers every page type, from the cache and built from scratch, plus 28 days of real-user data.

The Magento performance checklist

Use this checklist for a Magento store performance check in one pass. Each row is one measurement, how to take it, and what a healthy result looks like. Run it on one URL per page type: homepage, category, filtered category, product, search results and cart, logged out and logged in.

Copy it into a spreadsheet and fill in a column per page type.

#CheckHow to run itHealthy result
1Core Web Vitals, real usersPageSpeed Insights field data or Search Console, mobile and desktopLCP 2.5 s or less, INP 200 ms or less, CLS 0.1 or less, at the 75th percentile
2TTFB, real usersPageSpeed Insights field data, “TTFB (experimental)”800 ms or less at the 75th percentile
3Server response from the cacheLoad each URL twice, time the second load (curl or DevTools)Under 150 ms for cacheable pages with Varnish
4Cache hit or missX-Magento-Cache-Debug header, on staging in developer modeHIT on the second load of category, product and CMS pages
5Server response uncachedSame URL with a made-up query parameter, new value each runNo official target. Compare with row 3 and the 800 ms line
6Logged inSame URLs as a logged-in customer, one per main customer groupClose to the logged-out uncached time
7Search resultsA search term nobody has used since the last cache cleanClose to the uncached category time
8CartAdd a product and open the cart (always built by Magento)Close to your other uncached times
9Under loadLoad test on a staging copy, raising requests per secondFlat response times past your real peak traffic
10Application modebin/magento deploy:mode:showproduction
11Cache setupbin/magento cache:status, and Full Page Cache in the AdminAll cache types enabled, Varnish selected (Fastly on Commerce Cloud)
12Indexers and PHPbin/magento indexer:show-mode, PHP version vs Adobe’s requirementsUpdate by Schedule, PHP 8.5 on 2.4.9, 8.4 or 8.3 on 2.4.8
The Magento performance audit checklist: what to measure, how, and the healthy value

For row 11, the Admin path is Stores > Settings > Configuration > Advanced > System > Full Page Cache.

🚀 Quick takeaway

To time an uncached page, add a made-up parameter such as ?audit=7 and change the number on each run. Don’t use utm_ or gclid parameters: Magento’s default Varnish configuration strips those, so the request can still be served from the cache.

How to audit Magento performance, step by step

To audit Magento performance:

  1. List one URL per page type.
  2. Read Core Web Vitals and TTFB from field data.
  3. Time each page from the cache.
  4. Time it uncached and logged in.
  5. Test the server under rising traffic.
  6. Check the setup behind every page.

1. List one URL for each page type

Pick six URLs from the live store: the homepage, the first page of a busy category, the same category with two filters applied, a best-selling product, a search for a term shoppers use, and the cart with one product in it. Then add the category and product URLs again as a logged-in customer, one test account per main customer group.

Pick busy, real URLs. Google only keeps real-user data for pages with enough visitors, per the Chrome UX Report methodology, and it doesn’t say how many. A rare filter combination or a fresh search usually has no page-level field data, so you time those yourself in steps 3 and 4.

2. Read Core Web Vitals and TTFB in PageSpeed Insights

PageSpeed Insights is Google’s free speed test, and it also shows what real Chrome users experienced on the page. Its top section is that field data: the past 28 days of visits at the 75th percentile, the value three quarters of visits came in under. When a page has too few visits, PageSpeed Insights falls back to data for the whole site and says so, so check the label first. TTFB appears there marked experimental.

The lower section is one lab test on a simulated device. It helps you find causes and flags a server that took more than 600 ms to respond, but it is one run on one machine, so don’t treat it as the result.

For each page type, record LCP, INP, CLS and TTFB on mobile and on desktop against Google’s thresholds. Your Magento 2 PageSpeed Insights results for a category page and a product page will often differ more than the homepage suggests.

Search Console’s Core Web Vitals report shows the same real-user data with URLs grouped by similar experience, which often lines up with your page types, and a group takes the status of its slowest URL. For how to read both views without chasing the lab score, see what PageSpeed Insights can tell you.

3. Time each page from the cache

Load each URL twice and time the second request. From a terminal, curl prints the time to first byte and the total:

curl -s -o /dev/null -w "TTFB %{time_starttransfer}s  total %{time_total}s\n" "https://www.example.com/women/tops.html"

Without a terminal, open the page in Chrome DevTools, go to the Network tab, click the first request and read the “Waiting (TTFB)” line. Run each page 3–5 times and note the middle value. Our guide to reducing server response time covers each timing in more depth, including the Server-Timing header.

Varnish is the cache server Adobe recommends in front of Magento. Adobe’s line for a working Varnish setup is that any page with cacheable blocks should load in less than 150 ms.

To confirm the page came from the cache, check the X-Magento-Cache-Debug header: MISS on the first load, HIT on the second. The header only appears in developer mode, so do this on staging. Our guide to the Magento full page cache walks through the full check.

4. Time each page uncached and logged in

A cache hides a slow page build from every visitor it can serve, so time the page with the cache out of the way. Three ways to do that: add a made-up query parameter such as ?audit=101 and change the number on each run, so Magento sees a new URL and builds the page again. Log in as each test customer and load the category and product URLs again, since each customer group keeps its own cached copies. Search for a term nobody has used since the last cache clean, because results are cached per term.

The cart is always built by Magento, so its times are uncached by definition. If you clear the cache to force a miss, do it on staging, or at a quiet hour at worst: Adobe’s cache management guidance says to schedule flushes outside peak times. On Adobe Commerce Cloud, full page caching uses Fastly, so check how your setup handles query strings with your team.

Magento performance check matrix: six page types timed from field data, from the cache, uncached and logged in
Time each page type four ways. The uncached and logged-in columns are where a slow page build shows up.

5. Test the server under rising traffic

Magento performance testing under load shows how many shoppers at once the server handles before every page slows down. Run it on a staging copy with production data, never on the live store. With a load-testing tool such as k6, JMeter or the one your host provides, raise the requests per second step by step and note the point where response times start to climb. Compare that point with your real peak, the busiest hour of your biggest sales day in your analytics. If the two are close, the server has no headroom for the next campaign.

6. Check the setup behind every page

Five settings explain a lot of slow numbers, and a developer can check them in a few minutes: bin/magento deploy:mode:show should say production, since default mode is not optimized for production. bin/magento cache:status should show a 1 next to every cache type. Full Page Cache in the Admin should be set to Varnish, or Fastly on Commerce Cloud, because the built-in cache is much slower. bin/magento indexer:show-mode should show Update by Schedule, which moves reindexing to cron. And the PHP version should be one Adobe lists for your release in its system requirements. A wrong answer here explains slow cached pages before you look anywhere else.

🚀 Quick takeaway

Google’s real-user data drops query strings from URLs, so filtered versions of a category that put their filters in the query string count toward the plain category URL. Time the filtered URLs yourself to see them on their own.

What the numbers tell you, and what to fix

The pattern across your numbers points to the fix. A slow cached page points to the cache or the server setup. A fast cached page with slow uncached versions points to the page build. Good server times with poor Core Web Vitals point to the theme and the browser. Times that climb with traffic point to capacity.

These are the patterns we see most often in our store health checks, with the fix that usually comes first and who owns it.

What you seeWhat it meansFix firstWho fixes it
Cached pages fast, uncached category, filter and search pages slowCache misses expose a slow page buildProfile the build, cut cache variants, speed up the page buildMagento developer
The same page slow on every load, header says MISSThe cache isn’t serving it: no Varnish, an uncacheable block, or a cache type turned offRun Varnish, remove the uncacheable block, enable cache typesMagento developer
Every page slow, cached ones too, even at quiet hoursThe setup under the store: developer mode, old PHP, a small or shared serverProduction mode, supported PHP, dedicated resourcesDeveloper and host
Fast at low traffic, response times climb with loadThe server runs out of capacity at peakMore capacity, or less work per requestHost and developer
Logged-in pages slower than logged-out onesEach customer group keeps its own cache copies, so misses are more frequentMerge groups that share prices, speed up the buildDeveloper and store admin
Good TTFB, poor LCP or INPThe time goes in the browser: theme JavaScript, images, third-party tagsHyvä, or trim scripts, images and tagsFrontend developer
Lab tests fast, field data poorShoppers have slower phones or networks, or visit pages you didn’t testTest more URLs, check mobile on its own, add a CDNHost and frontend developer
Slow right after deploys or cache flushes, then fineThe cache starts empty and refills from shopper visitsFlush by tag, deploy off-peak, warm the top pagesDevOps or host
What the audit numbers tell you, what to fix first, and who owns the fix

Start with the first row that matches, because the rows combine: a store in developer mode on old PHP shows slow uncached pages too, and that row’s fix comes after the setup fix. For the causes behind each pattern, read our guide to why a Magento site gets slow.

Decision tree from cached TTFB, uncached TTFB, Core Web Vitals and load results to the fix each one points to
Read the numbers in this order. Each "yes" points to a different fix and a different team.

🚀 Quick takeaway

If the cached page is slow too, fix the cache and the server setup first. A faster page build only helps the requests that reach Magento’s PHP code.

How to fix slow uncached Magento pages

When uncached pages are slow and cached ones are fast, the time goes into building the page: running PHP code, rendering layout blocks and querying the database. You can make that happen less often, with fewer cache variants, or make it take less time, with profiling, leaner code and a faster page build.

The first route is fewer misses. Merge customer groups that exist only for reporting and share the same prices, and keep filter combinations out of crawl paths so crawlers don’t fill the cache with pages no shopper opens.

The second route is a faster build. Profile one slow page with New Relic or Blackfire, which breaks the build into layout, blocks, templates and database queries, then remove or replace the blocks and modules that take the longest.

Expedio, scandiweb’s Magento module with an open-source core, takes the second route. It speeds up how Magento builds each page on the server by applying Liquid, the open-source template language created at Shopify, and makes that build at least 2x faster. It runs on Magento Open Source, Adobe Commerce and Commerce Cloud, with Luma, Hyvä or a custom theme, on any hosting, and leaves the theme, data, admin and checkout as they are.

The Expedio page on scandiweb.com with the headline Magento. 2x faster. and buttons to get Expedio or try the demo
Expedio makes Magento at least 2x faster without changing your theme or data

We tested Expedio the way this checklist tests a store. In a benchmark on one merchant’s Hyvä store, measured as server response time, two copies of the store ran side by side on one server with no page cache, across eight page types. On 100 category pages, each opened once from cold, stock Magento took a median of 181 ms and Expedio 57 ms, and a full category page ran 30 database queries instead of 655. The same server also handled 3x the traffic before response times started to rise. The Expedio benchmark has the full method and its limits.

When to bring in a professional audit

Bring in a professional Magento performance audit when the checklist shows a problem you can’t trace, such as slow uncached pages with no obvious cause, or when you need firm numbers before a peak season, an upgrade or a hosting move. A professional audit adds code profiling, load testing on a copy of the store, and a ranked list of fixes.

Where you timed a page, a professional audit profiles it, reads the MySQL slow query log, and runs load tests on a copy of the store with your real catalog. The report ranks every finding by severity and estimated effort, with a recommended fix for each, so your developers can start at the top.

Server response time is a standard line in our store health checks, and our Magento support team can run the deeper audit with you, from profiling to a ranked list of fixes. If your peak season is close, run the audit before your Black Friday code freeze, so there is time to act on what it finds.

🚀 Quick takeaway

Keep each audit’s numbers. The next audit, after an upgrade, a new extension or a hosting move, is only useful if you can compare it with a baseline.

Frequently asked questions about auditing Magento performance

What does a Magento performance check include?

A Magento performance check includes five steps: Core Web Vitals and TTFB from real-user data, server response time for each page type from the cache, the same pages built from scratch and logged in, response times under rising traffic, and the setup behind them, such as application mode, cache configuration, indexers and PHP version. A professional audit adds code profiling and a ranked list of fixes.

How long does it take to audit Magento performance?

The checklist in this article takes a few hours: six page types, timed from the cache and without it, plus field data from PageSpeed Insights or Search Console. Load testing and code profiling take longer, because they need a staging copy of the store, a load-testing tool and application monitoring set up first. Plan that deeper work with your developer or hosting team.

What is a good TTFB for a Magento store?

For real shoppers, Google calls a TTFB of 0.8 seconds or less good and anything over 1.8 seconds poor, measured at the 75th percentile of page loads. For cached pages, Adobe says a page with cacheable blocks should load in less than 150 ms when Varnish works. Uncached pages have no official target, so compare them with your cached times and the 800 ms line.

Is PageSpeed Insights enough for a Magento speed test?

No. PageSpeed Insights tests one URL at a time, and its lab test often gets a page the cache already holds. Its real-user section is the best free field data you have, but it covers the past 28 days and falls back to data for the whole site when a page has too few visits. Add your own uncached timings by page type to see the server side.

Should you audit Magento performance on production or staging?

Use both. Field data and cached timings come from production, because that is what shoppers get. Run the disruptive steps on a staging copy with the same data: cache flushes, developer-mode header checks and load tests. Adobe advises flushing caches outside peak hours, because a flush at peak makes the server rebuild pages while shoppers are waiting for them.

How often should you audit Magento performance?

Run a full audit before each peak season and after any major change: a Magento upgrade, a new theme, a new extension or integration, or a hosting move. Between audits, watch TTFB and Core Web Vitals at the 75th percentile so you notice a slowdown before shoppers report it. Keep each audit’s numbers as the baseline for the next one.

What to do after you audit Magento performance

Auditing Magento performance turns one speed score into a set of numbers you can act on: every page type, from the cache and built from scratch, for real shoppers and under load. The pattern across those numbers tells you what to fix first and who should fix it.

Start with the first decision-table row that matches your numbers, and fix that layer before the next one. If cold pages after a deploy are the problem, a cache warmer can refill the top ones, though not every filter, search and customer group. After each fix, re-run the same URLs with the same method, cached and uncached, so you compare like with like. Most stores find that one or two rows explain most of the wait, and the first fix is often a setting a developer changes in an afternoon. When you’re ready to work through the fixes from the server to the browser, our guide on how to speed up Magento puts all 15 in order.

If your numbers point in more than one direction, share them with us and we'll help you decide what to fix first.

If you enjoyed this post, you may also like