Skip to content
Skip to main content
Ahosting Logo
  • Hosting
    • WordPress Hosting
      Fast, secure hosting for WordPress sites
    • Web Hosting
      Reliable, affordable hosting for sites
    • FFMpeg Hosting
      Fast hosting for FFmpeg projects
    • Reseller Hosting
      Start hosting biz with white-label plans
    • VPS Hosting
      Scalable VPS with full control & power
    • Dedicated Server
      High-power servers for max security
    • WooCommerce Hosting
      Fast hosting for WooCommerce shops
  • Domain
    • Register a Domain
      Secure your domain name in minutes
    • Domain Transfer
      Move domains to Ahosting with ease
    • Premium SSL Certificate
      Enterprise SSL to build customer trust
  • Support
    • Submit A Ticket
      Expert 24/7 help from our support team
    • Abuse Report
      Report abuse to keep network safe
    • Knowledge Base
      Quick answers via step-by-step guides
  • Company
    • Blog
      Expert articles to power your online growth
    • Compare Hosts
      Side-by-side comparison
    • Datacenter
      Secure, high tech datacenter for hosting
    • About Us
      Learn about our mission, values & team
    • Contact Us
      Contact sales for plans, pricing & advice
    • Sitemap
      Find info fast with our clear site map
My Account
Ahosting Logo
  • Hosting
    • Web Hosting
    • WordPress Hosting
    • FFMpeg Hosting
    • Reseller Hosting
    • VPS Hosting
    • Dedicated Server
    • WooCommerce Hosting
  • Domain
    • Register a Domain
    • Domain Transfer
    • Premium SSL Certificate
  • Support
    • Knowledge Base
    • Abuse Report
    • Submit A Ticket
  • Company
    • About Us
    • Contact Us
    • Blog
    • Sitemap
    • Datacenter
  • Legal
    • Privacy Policy
    • Terms of Service
    • Acceptable Use Policy
    • Service Legal Agreement
    • Resource Abuse Policy
My Account

Blog Home

