Performance

How to use WebPageTest to find what is slowing your Magento store

WebPageTest shows exactly where your Magento store spends its load time. A practical walkthrough of running a test, reading the waterfall, and fixing what it finds.

Jason Schuman · August 1, 2026
On this page

    Why your speed score and your real load time disagree

    Most store owners check their site speed the same way. They open one tool, run it once on their own computer, look at the number it hands back, and decide the store is either fine or not fine. I understand the instinct, because it is quick and it feels like a real answer.

    The trouble is that the number does not describe your customer. Your customers are on mid range phones and ordinary home networks, and a lot of them are landing on pages your cache has not warmed up yet. The gap between the performance score you trust and the time it takes to load your web pages is where your website revenue quietly leaks.

    WebPageTest is one of many tools that can close that gap. This article is going to focus on WebPageTest, the tool I trust the most for its consistency. You wouldn't normally think that about consistency in performance testing, but it really does make a difference, and I will explain why as we go.

    By the time we are finished, you will be able to run a test the right way, read the waterfall it gives you without getting lost in it, and take what it shows you back into Magento as real fixes. For this walkthrough I am going to run the test against my own site, jasonschuman.com, so every screenshot here is a real result rather than a mockup, and nothing stays abstract.

    I should say up front that my own site is fast and fairly light, so it is a good clean reference for learning to read each view. As we go, I will point out what the same view looks like on a heavier Magento store, because a busy store is where these numbers usually go wrong.

    Reading a WebPageTest waterfall for a Magento store

    What WebPageTest is doing differently

    WebPageTest is a free, open tool that loads your page on a real browser, sitting in a real data center, on a connection speed that you choose. While the page loads, it records everything that happens and hands you the timeline afterward. It is not generating a grade from a formula, it is measuring one honest page load and showing you the recording.

    That difference is more important on Magento than on most platforms. A Magento store carries a lot of weight: large theme bundles, a long list of third party extensions, a full page cache that is either warm or cold at the moment you hit it, and a server response time that moves around with indexing and traffic.

    A tool that only gives you a letter grade hides all of that underneath the grade. WebPageTest shows you the individual requests in the order the browser made them, each with its own timing, so you can see which part of that Magento stack actually cost you the seconds.

    Where it sits next to the other tools

    People reasonably ask why they need WebPageTest when Google already gives them PageSpeed Insights for free. The honest answer is that the two tools are answering different questions, and you get the most out of them when you use them together.

    PageSpeed Insights tells you how Google grades your page and which best practices you are missing. WebPageTest tells you what physically happened during the load, one request at a time, which is how you find the cause sitting behind that grade.

    A simple way to hold the difference in your head: PageSpeed Insights is the report card, and WebPageTest is the security camera footage. The report card gives you the grade, and the footage shows you exactly what happened and when, which is the part you can actually act on.

    Free versus paid, and why free is where you should start

    The public WebPageTest site is free, and the free version by itself will find most of what is slowing a Magento store down. You can choose a test location, pick a browser, set a connection speed, and run a complete test with a full waterfall and a filmstrip without paying anything.

    The paid plans exist for volume and automation rather than for seeing more. They add more tests per month, private test agents, scheduled monitoring that runs on its own, an API you can wire into your deploy pipeline, and longer data retention. Those features are super important when you are watching a store over time, not when you are sitting down to audit one today.

    So my advice is to learn the tool on the free version first. Once you can read a waterfall and act on it, the paid features are about doing that same work at scale, not about unlocking anything you could not already see.

    Running your first test on a real store

    Start on the WebPageTest home page and put your store URL in the box, but do not just hit Start with the default settings. Two of those settings decide whether your test reflects reality or a fantasy, and they are worth a moment of thought.

    The first is the test location. Set it somewhere near your actual customers, because the physical distance from the browser to your server adds real latency that you want included in the measurement. The second is the connection speed, and you want something honest here, like a mid tier mobile profile or Cable, instead of the unthrottled fiber that makes every site look fast.

    For this walkthrough I tested jasonschuman.com from Dulles, Virginia on a Cable profile, which you can see set up in the configuration below. On your own store you would pick the device, location, and connection that match where your customers actually are, and you would run the test more than once, because a single run can catch a lucky moment or an unlucky one and you do not want to make decisions off either.

    WebPageTest configuration screen with jasonschuman.com entered, device set to Desktop Chrome, and location set to Dulles, Virginia

    The configuration screen: the device, the location, and the connection you choose here decide whether the test reflects your real customers or a fantasy.

    Run it more than once, and read the median

    A single test result is really just an anecdote. WebPageTest lets you set the number of runs, and I would ask for at least three, so that you are reading a median instead of one random sample.

    This highlights the importance on Magento specifically because of the full page cache. Your first request might land on a cold cache and come back slow, while the next two land on a warm cache and come back fast, or the whole thing can flip if a deploy just cleared everything a minute earlier.

    Running several times and reading the median tells you what a typical customer gets rather than what one request happened to see. It also shows you how wide the gap is between your cached and uncached loads, and on Magento that gap is a health signal all by itself.

    Reading the summary screen first

    When the test finishes, WebPageTest drops you onto a summary screen. Before you go digging into the detail, read the handful of numbers across the top, because they frame everything that follows.

    Time to First Byte tells you how long the server took to start responding, which on Magento is your PHP, your database, and your caching layer all talking to each other. Start Render tells you the moment the customer first saw anything on the screen, and Largest Contentful Paint tells you when the main piece of content actually finished showing up.

    Those three numbers already point you in a direction. If Time to First Byte is high, your problem is on the server, and no amount of image work will fix it. If the server responded quickly but Start Render is still late, the problem has moved to the front end, into the CSS and JavaScript that are blocking the first paint.

    On this test jasonschuman.com came back healthy across the board: Time to First Byte around 0.45 seconds, Largest Contentful Paint at 1.18 seconds, almost no layout shift, and effectively no blocking time. That is what a clean result looks like, and it gives you a baseline to hold a slower store up against.

    WebPageTest summary for jasonschuman.com showing First Contentful Paint, Largest Contentful Paint, Cumulative Layout Shift, Time to First Byte, Speed Index, Total Blocking Time, and Lighthouse scores

    The summary row frames the whole test. A high First Byte points at the server, and a late Start Render points at the front end.

    The waterfall is where the real answer lives

    The waterfall chart is the heart of WebPageTest, and for a Magento store it is the single most useful view you have. Every horizontal bar is one request, and the bars are stacked in the order the browser asked for them, with time running from left to right.

    The trick is to read it from top to bottom like a story. The very first bar is the HTML document itself, and the length of that first bar is your server response time made visible. Everything below it is what the page went on to ask for once that HTML arrived.

    From there, three shapes tell you most of what you need. A long bar is a single resource that is slow to download, a bar that starts late is a resource the browser was blocked from fetching until something else finished, and a gap where nothing loads is the browser stuck doing work, which is usually parsing or running JavaScript.

    Diagram: anatomy of a Magento load waterfall, showing the HTML document bar as server time, render-blocking CSS and JS, fonts, third-party scripts, and the image cluster with Start Render and LCP markers

    WebPageTest waterfall for jasonschuman.com showing the first HTML request, then CSS, JavaScript, fonts, and third-party requests stacked by load order

    A real waterfall from this test. The first bar is server time, and every request after it is stacked in the order the browser asked for it. On a heavy Magento store this same chart runs far longer, with a wall of images and third party scripts filling the lower half.

    Reading a Magento waterfall the way I do

    When I open a Magento waterfall, I am looking for a small and familiar set of offenders, because Magento stores tend to fail in the same handful of ways. Knowing the list ahead of time is what lets you move quickly.

    • A long first bar, which is Time to First Byte, telling you the server is slow to respond.
    • Large CSS and JavaScript files sitting high in the waterfall and blocking the first paint.
    • A pile of third party scripts, each coming from its own domain and carrying its own connection cost.
    • Product images that load at full size instead of being scaled down and compressed first.
    • Fonts that hold the text back from showing until the font file has finished downloading.

    The reason that list is worth memorizing is that each item maps to a specific place inside Magento. That mapping is what turns the waterfall from an interesting chart into an actual work order you can hand to someone.

    The connection view and the cost of third parties

    WebPageTest can also group the requests by the domain they came from, and that view is a hard look in the mirror for any Magento store that has collected extensions over the years. Every separate domain is a new connection the browser has to open, negotiate, and secure before it can download a single byte.

    A store that loads analytics, a chat widget, a review platform, an ad pixel, and a personalization script is paying that connection cost five separate times, and often before its own content even starts. In the connection view, each of those shows up as its own little cluster of bars.

    It helps to remember what each of those domains really is. Every third party in your waterfall is a company you have handed a slice of your load time to, and while some of them earn it, many are just a tag someone added for a campaign that ended two years ago and never took back out.

    WebPageTest assets view for jasonschuman.com breaking requests and bytes down by MIME type and by domain, including google-analytics and googletagmanager

    The assets view breaks the page down by type and by domain. The Breakdown by Domain table is where third parties like Google Tag Manager and Analytics show up on their own lines, separate from your own store.

    The filmstrip, and seeing what the customer sees

    Numbers describe the load, but the filmstrip actually shows it to you. WebPageTest takes screenshots at short intervals through the load, so you end up with a strip of frames that runs from a blank page all the way to the finished one.

    This is the view I put in front of anyone who does not want to read a waterfall. It shows the exact moment the page was still blank, the moment the first text appeared, and the moment the large product image finally filled in.

    On a Magento store, the filmstrip often reveals a long stretch where the page sits blank or half built while the render blocking assets load, followed by a sudden jump to a complete page. That blank stretch in the middle is the part your customer is staring at while they decide whether to keep waiting or leave.

    WebPageTest filmstrip for jasonschuman.com showing the page rendering frame by frame from blank to complete

    The filmstrip for this test. You can watch the page go from blank to fully rendered, which is the clearest way to show a non technical teammate exactly what the wait feels like.

    First View versus Repeat View

    WebPageTest actually measures two loads for you, and it is worth knowing what each one means. First View is a brand new visitor arriving with an empty browser cache, and Repeat View is that same visitor coming back with some of your assets already stored in their browser.

    First View is the honest worst case. It is the experience of someone clicking through from an ad or a search result for the very first time, which is exactly the visit that decides whether a paid click turns into a customer, so it is the number I judge a store on.

    Repeat View tells you how well your caching headers are doing their job. If Repeat View is barely faster than First View, your static files are not being cached in the browser the way they should be, and that points at your CDN and your cache header configuration rather than at the page itself.

    Core Web Vitals, and what each one is really telling you

    WebPageTest reports the metrics Google cares about, and the useful part is that each one points at a different layer of your Magento stack. Once you know which metric maps to which layer, you stop wasting time optimizing the wrong thing.

    Largest Contentful Paint is usually your hero image or your main product image, so it is driven by image size, server response, and anything blocking the render. Cumulative Layout Shift is content jumping around as it loads, which is almost always images without set dimensions or fonts swapping in late. Total Blocking Time is JavaScript holding onto the main thread, and on Magento that means heavy theme bundles and third party scripts.

    So you can read the three of them as a map. Largest Contentful Paint sends you to your images and your server, Cumulative Layout Shift sends you to your layout and your fonts, and Total Blocking Time sends you straight into your JavaScript.

    The features worth growing into

    Once a single test feels comfortable, WebPageTest has deeper tools that pay off on a real store. You can script a test that logs in and walks all the way to checkout, which lets you measure the pages that actually make you money instead of only the homepage.

    You can also compare two tests side by side, and that is how you prove a fix worked, by putting the before and after filmstrips next to each other where anyone can see the change. On the paid plans you can schedule tests to run on their own and get an alert when a metric slips, which catches the slowdown a deploy introduced before your customers are the ones who find it.

    There is an API as well, so a team that wants to can run a WebPageTest check as part of the deploy pipeline and fail the build when the homepage gets slower. That is the same discipline as the post deployment checks I recommend everywhere else, just handled automatically instead of by hand.

    Turning what you found into Magento fixes

    A test you never act on is just a number you looked at once. So it is worth walking through how the common WebPageTest findings translate into real work inside Magento, because that translation is the whole point of running the test.

    WebPageTest opportunities list for jasonschuman.com grouped under Is It Quick, with diagnostics like render-blocking JavaScript and render-blocking CSS

    The opportunities view turns the findings into plain-language checks. Each one, like a render-blocking script or a weak cache setting, points at a specific fix you make inside Magento.

    A high Time to First Byte points you at the server layer. Check that the full page cache is on and warm, that Varnish is genuinely sitting in front of the store, that Redis is handling sessions and cache, and that your indexers are not set to run on save during live traffic. A slow first bar is almost never a front end problem, so do not go looking there for it.

    Render blocking CSS and JavaScript high in the waterfall point you at the theme and the module bundle instead. Make sure the store is in production mode, merge and minify where that actually helps, defer whatever is not needed for the first paint, and question every extension that is adding weight to every single page.

    Images, fonts, and the pile of third parties

    The cluster of images lower in the waterfall is usually the easiest win of the three. Magento is capable of serving scaled, compressed, modern image formats, so a store that is still shipping full size product photos is handing customers megabytes they never needed to download.

    Fonts that block the text are a smaller fix but a visible one. A font display setting lets the text show right away in a fallback font and then swap to your custom font once it arrives, which removes a real pause from the filmstrip for very little effort.

    The pile of third parties is a conversation rather than a code change. Take the list of outside domains from the connection view to whoever owns marketing, and go through it together to decide which tags still earn their place and which ones are leftovers from campaigns nobody remembers.

    One thing I have learned auditing these stores is that the fastest speed win is almost always subtraction rather than addition. Removing a dead tracking script, a duplicate font, or an unused extension usually buys you more than any clever optimization does, and it costs nothing except the willingness to delete something.

    Making this a routine instead of a fire drill

    Speed work only sticks when it becomes a habit instead of a reaction to a bad week. The routine I use is simple enough to run once a month and again before any major release, which is often enough to catch problems while they are still small.

    Test the homepage, a category page, a product page, and the checkout, each one three times, from a location and a connection that match your real customers. Read the median summary first, then the waterfall, then the filmstrip, and write down the three worst offenders you find.

    Then fix those three, run the exact same tests again, and compare the before and after side by side so you can see the change you made. Write the date and the numbers down somewhere you will actually see them next month, and speed slowly becomes a tracked line on a chart rather than a once a year panic.

    Why speed shows up in the sales report

    The reason I run WebPageTest on every store I audit is that speed is not a technical nicety, it is a revenue number. A faster store converts more of the traffic you already paid to bring in, and the pages that matter the most, the product page and the checkout, are exactly where every second you save turns up again in the sales report.

    WebPageTest is the tool I reach for because it tells me the truth about those pages in the terms your customers actually experience them, not in the terms of a fast laptop on office wifi. Once you have learned to read a waterfall, you stop being fooled by a friendly score that has nothing to do with the real load.

    The work itself stays the same each time. Run the test, find your three worst offenders, fix them, and prove the fix with a before and after, and then do it again next month. That is how a slow Magento store gradually turns into a fast one.