Category: WooCommerce

  • Exclude Checkout From Cache: The WooCommerce Verification Guide (2026)

    Exclude Checkout From Cache: The WooCommerce Verification Guide (2026)

    • What It Really Means to Exclude Checkout From Cache on LiteSpeed
      • The Three Pages LSCache Excludes Without Being Asked
      • Why an Automatic Default Is Not a Verified Outcome
    • The Four Ways Checkout Cache Exclusion Fails Silently
      • Failure One: Page Associations Point at the Wrong Page
      • Failure Two: A Slug Collision Moved Checkout to /checkout-2/
      • Failure Three: A Force Cache URI Overrides the Exclusion
      • Failure Four: A Layer Above LSCache Cached It Anyway
    • How to Exclude Checkout From Cache in Five Steps
      • First, Confirm the WooCommerce Page Mapping
      • Second, Capture the Real URLs and Endpoints
      • Third, Exclude Checkout From Cache With Do Not Cache URIs
      • Fourth, Decide Whether ESI Belongs in Your Setup
      • Finally, Verify the Response Headers
    • The AHosting Checkout Cache Exclusion Verification Matrix
    • When ESI Beats a Blanket Rule to Exclude Checkout From Cache
    • What It Costs to Exclude Checkout From Cache in PHP Workers
    • A Practical Checklist: Is Your Checkout Actually Uncached?
    • Frequently Asked Questions About How to Exclude Checkout From Cache
      • Does WooCommerce exclude checkout from cache automatically in 2026, or must you configure it?
      • LSCache vs a CDN rule: which layer should exclude checkout from cache first?
      • How does AHosting verify that a store checkout stays uncached in 2026?
      • If my checkout page slug is /checkout-2/, do I still need to exclude checkout from cache manually?
      • Which response header proves a checkout page was not served from LiteSpeed cache?
      • Can you exclude checkout from cache with JavaScript or PHP instead of plugin settings?
      • Do Not Cache URIs vs Private Cached URIs: which one suits a checkout page?
      • Should an AHosting WooCommerce store enable ESI or just exclude checkout from cache?
      • What does the LiteSpeed crawler blocklist show after you exclude checkout from cache in 2026?
      • Which AHosting hosting plan suits a store that cannot cache checkout at all?
    TL;DR

    To exclude checkout from cache correctly, confirm the WooCommerce page IDs, list the real URLs under Do Not Cache URIs, then verify X-LiteSpeed-Cache-Control reads no-cache from a logged-out browser. Automatic exclusion is a default, not a guarantee.

    A cached checkout page is the quietest expensive defect in WordPress commerce. It throws no error, writes no log line, and usually surfaces as a message from a shopper who saw a stranger cart. This guide covers how to exclude checkout from cache on a LiteSpeed stack, the four specific ways the automatic exclusion every store relies on fails, and how to prove the fix landed by reading response headers instead of trusting a settings screen.

    Listen: the four silent failure modes of checkout cache exclusion and the one header that settles it. By Matt Chrust, Director of Business Development, AHosting.

    Most published advice stops at that settings screen. Across unmanaged accounts we audited – WordPress installs running plugin defaults with no host-side rules layered on top – 47 percent returned an incorrect cache-control response on the checkout URL. Nearly all of them had exclusion switched on. Nobody had checked whether the setting reached the page shoppers were actually served.

    What It Really Means to Exclude Checkout From Cache on LiteSpeed

    In short, to exclude checkout from cache is to guarantee that the transactional pages of a store are rebuilt by PHP on every single request, for every visitor, with no stored copy sitting anywhere between the database and the browser. Catalog pages can and should be stored aggressively. Cart state cannot, because the correct response differs per session and a shared copy is by definition somebody else response.

    The Three Pages LSCache Excludes Without Being Asked

    LiteSpeed Cache ships with a WooCommerce module that marks Cart, Checkout, and My Account as non-cacheable the moment the plugin is detected. That behavior is documented plainly in the LiteSpeed Cache settings documentation, which also carries the caveat almost nobody quotes: misconfigured page associations in WooCommerce settings can cause pages to be classified wrongly in either direction. The exclusion is keyed to the page IDs the store has registered, not to the words cart or checkout in a URL.

    That distinction is the whole post. A store whose pages were created by the setup wizard and never touched will behave correctly by default. A store whose checkout was rebuilt, duplicated, imported from a staging copy, or handed to a funnel plugin has broken the link between the setting and the page, and the plugin has no way to tell you. Our guide to what a WooCommerce store needs from its hosting covers the commercial side of that architecture.

    Why an Automatic Default Is Not a Verified Outcome

    Defaults describe intent. Headers describe reality. Between the two sit a page ID lookup, a theme, sometimes a page builder, a server cache, an edge network, and the shopper own browser – six places where intent can be lost without anything reporting a failure. Reading one response header collapses all of that guesswork into a yes or a no, which is why the procedure later in this guide ends with a header read rather than a saved settings screen.

    The stakes are higher than a bad user experience. Storing an authenticated or session-bound response in a shared cache is a recognized security failure mode, not merely a bug: web cache deception research treats it as a class of attack in its own right, where the cache is tricked into holding private content that any later visitor can request. A leaked cart is the benign end of that spectrum.

    The Four Ways Checkout Cache Exclusion Fails Silently

    Every failure below leaves the exclusion setting switched on and the dashboard looking correct. That is what makes them expensive: there is no error state to notice, so the defect persists until a shopper reports it or the revenue graph does.

    Failure modeWhat triggers itDetection signalWhere the repair happens
    Page association driftCheckout rebuilt, duplicated, or imported; page ID now points elsewhereCheckout URL returns a cache hit while settings look correctWooCommerce, Settings, Advanced, Page setup
    Slug collisionA draft or trashed page already holds the checkout slugLive URL is /checkout-2/ while every rule targets /checkout/Delete the blocking post, then reset the slug
    Force rule overrideA Force Cache URI or Force Public Cache URI matches the checkout pathExclusion listed and ignored; page still returns a hitLiteSpeed Cache, Cache, Cache tab
    Layer above the originCDN page rule or browser cache stores the response independentlyOrigin header correct, edge or repeat-visit response staleCDN bypass rule plus .htaccess expires audit
    Table 1 – The four silent failure modes for WooCommerce checkout cache exclusion.

    Failure One: Page Associations Point at the Wrong Page

    This is the failure the plugin vendor names and almost no third-party guide repeats. WooCommerce stores its Cart, Checkout, and My Account pages as numeric IDs in the options table, set under Settings and then Advanced. Rebuild the checkout as a new page and forget to reselect it, and two pages now exist: the one customers reach and the one the cache module believes is checkout. Only the second is protected.

    Funnel and checkout plugins introduce the same split deliberately, since they render their own transactional pages at their own URLs. FunnelKit publishes a LiteSpeed configuration note exists precisely because those pages sit outside the automatic rule and must be listed by hand.

    Failure Two: A Slug Collision Moved Checkout to /checkout-2/

    WordPress refuses to hand a slug to two published posts, and it appends a numeric suffix instead. What surprises people is the draft case: the core function that generates unique slugs skips uniqueness checks entirely while a post is draft, pending, or auto-draft, so an abandoned draft named checkout can quietly occupy the slug and push the real page to /checkout-2/. The duplicate-slug behavior this produces is tracked in WordPress core.

    The consequence is subtle and worth stating precisely. Because automatic exclusion follows the page ID, the checkout page itself remains uncached. Every path-based rule written against /checkout/ – the CDN bypass, the Do Not Cache URI, the firewall exception – now matches nothing at all. One layer protects the page and the rest silently do not.

    Failure Three: A Force Cache URI Overrides the Exclusion

    LiteSpeed provides Force Cache URIs and Force Public Cache URIs, and both are documented as caching a matching path regardless of any non-cacheable setting elsewhere. A broad entry added months ago to warm a landing page will happily re-cache checkout if the string matches. Partial matching makes this easier than it sounds, because a rule reading /check will match /checkout/ perfectly well.

    Audit those two fields before adding anything to the exclusion list. A rule that loses to a force rule is not a rule; it is a comment. If a store genuinely needs both, anchor the force entry with a caret for the start of the URI and a dollar sign for an exact match so it cannot reach further than intended.

    Failure Four: A Layer Above LSCache Cached It Anyway

    Server-level exclusion governs the server. It does not govern a CDN that was told to cache everything, and it does not govern a browser that received permissive expiry headers from a stray .htaccess rule. RFC 9111, the HTTP caching specification draws this line explicitly: a shared cache and a private cache obey different directives, and a response can be excluded from one while being stored happily by the other.

    Security guidance treats the browser layer as non-optional for session-bearing pages. The OWASP session management guidance recommends no-store on any response carrying a session identifier, precisely because a back-button visit after logout can otherwise resurface private data from disk. Checkout carries session state by definition.

    How to Exclude Checkout From Cache in Five Steps

    The shortest correct answer is four moves and one proof: confirm the page mapping, capture the real URLs, list them under Do Not Cache URIs, clear the force rules, and read the response header from a logged-out browser. Everything below is that sequence in detail.

    First, Confirm the WooCommerce Page Mapping

    Open WooCommerce, then Settings, then Advanced. Read what the Cart page, Checkout page, and My account page dropdowns actually say, and open each in a new tab rather than assuming the name matches the page. A store that has been redesigned once or migrated twice will frequently show a page title that looks right attached to a URL that is not the one customers reach.

    If any dropdown is empty or points at a page you do not recognize, fix it here before touching a cache setting. Nothing downstream can be correct while this mapping is wrong, and correcting it often resolves the symptom on its own without a single exclusion rule being written.

    Second, Capture the Real URLs and Endpoints

    Copy the live URL of each transactional page exactly as the browser shows it, then add the endpoints that hang off them. The order-received endpoint carries order totals and customer detail and lives under checkout by default, so it inherits the checkout exclusion. A custom thank-you page built as a separate page does not inherit anything, and neither does a custom account endpoint.

    Write the list down. Four URLs is typical for a plain store; eight is common once a funnel plugin, a wishlist, or a subscription portal is involved. This list drives every remaining step and every rule at every other layer.

    Third, Exclude Checkout From Cache With Do Not Cache URIs

    Navigate to LiteSpeed Cache, then Cache, then the Excludes tab, and paste one URI per line into Do Not Cache URIs. Matching is partial and runs against the request URI, so a bare /checkout catches the page and its endpoints together. Anchor an entry with a caret when a path fragment appears elsewhere on the site and you want only the beginning of the URI to match.

    While that screen is open, check the Cache tab for Force Cache URIs and Force Public Cache URIs and remove anything overlapping. Plugin choice matters less here than most comparisons suggest, though our comparison of LiteSpeed Cache against WP Rocket explains why the server-level layer is the one worth configuring first on this stack.

    Fourth, Decide Whether ESI Belongs in Your Setup

    Edge Side Includes let a page be stored publicly while a private fragment such as a mini-cart is assembled per session. It is the right answer for catalog pages carrying live cart counts and the wrong answer for checkout itself, which stays fully excluded either way. ESI requires LiteSpeed Enterprise, Web ADC, or QUIC.cloud, and on shared hosting the server administrator controls availability per domain.

    Ask your host before designing around it. On WooCommerce-focused hosting plans the LiteSpeed stack and LSCache are already in place, which removes the plugin-versus-server question and leaves only the configuration work described here.

    Finally, Verify the Response Headers

    Open a private window so no login cookie is present, load the checkout URL, open the Network panel, and click the first document request rather than any asset. Look for X-LiteSpeed-Cache-Control reading no-cache. Then confirm the browser layer separately, since the two are independent and a pass on one says nothing about the other.

    Repeat the read after every deployment that touches pages, permalinks, or the caching plugin. Treat it the way you treat a smoke test on a managed WordPress environment: cheap, fast, and the only thing standing between a configuration change and a silent revenue leak.

    The AHosting Checkout Cache Exclusion Verification Matrix

    Five layers can store a checkout response, and each announces itself with a different header. The AHosting Checkout Cache Exclusion Verification Matrix maps every layer to the header that proves its state, so a store owner can settle the question in one page load instead of a support thread. Read it once and you know whether the store does exclude checkout from cache in the only place that counts, which is the response a shopper receives.

    LayerHeader to readCorrect value on checkoutWhat a wrong value means
    LiteSpeed server cacheX-LiteSpeed-Cache-Controlno-cacheThe page is eligible for storage; page mapping or a force rule is at fault
    LiteSpeed served statusX-LiteSpeed-CacheHeader absent, or missA stored copy was served; purge, then re-read before changing settings
    Browser cacheCache-Controlno-cache, must-revalidate, max-age=0A shopper repeat visit can render from disk; audit .htaccess expires rules
    Browser expiryExpiresA date in the pastPermissive expiry overrides intent; usually a broad optimization rule
    Edge or CDNCDN cache-status headerBypass, dynamic, or miss on every requestThe edge holds a shared copy the origin never authorized
    Table 2 – The AHosting Checkout Cache Exclusion Verification Matrix: what to read, what it should say, and what a wrong value means.
    Where a checkout response leaks into cache A shopper request passes through browser cache, CDN edge, LiteSpeed server cache and PHP. Four labelled failure points show where a checkout response can be stored despite exclusion being enabled. Where a checkout response leaks into cache Four layers, four independent failure points Browser Cache-Control CDN edge cache-status LiteSpeed X-LiteSpeed-Cache PHP Correct cart Failure 1 – page association drift Checkout page ID points at a page customers never reach, so the automatic rule protects the wrong page Failure 2 and 3 – slug collision and force rules Path rules written for /checkout/ match nothing, or a Force Cache URI re-cached the page anyway Failure 4 – a layer above the origin Origin says no-cache; the CDN or the browser stored a copy regardless

    When ESI Beats a Blanket Rule to Exclude Checkout From Cache

    Exclusion is a correctness tool with a performance cost, and the cost lands on catalog pages rather than on checkout. A theme that prints a live cart count in the header makes every page session-dependent, which tempts store owners into excluding far more than they need to and surrendering the cache entirely. ESI is the alternative: store the page publicly, punch a hole for the cart, and fill the hole from a private per-session copy.

    That trade has a separate front-end dimension worth reading alongside this one. Our guide to fixing slow WooCommerce cart fragments covers the uncacheable AJAX request WooCommerce fires on every page view and the two levers that remove it, which is the companion problem to the one described here. Keep the two separate in your head: this guide protects correctness on four URLs, that one recovers speed on everything else.

    For agencies running many client stores, the practical value is that the exclusion list and the ESI decision are per-site rather than per-server, so they must be verified per site. That is a real operational cost once a portfolio passes a dozen stores, and it is the point at which reseller hosting with per-account isolation stops being a convenience and starts being a control.

    What It Costs to Exclude Checkout From Cache in PHP Workers

    Correctness is not free. A cached page is served by the web server before PHP is involved and consumes no worker at all, while an excluded page runs the full WordPress stack on every request. Choosing to exclude checkout from cache across four URLs is cheap. Excluding every page because a mini-cart appears in the header is how a store that handled a thousand visitors comfortably starts queueing at two hundred.

    The unit that matters is the entry process, and our guide to concurrent users on shared hosting sets out how to convert real traffic into a concurrency figure. If checkout itself is slow rather than merely uncacheable, that is a different problem with a different method – our breakdown of where WooCommerce checkout seconds actually go walks the measurement layer by layer. When sustained concurrent transactions outgrow a shared ceiling, a dedicated server removes the shared constraint entirely.

    Checkout Cache Exposure Checker

    Tap every statement that is true of your store. The list below updates as you go.

    Compare VPS plans for transactional load

    A Practical Checklist: Is Your Checkout Actually Uncached?

    Treat this as the standing routine for anyone who needs to exclude checkout from cache and keep it excluded. Run it after any change to pages, permalinks, themes, or caching configuration. It takes about five minutes and it is the difference between believing the exclusion works and knowing it does.

    • Every dropdown under WooCommerce, Settings, Advanced points at the page customers actually reach
    • No draft or trashed page is holding the checkout, cart, or account slug
    • The live checkout URL matches the path used in every cache rule you have written
    • Do Not Cache URIs lists checkout, cart, account, and any custom thank-you or funnel page
    • Force Cache URIs and Force Public Cache URIs contain nothing that matches a transactional path
    • X-LiteSpeed-Cache-Control reads no-cache on the checkout document request, logged out
    • Cache-Control and Expires on that same response prevent the browser storing a copy
    • Any CDN in front of the origin carries a matching bypass rule, verified from a second region
    • The header read is repeated after every deployment, not only after the first fix

    Frequently Asked Questions About How to Exclude Checkout From Cache

    Does WooCommerce exclude checkout from cache automatically in 2026, or must you configure it?

    Specifically, LiteSpeed Cache excludes the Cart, Checkout, and My Account pages by default the moment it detects WooCommerce. That default is read from the page IDs stored in WooCommerce settings, so a store running a duplicated or builder-rendered checkout can fall outside it with no warning shown anywhere in the dashboard. The verification matrix in this guide settles the question in about ten seconds.

    LSCache vs a CDN rule: which layer should exclude checkout from cache first?

    Therefore, configure the origin first. LSCache decides whether the server stores the page at all, and an edge rule cannot un-store what the origin already published as cacheable. Set LSCache, read the response header, then add the matching CDN bypass rule and read it again from a second location. Skipping the origin step produces a store that looks healthy on one continent and broken on another.

    How does AHosting verify that a store checkout stays uncached in 2026?

    In practice, we read response headers on the live checkout URL from a logged-out browser rather than trusting a settings screen. Across unmanaged accounts we audited, 47 percent returned an incorrect response on that URL, which is why the header read is a standing step here rather than a one-time task. Every header and its correct value appears in the matrix earlier in this guide.

    If my checkout page slug is /checkout-2/, do I still need to exclude checkout from cache manually?

    Indeed, you do, though not in the way most guides suggest. Automatic exclusion follows the page ID, so the page itself stays uncached, but every path-based rule written for /checkout/ now matches nothing at the edge or in the browser layer. Repair the slug, or rewrite each rule against the URL the store actually serves.

    Which response header proves a checkout page was not served from LiteSpeed cache?

    Notably, X-LiteSpeed-Cache-Control set to no-cache on the page request confirms the response bypassed LSCache. Read it from a logged-out browser on the first document request in the Network panel, never on a stylesheet or an image. Then check the browser layer separately, because a stale copy sitting in one shopper browser produces the same symptom with none of the same causes.

    Can you exclude checkout from cache with JavaScript or PHP instead of plugin settings?

    For example, JavaScript cannot do this at all, because the caching decision is made and the response is stored before any script executes. PHP can, through the plugin do-not-cache API or a cache-control header emitted early in the request, and that is how checkout plugins register their own pages. On a normal store, correct page assignments achieve the same result with far less to maintain.

    Do Not Cache URIs vs Private Cached URIs: which one suits a checkout page?

    Ultimately, a checkout page belongs in Do Not Cache URIs, which stops the response being stored at all. Private Cached URIs keeps a per-session copy instead, which suits an account dashboard that is expensive to build and safe to reuse for one signed-in visitor. Choosing the private option for checkout hides real defects, because a shopper reloading the page still receives their own stale copy.

    Should an AHosting WooCommerce store enable ESI or just exclude checkout from cache?

    Interestingly, both, because they answer different questions. Excluding the transactional pages protects correctness, while ESI recovers speed on catalog pages carrying a mini-cart by storing the page publicly and the cart fragment privately. ESI requires LiteSpeed Enterprise, Web ADC, or QUIC.cloud, and on shared hosting the server administrator controls whether it is available for a given domain, so confirm availability before planning around it.

    What does the LiteSpeed crawler blocklist show after you exclude checkout from cache in 2026?

    Accordingly, the checkout URL appears in the crawler blocklist, and that is the expected outcome rather than a fault. The crawler skips any URI answering with a no-cache control header, because a page that is never stored has nothing to warm. Treat its presence there as confirmation, and treat its absence as a signal worth chasing down.

    Which AHosting hosting plan suits a store that cannot cache checkout at all?

    Consequently, the plan question becomes a concurrency question rather than a storage question. Every checkout request executes PHP, so the number of shoppers able to transact simultaneously is bounded by entry processes rather than by page speed. The sizing checklist near the end of this guide sets out how to work that number out before buying.

    August 18, 2026
  • How to Fix WooCommerce Cart Fragments Slowing Every Page (2026)

    How to Fix WooCommerce Cart Fragments Slowing Every Page (2026)

    • What WooCommerce Cart Fragments Actually Are (And Why They Touch Every Page)
      • Why the Uncacheable Call Costs More Than It Looks
    • Where Cart Fragments Fire vs. Where They Are Actually Needed
    • How to Fix WooCommerce Cart Fragments in Four Steps
      • First, Confirm the Symptom in the Network Panel
      • Second, Dequeue wc-cart-fragments Outside Cart and Checkout
      • Third, Enable LSCache ESI to Keep the Mini-Cart Live on Cached Pages
      • Fourth, Verify the Fix Without Breaking the Cart
    • Dequeue Script vs. LSCache ESI: Which Method Does What To Fix WooCommerce Cart Fragments
    • Cart Fragments Cost in PHP Workers on AHosting
      • The Concurrency Math: Worker Cost by Visitor Load
    • How You Fix WooCommerce Cart Fragments – Our Diagnostic Checker
    • A Practical Checklist: Is Your WooCommerce Store Cart-Fragments-Clean?
    • Frequently Asked Questions About How to Fix WooCommerce Cart Fragments
      • What is the wc-ajax=get_refreshed_fragments request and why does it slow every page?
      • How do I fix WooCommerce cart fragments in 2026 without breaking the live cart?
      • Dequeue script vs LSCache ESI: which method should a WooCommerce store use to fix WooCommerce Cart Fragments?
      • Will disabling cart fragments stop the mini-cart from updating on my store?
      • Why does the WooCommerce cart fragments call consume a PHP entry process on AHosting and what will fix WooCommerce cart fragments?
      • Is the get_refreshed_fragments slowdown still a problem for WooCommerce in 2026?
      • When should a WooCommerce store on AHosting shared hosting worry about cart fragments burning workers?
      • Does LiteSpeed Cache ESI on AHosting replace the need to dequeue cart fragments in 2026?
      • What is the difference between cart fragments and full-page caching for WooCommerce speed?
      • How do I verify the WooCommerce cart fragments fix actually worked in the browser?
    TL;DR

    To fix WooCommerce cart fragments slowing every page, dequeue the wc-cart-fragments script outside cart and checkout, then enable LSCache ESI so the mini-cart stays live while pages stay cached.

    If your WooCommerce store feels slow even on pages that have nothing to do with shopping, there is a good chance you need to fix WooCommerce cart fragments. By default, WooCommerce fires a small AJAX request named get_refreshed_fragments on every page load, including your About page, your blog posts, and your contact page. Critically, that request cannot be full-page cached, so it quietly runs PHP and adds latency where none is needed. Below, this guide shows you how to fix WooCommerce cart fragments in two complementary moves, then prove the fix worked in your browser.

    Listen: why WooCommerce cart fragments slow every page, and the two-lever fix that keeps the cart live while pages stay cached. By Matt Chrust, Director of Business Development, AHosting.

    Notably, this is one of the most common silent performance drains on a WooCommerce site, and almost nobody attributes it correctly because there is no error message. Instead, you simply see a higher time to first byte and, on a metered host, more PHP workers held than the traffic seems to justify. Below, we diagnose it, fix it at two layers, and tie the cost to real per-plan concurrency numbers.

    What WooCommerce Cart Fragments Actually Are (And Why They Touch Every Page)

    WooCommerce cart fragments are small pieces of HTML that WooCommerce refreshes over AJAX to keep the mini-cart, the cart count, and the cart total current without a full page reload. Specifically, the mechanism is the get_refreshed_fragments action, delivered through a script called wc-cart-fragments. In principle, it exists so that a shopper who adds a product on one page sees the updated cart badge in the header immediately. That is genuinely useful behavior on shop and product pages.

    However, WooCommerce enqueues that script sitewide, not only where a cart is relevant. As a result, the browser fires wc-ajax=get_refreshed_fragments on pages that display no cart at all. Consequently, the call reaches admin-ajax, which means it must run PHP on the server, which in turn means it cannot be served from full-page cache. For a store whose real dynamic surface is just the cart and checkout, that is a lot of wasted uncached work. Notably, the official behavior is documented in the WooCommerce developer documentation, and the underlying script-dequeue mechanism is a standard part of the WordPress script API.

    Why the Uncacheable Call Costs More Than It Looks

    Consequently, the real cost is not the few kilobytes of JSON that come back. Rather, the cost is that a dynamic PHP request runs on a page that could otherwise have been served entirely from cache in a couple of milliseconds. On a static, cached WordPress response, no PHP worker is consumed at all, because LiteSpeed Cache serves the page at the web-server layer before PHP starts. The fragments call breaks that pattern: it forces PHP execution on pages that had no other reason to run it. In practice, this is why the caching layer underneath a store matters as much as the store itself; AHosting’s LiteSpeed-based WordPress hosting serves cached pages at the web-server layer precisely so that PHP is reserved for requests that truly need it.

    Furthermore, that extra request adds directly to your time to first byte on affected navigations, and it competes with genuinely dynamic traffic for the same limited pool of PHP workers. The Mozilla developer network defines time to first byte as the interval before the first byte of the response arrives, and every uncached PHP call sits squarely inside that window. Independent measurement corroborates how much server response time shapes real-world performance: the HTTP Archive loading-speed reports track time to first byte across millions of sites, and slow uncached responses consistently drag those distributions down.

    Where Cart Fragments Fire vs. Where They Are Actually Needed

    Specifically, the whole fix rests on one observation: the pages where the mini-cart matters are a small subset of the pages where the script currently loads. Accordingly, the table below maps common page types to whether cart fragments are genuinely needed and what the uncached call costs when it fires anyway. This is the asset to screenshot when you explain the change to a client or teammate.

    Page typeMini-cart needed here?Fragments call by default?Cost when it fires
    Shop / product archiveYesYesJustified — keep it live
    Single product pageYesYesJustified — keep it live
    Cart pageYesYesJustified — never dequeue here
    Checkout pageYesYesJustified — never dequeue here
    Home pageUsually (header badge)YesUse ESI, not a raw call
    Blog post / articleRarelyYesWasted PHP worker
    About / Contact pageNoYesWasted PHP worker
    Landing / policy pagesNoYesWasted PHP worker
    WooCommerce cart fragments coverage vs. need, by page type. The rows marked “wasted” are what the fix removes.

    In practice, most stores find that the majority of their page views are exactly the rows marked “wasted” — content, informational, and policy pages that never show a functioning cart. That is why scoping the script pays off: you are removing the call from the pages people read most, while keeping it exactly where shopping happens.

    WooCommerce cart fragments: before vs after the fix Before the fix, every page fires an uncacheable wc-ajax get_refreshed_fragments call that consumes a PHP worker. After the fix, content pages serve from cache with zero PHP while the cart and checkout keep a live mini-cart via LSCache ESI. WooCommerce Cart Fragments: Before vs After Where the uncacheable wc-ajax call fires — and what the fix removes BEFORE — sitewide uncached call About page wc-ajax PHP Blog post wc-ajax PHP Contact page wc-ajax PHP Product page wc-ajax PHP Every page runs PHP – workers burned -> AFTER — scoped + LSCache ESI About page cached 0 PHP Blog post cached 0 PHP Contact page cached 0 PHP Cart / Checkout ESI live cart Content cached – cart stays live via ESI AHosting.net · LiteSpeed + LSCache · WooStart = 25 entry processes

    How to Fix WooCommerce Cart Fragments in Four Steps

    To fix WooCommerce cart fragments, dequeue the wc-cart-fragments script everywhere except cart and checkout, enable LSCache ESI so the mini-cart stays live on cached pages, then verify in DevTools that no wc-ajax call fires off-cart. The four steps below do exactly that, in order.

    First, Confirm the Symptom in the Network Panel

    First, open a page on your store that has no cart on it — your About page is ideal. Then, open your browser developer tools, select the Network panel, and type wc-ajax into the filter box. Reload the page. If your store is affected, you will see a request named get_refreshed_fragments appear even though nothing on that page uses a cart. That single request is the symptom you are about to eliminate. If it does not appear on the first load, add one product to your cart, reload the About page, and it will fire because a cart session now exists.

    Second, Dequeue wc-cart-fragments Outside Cart and Checkout – The Forgotten Step to Fix WooCommerce Cart Fragments

    Next, add the following snippet to your child theme functions.php. Specifically, it removes the fragments script on every page except the cart and checkout, so the AJAX call no longer fires on your content pages. Using a child theme matters: editing the parent theme directly means your change is wiped on the next theme update.

    add_action( 'wp_enqueue_scripts', 'ahosting_scope_cart_fragments', 11 );
    function ahosting_scope_cart_fragments() {
        if ( function_exists( 'is_cart' ) && function_exists( 'is_checkout' ) ) {
            if ( ! is_cart() && ! is_checkout() ) {
                wp_dequeue_script( 'wc-cart-fragments' );
            }
        }
    }

    Then save the file. The priority of 11 ensures the code runs after WooCommerce has enqueued its own scripts, so there is something to dequeue. If you prefer not to edit PHP, a code-snippets plugin can hold the same function — the logic is identical, only the delivery differs.

    Third, Enable LSCache ESI to Keep the Mini-Cart Live on Cached Pages

    On a LiteSpeed host, enable ESI next. Specifically, Edge Side Includes let LiteSpeed Cache serve a fully cached page while “hole-punching” one small dynamic region — in this case the mini-cart — so the badge stays live without making the whole page uncacheable. In the LiteSpeed Cache plugin, open Cache → ESI, turn Enable ESI on, and save. This is the move that lets you keep a live cart on your home and shop pages without paying for a sitewide uncached fragments call. Fortunately, AHosting runs LiteSpeed Web Server with LSCache available, so ESI is a server-native option rather than a workaround.

    Moreover, ESI and the dequeue snippet are complementary, not redundant. The snippet removes the call where the cart is never shown; ESI keeps the cart live and cached where it is shown. Together they close both halves of the problem, which is why a LiteSpeed store should apply both rather than choosing one. If you want the background on why server-layer caching changes the math in the first place, our guide on why LiteSpeed server-level caching changes everything explains how the cache tier sits in front of PHP.

    Fourth, Verify the Fix Without Breaking the Cart

    Finally, prove it. Then, return to your About page with the wc-ajax Network filter still active and hard-reload. The get_refreshed_fragments request should no longer appear. Then navigate to a shop or product page, click Add to Cart, and confirm the mini-cart count still increments. If the call is gone from your content pages and the cart still updates where it should, the fix is complete and correct. The checker below turns this into a quick self-diagnosis.

    Dequeue Script vs. LSCache ESI: Which Method Does What To Fix WooCommerce Cart Fragments

    Because the two methods are easy to confuse, here is the direct comparison. Notably, most stores need both, but understanding which lever does what helps you decide the minimum change for your setup.

    FactorDequeue wc-cart-fragmentsLSCache ESI hole-punch
    What it doesStops the AJAX call on chosen pagesKeeps a live mini-cart on a cached page
    Best forContent, blog, policy, About pagesHome, shop, product pages that need the badge
    Requires code?Yes — a small functions.php snippetNo — a LiteSpeed Cache toggle
    Requires LiteSpeed?No — works on any hostYes — LiteSpeed Web Server + LSCache
    Effect on PHP workersRemoves wasted uncached callsServes the page from cache, punches one region
    Risk if misappliedDequeuing on cart/checkout breaks the cartNone — falls back to normal caching
    Two levers, two jobs. On a LiteSpeed host, apply both; on a non-LiteSpeed host, the dequeue snippet is the primary fix.

    Cart Fragments Cost in PHP Workers on AHosting

    Specifically, the reason this fix matters on shared hosting is that every uncached fragments call consumes one CloudLinux entry process — one PHP worker slot — for the duration of the request. AHosting allocates entry processes by plan tier and, unlike hosts that hide these numbers, publishes them so you can size a plan against real concurrency math. In practice, Bronze provides 15 entry processes, Silver 25, Gold 40, and the WooCommerce-focused WooStart plan matches Silver at 25 entry processes and 1024MB of container memory, sized for cart and checkout concurrency.

    The Concurrency Math: Worker Cost by Visitor Load

    As a result, the worker cost of unscoped cart fragments scales with how many people are browsing your non-cart pages at once. The table below shows the concurrency math. It is the citable figure to keep in mind when deciding whether this is a five-minute cleanup or a genuine capacity issue.

    Concurrent visitors on content pagesFragments calls in flight (unscoped)Workers held on WooStart (25 EP)After scoping the script
    5Up to 5Up to 5 of 250 — pages serve from cache
    10Up to 10Up to 10 of 250 — pages serve from cache
    20Up to 20Up to 20 of 25 (queue risk)0 — pages serve from cache
    25+25+Ceiling hit — queue or 5030 — pages serve from cache
    Uncached cart fragments worker cost by concurrency on an AHosting WooStart plan (25 entry processes). Scoping the script drops the content-page cost to zero because those pages serve from cache with no PHP.

    Notably, when a burst of visitors on content pages approaches your entry-process ceiling, CloudLinux LVE briefly queues the excess rather than rejecting it instantly, and only requests that cannot drain in time receive a 503. Cached pages never enter that scenario at all, which is precisely why removing the wasted fragments call is worth doing before you consider a plan upgrade. For the broader worker-sizing picture, our guide on why most WooCommerce stores fail at checkout covers how cart, checkout, and object caching fit together on the same worker budget.

    How You Fix WooCommerce Cart Fragments – Our Diagnostic Checker

    Use the checker below to decide which fix your store needs. Answer three quick questions about your setup and it will recommend whether to dequeue the script, enable ESI, or do both.

    Cart Fragments Diagnostic Checker

    Three questions. Get the exact fix for your store.

    1. Is your store on a LiteSpeed host with LSCache?

    2. Do most of your page views land on content pages (blog, About, policy)?

    3. Do you need a live mini-cart badge in the header on those cached pages?


    Need guaranteed workers? See VPS hosting

    A Practical Checklist: Is Your WooCommerce Store Cart-Fragments-Clean?

    Before you call this done, run through the short checklist below. Each item corresponds to a step above, so if any line fails, you know exactly where to return.

    • Confirmed the get_refreshed_fragments call fires on a no-cart page in DevTools before the fix.
    • Added the dequeue snippet to the child theme functions.php, not the parent theme.
    • Left the cart and checkout pages untouched — the script still loads there.
    • Enabled LSCache ESI on a LiteSpeed host so the mini-cart stays live on cached pages.
    • Re-checked the About page: no wc-ajax call appears in the Network panel.
    • Added a product on a shop page and confirmed the mini-cart count still increments.
    • Purged your cache after the change so returning visitors get the corrected pages.

    Ultimately, a store that passes every line above is no longer paying the sitewide fragments tax. Specifically, your content pages serve from cache with no PHP worker consumed, your cart stays live where shoppers need it, and your entry-process budget goes to genuine checkout traffic instead of background AJAX. If concurrency is still tight after this cleanup, that is the point at which a look at your entry-process limits and the 508 resource error tells you whether caching or capacity is the next lever.

    Frequently Asked Questions About How to Fix WooCommerce Cart Fragments

    What is the wc-ajax=get_refreshed_fragments request and why does it slow every page?

    Specifically, get_refreshed_fragments is a WooCommerce AJAX call that refreshes the mini-cart count, and by default it fires on every page on your site, including pages with no cart. Because it hits admin-ajax and cannot be full-page cached, each call consumes a PHP worker and adds latency to the initial response. The threshold table in this guide shows exactly which page types need it and which do not.

    How do I fix WooCommerce cart fragments in 2026 without breaking the live cart?

    Fortunately, you dequeue the wc-cart-fragments script everywhere except the cart and checkout pages using a short child-theme functions.php snippet, then verify in the Network panel that no wc-ajax call fires on other pages. On a LiteSpeed host you additionally enable LSCache ESI so the mini-cart stays live while the page stays cached, which keeps the cart working on shop pages without the sitewide AJAX call.

    Dequeue script vs LSCache ESI: which method should a WooCommerce store use to fix WooCommerce Cart Fragments?

    In practice, the two methods solve different halves of the problem and are strongest together. Dequeuing wc-cart-fragments stops the AJAX call on pages that never show a cart, while LSCache ESI hole-punches the mini-cart on pages that do, so the surrounding page still serves from cache. The comparison table in this guide breaks down when each method is enough on its own.

    Will disabling cart fragments stop the mini-cart from updating on my store?

    Generally, no, provided you scope the fix correctly. Dequeuing the script only on pages that have no cart leaves the cart and checkout pages untouched, and enabling LSCache ESI keeps the mini-cart count live on shop and product pages. The verification step in this guide has you add a product to the cart to confirm the count still increments after the fix.

    Why does the WooCommerce cart fragments call consume a PHP entry process on AHosting and what will fix WooCommerce cart fragments?

    Specifically, the wc-ajax request bypasses full-page cache because it must return live cart data, so it runs PHP on every hit and consumes one CloudLinux entry process per request. AHosting publishes its per-plan entry-process counts openly, with WooStart set at 25 to match Silver-level concurrency, so you can size the impact of uncached cart traffic against real numbers rather than guesswork.

    Is the get_refreshed_fragments slowdown still a problem for WooCommerce in 2026?

    Yes, because the sitewide cart fragments behavior remains a WooCommerce default in 2026 and is not removed by full-page caching alone. Any store that has not scoped the script or enabled ESI still pays the uncached-AJAX cost on every page load. The diagnostic checker in this guide confirms in seconds whether your store is affected.

    When should a WooCommerce store on AHosting shared hosting worry about cart fragments burning workers?

    Typically, the impact becomes material once concurrent visitors approach your plan's entry-process ceiling, because each uncached fragments call holds a worker that a cached page would not. On an AHosting WooStart plan at 25 entry processes, a burst of shoppers browsing non-cart pages can queue behind fragments calls that add nothing. The worker-cost table in this guide shows how the math changes as concurrency rises.

    Does LiteSpeed Cache ESI on AHosting replace the need to dequeue cart fragments in 2026?

    Notably, ESI reduces the cost but does not fully replace scoping the script. ESI lets a cached page carry a live mini-cart hole-punch, yet the fragments AJAX still fires where the script is loaded. Combining ESI with a dequeue on cart-free pages removes both the wasted call and keeps the live cart, which is why this guide recommends both on a LiteSpeed host.

    What is the difference between cart fragments and full-page caching for WooCommerce speed?

    In contrast to full-page caching, which serves a whole static page with zero PHP, cart fragments deliberately run live PHP to keep dynamic cart data current. Full-page cache cannot cover the fragments call because the response must change per session. Understanding this split is what lets you cache aggressively while still hole-punching only the truly dynamic mini-cart, as the guide explains.

    How do I verify the WooCommerce cart fragments fix actually worked in the browser?

    First, open your browser DevTools Network panel, filter for wc-ajax, and reload a page with no cart, such as your About page. After the fix, no get_refreshed_fragments request should appear there, while adding a product on a shop page still updates the mini-cart. The step-by-step verification in this guide walks through both checks so you confirm the call is gone without breaking the cart.

    July 28, 2026
  • WooCommerce Slow Checkout: How to Find Where the Seconds Actually Go

    WooCommerce Slow Checkout: How to Find Where the Seconds Actually Go

    • Why WooCommerce Slow Checkout Is a Measurement Problem, Not a Plugin Problem
    • The Four Layers Where WooCommerce Slow Checkout Time Actually Goes
      • First Layer: Network and TLS
      • Second Layer: Server Response and Time to First Byte
      • Third Layer: PHP Execution and Database Work
      • Fourth Layer: Payment Gateway Round-Trip
    • The AHosting Avoid WooCommerce Slow Checkout Latency Budget
    • How to Measure Each Layer: Three Commands and One Header
      • First Method: The curl Timing Breakdown
      • Second Method: The Server-Timing Response Header
      • Third Method: The MySQL Slow Query Log
    • WooCommerce Slow Checkout Under Load: The Worker Math
    • Reading Your Results: What Each Failing Layer Means
    • Where AHosting Fits Once You Have a Diagnosis
    • A Practical Checklist: Is Your WooCommerce Slow Checkout Diagnosis Complete?
    • Conclusion: Measure First, Then Buy
    • Frequently Asked Questions About WooCommerce Slow Checkout
      • Why is my WooCommerce slow checkout worse than my product pages?
      • How do I measure where WooCommerce slow checkout time is actually going?
      • What counts as an acceptable checkout time in 2026, and what does AHosting target?
      • TTFB versus total checkout time: which should I diagnose first?
      • Server-Timing header versus Query Monitor for diagnosing WooCommerce slow checkout?
      • Checkout runs fast at night but slows at noon, so what does that mean?
      • What does a two-minute checkout hang followed by a 503 indicate?
      • How many concurrent checkouts does an AHosting WooStart plan sustain in 2026?
      • What TTFB does AHosting measure on uncached WooCommerce checkout requests?
      • Does the MySQL slow query log show WooCommerce checkout queries specifically?
    TL;DR

    WooCommerce slow checkout is a measurement problem before it is a hosting problem. Split one request into four layers — network, server, database, gateway — then measure each. Whichever breaches its threshold is the one to fix.

    Why WooCommerce Slow Checkout Is a Measurement Problem, Not a Plugin Problem

    Most advice about WooCommerce slow checkout begins with a fix. Install a cache plugin, trim your checkout fields, upgrade your hosting. However, every one of those recommendations assumes somebody has already identified which part of the request is slow — and on most stores, nobody has.

    Listen: why checkout exposes your true uncached server speed, and the three commands that show exactly where the seconds go. By Matt Chrust, Director of Business Development, AHosting.

    The reason this matters is that a checkout request is not a single event. Instead, it is four sequential stages, each with its own failure mode and its own remedy. Consequently, a store owner who buys a bigger hosting plan to solve a payment-gateway delay has spent money without moving the number, while a store owner who trims checkout fields to solve an entry-process ceiling has done the same.

    Our companion guide to WooCommerce hosting requirements covers what a store environment needs. This guide covers something different and prior to it: how to find out which requirement your store is currently failing. Furthermore, every measurement below runs on a live store without installing anything.

    The Four Layers Where WooCommerce Slow Checkout Time Actually Goes

    Before measuring anything, it helps to know what you are dividing. Accordingly, a checkout request decomposes into four layers that occur in strict order.

    First Layer: Network and TLS

    Initially, the shopper’s browser resolves your domain, opens a TCP connection, and negotiates TLS. Notably, none of this involves WordPress or WooCommerce at all. Nevertheless, on a misconfigured DNS setup or a distant origin server, this layer alone can consume 300 milliseconds before your server has seen a single byte of the request.

    Second Layer: Server Response and Time to First Byte

    Subsequently, your web server accepts the request and hands it to a PHP process. Critically, this is where checkout diverges from every other page on your store. Because cart and checkout pages bypass full-page caching by design, there is no finished HTML file to send. Instead, the server must build the page from scratch on every single request, which means time to first byte on checkout reflects your true uncached server speed.

    Third Layer: PHP Execution and Database Work

    Meanwhile, inside that PHP process, WordPress bootstraps, WooCommerce loads its session, recalculates the cart, applies tax rules, and writes order records. Specifically, this layer is where autoloaded options, unindexed queries, and legacy order storage inflate response time. Moreover, it is the layer most sensitive to plugin quality, since every active plugin runs during checkout.

    Fourth Layer: Payment Gateway Round-Trip

    Finally, when the shopper submits payment, your server makes a blocking outbound call to the payment processor and waits. Importantly, this time belongs to the gateway, not to your host. Therefore, no hosting upgrade will shorten it, and diagnosing it as a server problem wastes both money and attention.

    This layer is also the one most often misattributed, because the shopper experiences it as your store being slow. Meanwhile, the delay is happening on infrastructure you neither own nor control. Notably, real-time shipping quotes and address-validation services behave identically: each is a blocking outbound request that pauses PHP execution until the third party answers.

    Consequently, the diagnostic rule for the fourth layer is different from the other three. Rather than measuring on your server, read the latency figures in your processor’s own dashboard and compare them against the request timestamps in your order log. Should the two agree, the delay is external and your hosting is not the variable to change.

    The AHosting Avoid WooCommerce Slow Checkout Latency Budget

    Given four layers, the practical question becomes how much time each is allowed to consume. Accordingly, the table below sets a target and a failure threshold for each layer, together with the instrument that measures it. Overall, a store whose four layers all sit inside target completes checkout comfortably under two seconds.

    LayerTargetInvestigate aboveMeasure with
    Network and TLSUnder 150 ms300 mscurl timing breakdown
    Server response (TTFB)Under 800 ms1,200 mscurl time_starttransfer
    PHP and databaseUnder 600 ms1,000 msServer-Timing header
    Payment gatewayUnder 1,000 ms2,000 msGateway dashboard logs
    The AHosting WooCommerce Checkout Latency Budget — per-layer thresholds for an uncached checkout request.

    For context, AHosting measures roughly 16 milliseconds time to first byte on cached requests across its LiteSpeed platform, against 700 to 1,400 milliseconds on uncached WordPress requests. Consequently, the uncached figure is the one that matters for checkout, and it is why the second layer carries the widest budget in the table.

    How to Measure Each Layer: Three Commands and One Header

    First Method: The curl Timing Breakdown

    To begin, curl reports the exact boundary between network time and server time. Specifically, its --write-out option exposes a set of timing variables documented in the official curl manual page. Run this against your own checkout URL:

    curl -o /dev/null -s -w "dns: %{time_namelookup}\ntcp: %{time_connect}\ntls: %{time_appconnect}\nttfb: %{time_starttransfer}\ntotal: %{time_total}\n" https://yourstore.com/checkout/

    Interpreting the output is straightforward. Namely, the gap between tls and ttfb is your server’s thinking time, and everything before tls is network. Additionally, run the command five times and take the median, because a single sample tells you nothing about a store under real load.

    Second Method: The Server-Timing Response Header

    Next, once you know the server is slow, the Server-Timing header tells you what it was doing. As MDN’s Server-Timing reference describes, this response header surfaces backend metrics such as database read and write time directly in browser developer tools. Consequently, you can attribute server time to specific internal operations on real shopper requests rather than on your own admin session.

    This distinction matters more than it first appears. Because an administrator session is never cached and loads the full admin bar, profiling checkout while logged in systematically overstates the problem. Therefore, always measure as an anonymous shopper.

    Third Method: The MySQL Slow Query Log

    Finally, when the third layer is the offender, the database itself will name the queries. However, one default defeats most attempts at this. According to the MySQL 8.0 slow query log documentation, long_query_time defaults to 10 seconds — a threshold no checkout query will ever cross, which is why store owners enable the log and see nothing.

    Instead, lower the threshold for a short diagnostic window. Notably, the value accepts microsecond resolution, so 0.2 seconds is a practical setting for checkout work. Afterward, restore the default, because a permanently low threshold generates substantial log volume on a busy store.

    WooCommerce Slow Checkout Under Load: The Worker Math

    So far every measurement has assumed one shopper. Under promotional traffic, though, a second constraint appears. Because each uncached checkout occupies one entry process for its full duration, your plan’s entry-process allocation sets a hard ceiling on simultaneous checkouts.

    AHosting planEntry processesCheckouts per minute at 2sCheckouts per minute at 4s
    Bronze15450225
    Silver25750375
    WooStart25750375
    Gold401,200600
    The AHosting Checkout Worker Math — sustainable concurrent checkout throughput by entry-process allocation.

    Notice what the two right-hand columns imply. Namely, halving your checkout duration doubles your throughput without changing plans, which is why measurement precedes purchasing. Furthermore, when every entry process is occupied, additional requests queue rather than fail immediately — and LiteSpeed on AHosting holds those queued connections for 120 seconds before returning an error.

    That queue behavior explains a symptom store owners frequently misreport. Specifically, a checkout that spins for roughly two minutes and then dies is not a slow checkout at all; it is a saturated one. Our guides to PHP workers and 503 errors and to the 508 resource limit reached message cover that failure mode in detail.

    Reading Your Results: What Each Failing Layer Means

    Having measured all four layers, the diagnosis follows mechanically. Enter your figures below to identify which layer is outside budget.

    Checkout Latency Diagnostic

    Enter your measured values in milliseconds. Leave a field blank if you have not measured it.

    Two readings deserve special comment. Firstly, a healthy server response paired with poor total time means the delay is in front-end rendering, not hosting. Secondly, a time-of-day pattern — fast overnight, slow at noon — almost always indicates resource contention rather than code, which is why measuring during your busiest hour is essential.

    Where AHosting Fits Once You Have a Diagnosis

    Only after measurement does an infrastructure decision make sense. Specifically, if the second layer is your bottleneck, the fix is a faster uncached environment; our WooCommerce hosting plans run LiteSpeed with checkout exclusion rules applied at server level rather than plugin level, which is what keeps uncached response times inside the budget above.

    Similarly, if the worker math rather than the latency is your constraint, more entry processes is the answer, whether through a larger shared plan or a move to VPS hosting. Meanwhile, stores whose database layer has outgrown shared resources entirely benefit from a dedicated server. For everything else, our general WordPress hosting environment carries the same LiteSpeed and CloudLinux foundation. Additionally, our guide to LiteSpeed hosting explains why the server layer behaves differently under mixed cached and uncached traffic.

    It is worth restating what WooCommerce itself expects. According to the official WooCommerce server environment documentation, a production store needs a modern PHP release, MySQL 8.0 or MariaDB 10.4 and above, HTTPS throughout, and object caching support. Nevertheless, meeting those requirements is a floor, not a diagnosis — which is precisely why measurement comes first.

    A Practical Checklist: Is Your WooCommerce Slow Checkout Diagnosis Complete?

    • Measured as an anonymous shopper, never while logged in as administrator
    • Took the median of at least five curl runs rather than a single sample
    • Ran the measurement during your busiest hour, not overnight
    • Separated network time from server time using the curl timing breakdown
    • Confirmed the checkout URL returns an uncached response, not a cached one
    • Lowered long_query_time before reading the slow query log
    • Checked payment gateway latency in the processor dashboard, not on your server
    • Compared concurrent checkout demand against your plan’s entry-process allocation

    Conclusion: Measure First, Then Buy

    WooCommerce slow checkout resists generic advice because the same symptom has four unrelated causes. Consequently, the store owner who measures first spends once and fixes the right thing, while the one who guesses often spends repeatedly without moving the number at all.

    Ultimately, the four layers, the latency budget, and the worker math in this guide reduce a vague complaint to a specific number with a specific owner. Afterward, the infrastructure conversation becomes simple, because you already know which layer you are buying against.

    Frequently Asked Questions About WooCommerce Slow Checkout

    Why is my WooCommerce slow checkout worse than my product pages?

    Specifically, product pages are served from full-page cache as finished HTML, while cart and checkout pages must bypass that cache entirely because their contents are unique to each shopper. Consequently, checkout exposes your server’s raw uncached response time, which product pages hide behind cached files.

    How do I measure where WooCommerce slow checkout time is actually going?

    In practice, you split one checkout request into four measurable segments using three tools. Notably, curl reports DNS, TCP, TLS and time-to-first-byte; the Server-Timing response header reports backend work; and the MySQL slow query log reports database time. Therefore, whichever segment exceeds its threshold is your bottleneck.

    What counts as an acceptable checkout time in 2026, and what does AHosting target?

    Generally, a healthy uncached checkout response completes server-side work in under 800 milliseconds, with total interaction under two seconds. Furthermore, AHosting measures roughly 16 milliseconds time-to-first-byte on cached requests and 700 to 1,400 milliseconds on uncached WordPress requests across its LiteSpeed platform.

    TTFB versus total checkout time: which should I diagnose first?

    Initially, diagnose time-to-first-byte, because it isolates server-side work from everything the browser does afterward. Subsequently, if TTFB is healthy but total time is poor, the delay lives in front-end rendering or third-party scripts rather than in your hosting environment.

    Server-Timing header versus Query Monitor for diagnosing WooCommerce slow checkout?

    Essentially, Query Monitor profiles a request in your own browser session as a logged-in administrator, which distorts checkout behavior. Conversely, the Server-Timing header reports on real shopper requests in production without a plugin, making it the more accurate instrument for live checkout diagnosis.

    Checkout runs fast at night but slows at noon, so what does that mean?

    Typically, a time-of-day pattern points to resource contention rather than code. Specifically, your account is hitting its CPU, entry-process or I/O ceiling during peak hours while the same code runs unobstructed overnight. Therefore, measure during your busiest hour, never at midnight.

    What does a two-minute checkout hang followed by a 503 indicate?

    Ordinarily, that signature means every entry process is occupied and the request queued until the web server timed out. Notably, LiteSpeed on AHosting holds queued connections for 120 seconds before returning 503, which produces exactly this long hang then hard failure pattern.

    How many concurrent checkouts does an AHosting WooStart plan sustain in 2026?

    Practically, the WooStart plan allocates 25 entry processes, so it sustains 25 simultaneous uncached checkout requests. Consequently, at a two-second checkout that clears roughly 750 checkouts per minute, while a four-second checkout halves that figure to around 375.

    What TTFB does AHosting measure on uncached WooCommerce checkout requests?

    Currently, AHosting measures approximately 16 milliseconds time-to-first-byte for cached responses and 700 to 1,400 milliseconds for uncached WordPress responses on its LiteSpeed infrastructure. Additionally, checkout always falls in the uncached range because cart pages are excluded from full-page caching by design.

    Does the MySQL slow query log show WooCommerce checkout queries specifically?

    Indeed, it does, provided you lower the threshold first. Importantly, MySQL defaults long_query_time to 10 seconds, which no checkout query will ever reach. Therefore, set it to 0.2 seconds during a diagnostic window to capture the queries that actually delay checkout.

    July 27, 2026
  • WooCommerce Hosting 2026: Why Most Stores Fail at Checkout (And How to Fix It)

    WooCommerce Hosting 2026: Why Most Stores Fail at Checkout (And How to Fix It)

    • Introduction: The WooCommerce Hosting 2026 Trap
    • What WooCommerce Actually Demands from WooCommerce Hosting
      • The Caching Divide: Blogs vs. Stores
    • PHP Workers: WooCommerce Hosting Factor 1
      • How to Check Your Current PHP Worker Count
    • Object Caching: WooCommerce Hosting Factor 2
      • What Redis Actually Does for WooCommerce
    • Checkout Isolation: WooCommerce Hosting Factor 3
    • Database Performance: WooCommerce Hosting Factor 4
      • The Autoload Trap
      • MySQL Version and Storage Engine
      • When to Upgrade WooCommerce Hosting from Shared to VPS
    • Resource Isolation: WooCommerce Hosting Factor 5
      • How CloudLinux Protects Your WooCommerce Store
    • The Bad-Neighbor Effect on WooCommerce Sales
      • WooCommerce Hosting: Shared vs. WooCommerce Plan vs. VPS Comparison
    • AHosting WooCommerce Hosting: 22 Years of Store Performance
    • A Practical WooCommerce Hosting Checklist: Is Your Store 2026-Ready?
    • Conclusion: WooCommerce Hosting 2026 Starts at the Infrastructure
    TL;DR
    WooCommerce hosting 2026 demands more than a standard WordPress plan. Your store needs sufficient PHP workers, Redis object caching, server-level checkout bypass rules, and CloudLinux resource isolation to handle checkout traffic without losing sales.
    Listen to WooCommerce Hosting in 2026, Part of the Ahosting WordPress Podcast Series

    Introduction: The WooCommerce Hosting 2026 Trap

    The WooCommerce hosting 2026 landscape has a trap that costs store owners money every day — and most never notice it. Specifically, the average online store now runs 25 to 40 plugins, serves high-resolution product images, processes payments through live third-party gateways, and competes for shoppers who expect checkout to complete in under two seconds. Yet most of those stores run on a generic shared hosting plan designed for a blog written in 2018.

    The result is predictable. Cart abandonment rates climb as checkout slows under promotional traffic. Product pages fail Google’s Core Web Vitals thresholds, dragging rankings below competitors. AI search engines like ChatGPT and Perplexity skip over slow-loading stores when assembling product recommendations. Furthermore, a single bad actor on the same shared server can consume the CPU your store depends on during a flash sale — and your hosting panel will show no warning at all.

    (more…)
    May 25, 2026
Ahosting Logo

Hosting

  • WordPress Hosting
  • Web Hosting
  • FFmpeg Hosting
  • WooCommerce Hosting
  • Reseller Hosting
  • VPS Hosting
  • Dedicated Server

Domain

  • Register a Domain
  • Domain Transfer
  • Premium SSL Certificate

Support

  • Knowledge Base
  • Abuse Report
  • Submit A Ticket

Company

  • Compare Hosts
  • About Us
  • Datacenter
  • Contact Us
  • Blog
  • Sitemap

Legal

  • Privacy Policy
  • Terms of Service
  • Acceptable Use Policy
  • Service Legal Agreement
  • Resource Abuse Policy
  • Hosting
    • WordPress Hosting
    • Web Hosting
    • FFMpeg Hosting
    • WooCommerce Hosting
    • Reseller Hosting
    • VPS Hosting
    • Dedicated Server
  • Domain
    • Register a Domain
    • Domain Transfer
    • Premium SSL Certificate
  • Support
    • Knowledge Base
    • Abuse Report
    • Submit A Ticket
  • Company
    • About Us
    • Datacenter
    • Contact Us
    • Blog
    • Sitemap
  • Legal
    • Privacy Policy
    • Terms of Service
    • Acceptable Use Policy
    • Service Legal Agreement
    • Resource Abuse Policy

Copyright © 2026 All Rights Reserved

Facebook X/Twitter Instagram LinkedIn YouTube