Skip to main content
Agency Program Get 2× more leads and save 50% on hosting. Built for agencies ready to grow. Book a call

WooCommerce Checkout Slow? 14 Fixes, From Server to Checkout Form

A slow WooCommerce checkout is usually a server problem, not a theme problem.

VS
Vikas Singhal
Founder, InstaWP
Updated Sep 1, 2026 33 min read

A slow WooCommerce checkout is usually a server problem, not a theme problem. Cart and checkout are the only pages on your store that cannot be cached, so every click is built from scratch by PHP and your database while the shopper waits. This guide shows you how to tell whether the delay is coming from your host or your store, then works through 14 fixes, starting with the server layer that most checkout guides skip.

Key Takeaways

  • Checkout is uncacheable by design. WooCommerce tells you to exclude Cart, Checkout and My Account from page caching because they show data specific to one shopper. Your page cache and CDN cannot help there.
  • That makes checkout a direct measurement of your origin server. Every checkout click runs PHP and queries the database live.
  • Add to cart is the same problem in miniature. It is an AJAX request that skips the cache, writes session data and recalculates totals.
  • Concurrency, not raw speed, is what breaks during a sale. One PHP worker serves one checkout at a time. Run out of workers and shoppers queue.
  • Faster cores are the part caching cannot replace. On our new-generation servers we measured server-side page generation up to 1.7 times faster on identical software, and the biggest gains landed on pages that are always built fresh.
  • Half the fixes are yours, not your host’s. Fewer fields, guest checkout, express payments and a lean checkout template still matter. Diagnose first, then fix in order.

Why a Slow WooCommerce Checkout Costs You Orders

Most store owners spend their optimisation budget on product pages, homepage banners and sales funnels. Checkout gets the leftovers. That is backwards, because checkout is the only page on the store where every visitor already wants to give you money.

It is also the page where a delay is least forgivable. A shopper who waits three seconds for a product image will usually wait. A shopper who has entered a card number and is staring at a spinner starts to wonder whether the payment went through. If you want to speed up WooCommerce checkout, you are removing doubt at the exact moment doubt is most expensive.

WooCommerce purchase funnel with the checkout step highlighted as the slowest and most fragile stage
Checkout is the last step before revenue and the only one that cannot be cached.

Baymard Institute, which aggregates 50 separate studies, puts the average documented cart abandonment rate at 70.22%. Filter out the shoppers who were only browsing and the top reasons look like this.

Why Shoppers Abandon Checkout

Some checkout problems are operational. Others can be fixed directly on your WooCommerce site.

Reason for abandoning at checkout Share of shoppers Fixable on your side?
Extra costs too high (shipping, tax, fees) 40% Pricing and shipping policy
Delivery too slow 20% Fulfilment
Did not trust the site with card details 19% Trust signals, SSL, layout
Site made me create an account 18% Yes, one setting
Checkout was too long or complicated 17% Yes, fields and steps
Website had errors or crashed 17% Yes, hosting and plugins

Source: Baymard Institute, cart abandonment research, last updated September 2025.

Look at the bottom three rows. Roughly one in six abandonments comes from a checkout that is too long, and another one in six from a site that errored or fell over. Those two are not marketing problems. One is a form design problem and one is an infrastructure problem, and this guide covers both.

Why WooCommerce Checkout Cannot Be Cached

This is the single most useful thing to understand about WooCommerce performance, and most checkout guides skip it.

A page cache works by storing one finished copy of a page and handing that same copy to everyone. That is safe for a product page, a blog post or a homepage, because every visitor should see the same thing. It is not safe for a cart, because your cart is not my cart. WooCommerce’s own documentation is explicit about this: Cart, My Account and Checkout must be excluded from caching because they “stay dynamic since they display information specific to the current customer and their cart”.

Cached WooCommerce pages served from the edge while cart and checkout pages bypass the cache and hit the origin server
Product and content pages are served from cache. Cart and checkout bypass it and hit your origin server every single time.

So your store runs on two different performance systems at once, and they have almost nothing to do with each other.

TWO PATHS THROUGH A WOOCOMMERCE STORE Shopper browser request CDN / page cache home, shop, product, blog Served in milliseconds No PHP, no database Cache bypassed cart, checkout, my account Your origin server PHP + database, every time Caching makes your catalogue fast. It does nothing for the page where the money changes hands, which is why checkout speed is a direct read on the server underneath your store.

Three consequences follow, and they explain most of the confusion around WooCommerce slow checkout complaints.

  1. A great PageSpeed score on your homepage tells you nothing about checkout. The homepage is cached. Checkout is not. Test the checkout URL specifically, logged out and with an item in the cart.
  2. Adding a CDN will not fix a slow checkout. A CDN accelerates cacheable assets and cacheable HTML. Checkout is neither. It will speed up everything around checkout, which is worth having, but the checkout page itself still comes from your origin.
  3. Checkout speed is close to a pure measurement of your host. Strip out the cache and what is left is PHP execution speed, database speed, and how many requests your server can handle at once.

That is not an argument for ignoring the store-side fixes. Twelve of them are further down this page and several are worth more than any hardware change. It is an argument for knowing which half of the problem you are looking at before you start.

Is It Your Server or Your Store? A 60-Second Diagnosis

Run this before you install anything. Open your store in a private browser window, add one product to the cart, and load the checkout page. In your browser’s developer tools, Network tab, look at the first request for the checkout document and read two numbers: Waiting (TTFB) and Content Download.

Time to First Byte on an uncached checkout page is the clearest signal you have. It is the time your server spent thinking before it sent a single byte. Then match what you see against this table.

Is It Your Server or Your Store?

Match what you see in the Network tab against this table before you install anything.

What you observeMost likely causeWhere to fix it
Checkout TTFB above 800ms, homepage TTFB fineUncached page generation is slow: PHP, database or an overloaded shared serverServer layer
Everything is slow, including cached pagesFront-end weight: theme, images, third-party scriptsStore layer
Fast normally, unusable during a sale or campaignPHP worker exhaustion. Requests are queuing, not running slowlyServer layer
Add to cart takes seconds, page loads are fineAJAX round trip, cart fragments or a bloated session and options tableBoth
Checkout is fine until you enter an addressA live shipping or tax rate API call blocking the requestStore layer
Checkout stalls only on the final Place Order clickPayment gateway round trip, or a synchronous email or CRM hook on order creationStore layer
Random 502, 504 or connection reset at checkoutPHP timeout, memory limit hit, or the process manager killing workersServer layer

Highlighted rows point at the server layer. The rest are yours to fix inside the store.

WooCommerce checkout request travelling from the browser to the origin server where PHP and the database build the page
Every checkout click is a full round trip to your origin server. Nothing in front of it can shortcut the work.

Do this test on a copy, not on your live store

Diagnosing checkout means placing test orders, toggling plugins and changing settings. None of that belongs on a store taking real money. Pull a copy of your site into a disposable WooCommerce sandbox, break things there, then apply only what worked. If you already run staging, read our guide on how to sync staging to live without overwriting orders before you push anything back.

What Checkout Speed Should You Aim For?

“Fast” needs a number, and the number is not the same for the server and for the browser. Split your targets in two.

Server-side target

  • Checkout TTFB under 600ms is a reasonable working target, and under 200ms is genuinely good. Because the page is uncacheable, this is almost entirely down to your host and your plugin load.
  • Add to cart response under 500ms. This is an AJAX call, so the shopper sees a spinner for exactly this long.

Browser-side target: the current Core Web Vitals

Google’s Core Web Vitals have changed, and a lot of WooCommerce advice still quotes retired metrics. Time to Interactive is no longer a Core Web Vital, and Interaction to Next Paint replaced First Input Delay as a stable metric in 2024. These are the three that count today.

The Three Metrics That Count Today

A lot of WooCommerce advice still quotes retired metrics. These are the current Core Web Vitals.

MetricWhat it measuresGood
LCP (Largest Contentful Paint)How fast the main content appearsUnder 2.5 seconds
INP (Interaction to Next Paint)How fast the page responds when a shopper taps or types200ms or less
CLS (Cumulative Layout Shift)How much the layout jumps around0.1 or less

Source: web.dev, Core Web Vitals. INP replaced FID in 2024, and Time to Interactive is no longer a Core Web Vital. INP is the one to watch at checkout.

INP is the one to watch at checkout. It measures the delay between a shopper typing in a field or hitting Place Order and the screen visibly responding, which is exactly where a heavy checkout page falls apart. Test with PageSpeed Insights, GTmetrix or Lighthouse, and always test the checkout URL itself rather than the homepage.

Why WooCommerce Add to Cart Is Slow

A slow add to cart button is the same problem as a slow checkout, just smaller and more visible. The shopper clicks, a spinner appears, and nothing happens for two or three seconds. It reads as broken even when the order eventually goes through.

Here is what is actually happening in those seconds. Add to cart is not a page load. It is an AJAX request that leaves the browser, skips your page cache entirely, and asks the server to do real work before it can answer.

What one add-to-cart click costs your server
  1. Load WordPress and WooCommerce from scratch. No cache means the full bootstrap runs, including every active plugin.
  2. Read and write the shopper’s session. On a default install this hits the database.
  3. Validate the product. Stock level, variation, price, any dynamic pricing rules.
  4. Recalculate cart totals. Subtotal, tax rules, coupons, and often shipping.
  5. Refresh cart fragments. Many themes fire a second request straight after the first, so the mini-cart in the header updates.

Five pieces of work, every click, on the origin server. If any one of them is slow, the shopper sees the spinner. These are the causes worth checking, in the order they usually bite.

1. Cart fragments firing on every page

WooCommerce refreshes the mini-cart via an AJAX call so a cached header can still show the right item count. On a store with a heavy plugin stack that request can take longer than the add to cart itself, and on many themes it fires on every page, not just product pages. Check whether your theme actually uses a mini-cart. If it does not, that request is pure overhead and can be dequeued outside cart and checkout pages.

2. Session and transient bloat in the database

Every visitor who touches a cart gets a session row. On a busy store those accumulate, and expired transients pile up next to them. Both live in tables that WooCommerce reads on every cart operation. A store with a bloated wp_options table and hundreds of thousands of stale session rows will feel slow at add to cart and nowhere else, which is why it is so often misdiagnosed as a theme problem.

Two fixes: clear expired transients and old sessions on a schedule, and check your autoloaded options. Anything above roughly 1MB of autoloaded data is being read into memory on every single request, cart operations included.

3. Shipping calculated too early

If you use a live carrier rate plugin, adding an item can trigger a call to an external shipping API before the page can respond. Your server is now waiting on someone else’s server. Defer live rate lookups until the shopper has entered an address, and cache the responses.

4. No object cache behind the request

Page caching cannot help an AJAX request, but object caching can. An object cache keeps the results of repeated database queries in memory, so the second time WooCommerce asks for the same product data, tax rate or option value it does not go back to MySQL. This is the one caching layer that genuinely helps cart and checkout, and it is the reason we treat it as the headline win rather than an extra.

The Server Layer: What Actually Makes Checkout Fast

Everything above points the same way. Checkout is built fresh, on your server, for every shopper. So the four things below decide how fast it can possibly be, no matter how lean your checkout template is.

Single-core speed, not core count

WordPress builds a page in a single process, so what you feel is how fast one core can work, not how many there are. A 32-core server does not build your checkout page faster than an 8-core server with quicker cores. It just builds more pages at the same time. This distinction is why “more cores” on a hosting spec sheet often buys you nothing at checkout.

PHP workers are your concurrency ceiling

This is the one that explains the flash sale disaster. Your server runs a fixed number of PHP-FPM workers. Each worker handles one request at a time. Cached pages do not consume a worker, because they never reach PHP. Checkout requests always do.

So if you have four workers and five shoppers hit checkout in the same second, the fifth waits for a worker to free up before their request even starts. From the shopper’s side that is indistinguishable from a slow page. From the server’s side nothing is slow at all, it is just full. Add a marketing email or a Black Friday spike and the queue grows faster than it drains, which is when you start seeing 502 and 504 errors on checkout while the cached homepage stays perfectly fast.

PHP-FPM worker slots filling up while shoppers queue for a WooCommerce checkout
Every checkout occupies one PHP worker for the whole request. Run out of workers and shoppers queue, even though nothing is technically slow.

Database speed and object cache

A checkout page runs a lot of queries: cart contents, product data, tax rates, shipping zones, coupon rules, customer records. An object cache holds the repeat results in memory so the database is asked once instead of ten times. On an uncacheable page this is the closest thing to a page cache you will ever get.

Who else is on your server

On commodity shared hosting, many sites share one PHP pool. Another store’s traffic spike becomes your checkout latency, and there is nothing you can change in WordPress to fix it. True per-site isolation, where your store has its own PHP process pool rather than sharing one, removes an entire category of unexplainable slowdowns.

How InstaWP handles the server layer

Managed hosting for WooCommerce on InstaWP is built around the parts of a store that cannot be cached. Every site gets its own Linux user, its own document root, its own database and its own PHP-FPM pool and socket, so no neighbour shares your worker pool. Every paid plan includes a 512MB PHP memory limit, which matters because WooCommerce with a page builder and a dozen extensions routinely exceeds the 128MB to 256MB that entry-level shared hosts still ship.

Redis-compatible object caching is enabled for you from the Plus plan upward, with no plugin to install or wire up. PHP runs 7.4 through 8.5 and you switch version per site from the dashboard without opening a ticket. Underneath, that is MariaDB 11.4 on Ubuntu 24.04 LTS, nginx at the edge, and NVMe storage.

PHP workers scale with the plan rather than being a hidden limit you discover during a sale:

What Each Plan Buys You at Checkout

More workers means more shoppers served at once. A single page is generated at the same speed on every tier.

PlanPHP workersObject cacheBackups
Starter2Not includedWeekly, 4 retained
Plus3IncludedDaily, 30 retained
Pro4IncludedDaily, 30 retained
Turbo6IncludedDaily, 30 retained
Elite10IncludedDaily, 30 retained

Object cache starts at Plus, which is the first tier where an uncacheable checkout gets real help. See current pricing for the full breakdown.

Worth being precise about that last point, because plenty of hosts are not: a higher plan does not make one checkout page render faster. It lets more shoppers check out simultaneously. If your problem is a slow single request, buy faster hardware or fix your plugins. If your problem only appears under traffic, buy workers.

What we measured on our new-generation servers

We are rolling out a new generation of servers across the fleet, chosen specifically for single-core speed rather than core count: 8-core AMD Zen 5, 64GB DDR5, NVMe SSD on ZFS. We benchmarked them against our previous generation and published the full method in our breakdown of InstaWP’s WordPress managed hosting infrastructure.

Same WordPress version, same plugins, same content, same software on both sides. Measured on the server itself, so no network distance is involved. Median of 25 requests after warm-up.

New-Generation Servers, Measured

Same WordPress version, same plugins, same content, same software on both sides. Measured on the server itself, so no network distance is involved. Median of 25 requests after warm-up.

Page being generatedNew generationPrevious generation
Homepage49ms83ms
Single post49ms81ms
Site search results46ms78ms
wp-admin dashboard39ms67ms
Posts list in admin40ms67ms
Block editor76ms127ms

Server-side page generation, our own measurements on our own production hardware. Headline: up to 1.7 times faster on identical software. Site search is highlighted because it is the closest analogue to a checkout: uncacheable, database-heavy, built fresh every time.

Two things to be straight about. None of those rows is a checkout page. We benchmarked a standard WordPress install, not a WooCommerce store, and we are not going to present one as the other. What the table shows is the cost of building a page that cannot come from cache, which is the same class of work a checkout does. Site search is the closest analogue in the list: uncacheable, database-heavy, generated fresh every time. It came in at 46ms against 78ms.

Second, this is generation time on the server. What your visitor experiences also includes network distance, images and third-party scripts, so nobody should read “1.7 times faster page generation” as “your store loads 1.7 times faster”. And our previous-generation servers carry more live sites than the new ones, so part of that gap is neighbour load rather than silicon. We quote what a site actually experiences on production hardware rather than a lab number.

Check it yourself

You do not have to take our word for any of this. The free WP Benchmark plugin from the WordPress.org repository is the same third-party tool we used, and it is not ours. It scores the new generation 9.9 against 9.2 for the previous one. Install it on your current host and on a trial site, and compare the two numbers directly.

Test your checkout on our hardware before you move anything

Migration in is free and assisted. Your store is copied across and verified before DNS moves, so the live site keeps taking orders the whole time. Most migrations finish in well under an hour, typically around half an hour.

Explore managed hosting for WooCommerce

Tools You Need to Speed Up WooCommerce Checkout

To speed up WooCommerce checkout without guessing, you need three things: somewhere safe to test, a way to measure, and the plugins that do the actual work.

Built on InstaWP (the shortest path from day one)

Launching your WooCommerce store on InstaWP means starting on infrastructure that already handles the uncacheable half of the problem. You get managed hosting for WooCommerce with per-site PHP pools, an included CDN and WAF from the Starter plan, free automatic SSL, PHP 7.4 through 8.5 switchable per site, and Redis-compatible object caching from Plus upward. You also pick your region at creation across the United States, United Kingdom, Germany, Singapore and Australia, rather than being assigned one.

You can also start from a pre-built WooCommerce template that comes configured for a clean, fast checkout with no plugin archaeology required.

Already have a WooCommerce store?

Use the InstaWP Connect plugin to link your live store to your InstaWP dashboard, wherever it is hosted today. Once connected, you can:

  • Manage plugins and themes centrally
  • Apply speed-focused changes on a copy without touching live orders
  • Find the bottlenecks with the built-in Performance Scanner

It is the sanest way to run multiple stores, or to test a change before it reaches a customer’s checkout.

Other tools worth having

  • A caching plugin such as WP Rocket, configured to exclude cart and checkout. Our roundup of the best cache plugins for WooCommerce compares the options.
  • Checkout Field Editor to remove or reorder unnecessary fields
  • Query Monitor to see exactly which queries and hooks are running on the checkout page
  • MonsterInsights to track checkout drop-offs with funnel reports
  • Google PageSpeed Insights to measure load time and render delays on the checkout URL
  • Stripe with Apple Pay and Google Pay to enable express checkout in one tap
  • Google Maps Platform for address autocomplete, to cut typing friction

How to Speed Up WooCommerce Checkout: 12 Store-Side Fixes

With the server layer understood, these are the changes you make inside the store. They are ordered roughly by effort against payoff, so start at the top.

1. Remove Unnecessary Fields That Add Friction

Long, cluttered checkout forms are one of the main causes behind a WooCommerce slow checkout, and Baymard’s testing suggests most checkout flows could cut form elements by 20% to 60% and still work. Fields like company name, phone number or order notes look harmless, but each one is another decision on a phone screen.

Keep only the fields you need to process the order: name, email, billing address, payment details. Everything else is optional, and removing it reduces friction measurably. Fewer fields also means fewer scripts and less validation running client-side, so this helps INP as well as conversion.

Checkout field editor billing field list with company name and phone number switched off
A field editor lets you switch off company name, phone and order notes without touching code.

The standard route is WooCommerce Dashboard > Plugins > Add New > search for a field editor > Install > Activate. InstaWP users can skip the per-site login entirely and do it from one dashboard using a WP-CLI command, which is how you bulk-install across several stores at once.

Running a WP-CLI plugin install command against a site from the InstaWP dashboard
Run Commands in the InstaWP dashboard. The console echoes the command and its output, so you never log into the site itself.

Agencies running several stores can use InstaWP’s site management panel to push the same command to every connected store, turning a long afternoon into one operation.

2. Enable Guest Checkout to Remove Login Barriers

Forcing account creation is the single most expensive setting in WooCommerce. Baymard puts it at 18% of abandonments, higher than a complicated checkout. First-time buyers want to place the order and leave.

Guest checkout lets them do exactly that, with no password to invent and no confirmation email to wait for.

To enable it, go to:

WooCommerce → Settings → Accounts & Privacy

WooCommerce Accounts and Privacy settings with the enable guest checkout checkbox ticked
One checkbox. Baymard puts forced account creation at 18% of abandonments.

Tick “Enable guest checkout (recommended)”. No plugin required. You will see the impact fastest on traffic from ads and social, where intent is high and patience is low.

If you still want accounts, offer creation after the order is placed. WooCommerce supports this natively, and it keeps the account out of the critical path.

3. Add Express Checkout with Apple Pay, Google Pay or PayPal

Nothing improves checkout performance like letting a shopper skip the form entirely. Apple Pay, Google Pay and PayPal One Touch place the order in a few taps, with the address and card already stored on the device. No typing, no validation errors, no autofill fighting your field labels.

You will need to install and configure the right payment gateways. Stripe enables Apple Pay and Google Pay; PayPal Checkout covers both logged-in and guest shoppers.

Go to WooCommerce dashboard > Plugins > Add New > Search > Install > Activate > Configure payments. From InstaWP you can install the Stripe or PayPal plugin with WP-CLI without logging into each store, then configure them centrally.

Agencies managing several stores can bulk-install express payment plugins from Site Management > Bulk Plugin Install. One command and every store is ready.

Installing a plugin across several connected WooCommerce stores at once from the InstaWP Manage list
Select several connected stores, then Bulk Edit to install the same plugin across all of them.

4. Skip the Cart Page and Send Shoppers Straight to Checkout

By default WooCommerce sends shoppers to the cart page first, then to checkout. That is one extra uncacheable page load, one extra full round trip to your server, and one more chance to leave.

If your store does not lean on cross-sells or complex carts, cut the step:

  1. Go to WooCommerce → Settings → Products → General
  2. Under “Add to cart behaviour”, enable “Redirect to the checkout page after successful addition.”
WooCommerce Products settings with redirect to the checkout page after successful addition enabled
Products then General. Turning this on removes a whole uncacheable page load from the journey.
  1. Save changes

For finer control, or to remove the cart page entirely, a lightweight plugin like Direct Checkout for WooCommerce handles the redirect rules.

This one is especially effective if your analytics show shoppers viewing the cart and then leaving before the payment screen.

5. Use a One-Page Checkout Layout

Multi-step checkouts look tidy, but each step is another server round trip on a page that cannot be cached. A well-built one-page checkout keeps billing, shipping and payment on a single load.

The caveat: a one-page checkout that loads three payment gateways, a shipping calculator and a coupon validator all at once can be heavier than the multi-step version it replaced. Measure it, do not assume it.

Test both. If you build or host on InstaWP you can launch a new site in seconds, install a one-page and a multi-step plugin on separate copies, and compare real numbers before either one touches your live store.

6. Auto-Fill Address Fields with Google Autocomplete

Typing a full address on a phone is the slowest part of any checkout, and it is where typos generate failed deliveries. Address autocomplete fills country, city and postcode from a few keystrokes.

To implement it:

  • Install a plugin such as Address Autocomplete with Google, or enable the Google Places API in your own form
  • Create a Google API key and restrict it by referrer so it cannot be abused
  • Apply autocomplete to both billing and shipping address fields

One thing to watch: the autocomplete script is third-party JavaScript on your checkout page. Load it only on checkout, never sitewide.

7. Disable Unused Scripts and Styles on the Checkout Page

WooCommerce and its plugins load assets on pages that never use them. A slider plugin, a review widget and a popup builder can all enqueue CSS and JavaScript on checkout for no reason at all.

Unloading them means fewer requests, less JavaScript to parse and a better INP score at exactly the moment the shopper is typing. Use Asset CleanUp or Perfmatters to switch assets off per page, no code required.

Be conservative on the checkout page specifically. Disable something a payment gateway needs and orders stop, silently. Test each change with a real test order before it goes live.

If you manage multiple WooCommerce stores, bulk-install the optimisation plugin from the InstaWP dashboard rather than logging into each site.

8. Optimise Fonts and Icons

Web fonts and icon packs are render-blocking. Font Awesome loaded sitewide for three icons in the footer costs you on every page, checkout included.

  • Host fonts locally with OMGF to remove the external DNS lookup and connection
  • Unload unused icon libraries on checkout with Asset CleanUp or Perfmatters
  • Stick to one font family, or system fonts, and set font-display: swap

Small changes, but they land directly on LCP and CLS, particularly for mobile and international shoppers.

9. Strip the Checkout Template Back

Banners, upsells, sidebar widgets, a full site footer and a newsletter popup all compete with the one action you want. They also add weight to a page that is already the most expensive one on your store to generate.

Remove sidebar widgets, cut the footer down, and switch off popups on checkout. Keep order summary, form fields and payment options. Nothing else.

Test layout variants on a copy rather than on live traffic. Launch a preview site, apply the changes, compare, then sync back what worked.

10. Use Heatmaps and Session Recordings

Sometimes the fastest way to fix checkout is to watch someone fail at it. Heatmaps and session recordings show clicks, scroll depth and rage clicks, which is friction your analytics will never surface.

If shoppers hover on one field for ten seconds, or abandon right after opening the shipping options, that is a specific, fixable problem rather than a general “checkout is slow” feeling.

  • Microsoft Clarity, free and lightweight
  • Hotjar, strong on form analytics
  • Smartlook, session replay and funnel tracking

One warning that fits this article: every one of these tools is a third-party script. Run one, not three, and consider excluding it from the checkout page itself once you have your answers.

11. Disable the Coupon Field If You Are Not Using It

An empty coupon box is an invitation to leave and go looking for a code. Many shoppers do, and a good share never come back. It also adds an AJAX validation call to a page that already has too many.

If you are not running promotions, turn it off:

  • Go to WooCommerce → Settings → General
  • Untick “Enable the use of coupon codes.”
WooCommerce General settings with the enable coupon codes checkbox unticked
Untick this and the coupon box, and its AJAX validation call, disappear from checkout.

No plugin needed. If you do run promotions, keep the field but collapse it behind a link so it is not the first thing a shopper sees.

12. Add a Slide-In Side Cart

A side cart lets shoppers review items, change quantities and go to checkout without ever loading the cart page. That removes a whole uncacheable page load from the journey.

A good side cart plugin will:

  • Slide open automatically when a product is added
  • Update cart contents without reloading the page
  • Include a direct checkout button in the overlay
  • Match your theme without loading a second CSS framework

That last point matters. A side cart is still AJAX, so a badly built one makes the add to cart problem worse rather than better. Create a WooCommerce sandbox and time the add to cart response with the plugin on and off before you commit.

13 and 14. The Two Server-Side Fixes

For completeness, the two fixes from the server section that belong in any checkout speed checklist:

  1. Turn on object caching. It is the only caching layer that helps an uncacheable page, and on InstaWP it is enabled for you from the Plus plan with no plugin to configure.
  2. Give checkout enough PHP workers and memory. Two workers is fine for a quiet store and not fine during a campaign. 512MB of PHP memory is the floor for a real WooCommerce install, not a luxury.

How to Avoid Slow WooCommerce Checkout in the Future

Fixing checkout once is the easy part. Keeping it fixed is harder, because stores accumulate. A plugin here, a tracking script there, a few hundred thousand stale session rows, and eighteen months later you are back where you started without a single deliberate decision having caused it.

Build a maintenance rhythm instead of a rescue habit.

Run speed tests and health checks on a schedule

InstaWP includes a Performance Scanner that scores each site on mobile and desktop, then lists what to fix underneath. You can scan a site once every 24 hours.

InstaWP Performance Scanner showing mobile and desktop scores with a recommendations list
The Performance Scanner scores mobile and desktop, then lists what to fix underneath.

The scores are the headline, but the recommendations list is where the checkout work is. It reports Lighthouse audits in their own wording, and these are the four to read first:

  • Reduce initial server response time, which is Time to First Byte, the number that matters most on an uncacheable checkout page
  • Render blocking requests, usually fonts and stylesheets loading before anything paints
  • Largest Contentful Paint element, which tells you what the browser treats as the main content
  • Reduce unused JavaScript and Reduce unused CSS, which is the checkout bloat from section 7

If you want a metrics dashboard instead, with labelled Largest Contentful Paint, Time to First Byte and CLS cards, that is a different screen: Page Insight, under the site’s Performance tab.

Alongside it, uptime and SSL monitoring runs multi-region checks with response-time history and email and Slack alerts. It is included with InstaWP site management rather than with a hosting plan, and it is what tells you a checkout page went down at 3am before a customer does.

InstaWP uptime and SSL monitoring with a 30-day response-time chart and incident history
Uptime and SSL monitoring, with response-time history and an incident log.

Keep a staging copy, and actually use it

Nothing degrades checkout faster than plugin updates applied straight to production on a Friday. Keep a WordPress staging site, test updates there, and confirm a full test order still completes before anything ships. For stores that take orders continuously, our guide on how to test a WooCommerce site covers what to check each time.

Generate maintenance reports

Whether you are a solo founder or an agency, write it down. InstaWP can generate maintenance reports across one site or many at once. You pick the reporting period, then choose what goes in:

  • Summary
  • Performance
  • Uptime history
  • Security scan
  • Activity logs
Generating a client-ready PDF maintenance report for selected sites in the InstaWP dashboard
Pick the sites, the reporting period and what to include. The finished PDF is emailed to you.

Use them to stay honest with yourself, or to show a client exactly what they are paying for.

Have a way back

The fastest fix for a checkout that broke after an update is restoring the version that worked. On InstaWP, backups run daily with 30-day retention from the Plus plan and weekly on Starter, stored off-server in object storage in your site’s own region, and you restore them yourself from the dashboard on every plan. You can download them too, which matters more than it sounds: a backup you cannot take with you is not really yours.

WooCommerce Checkout Speed Is Not Optional

Checkout is the one page on your store that cannot be cached, cannot be served from a CDN, and cannot be hidden behind a good PageSpeed score on your homepage. Every click there is a live request to your server, which makes it both the most fragile page you own and the most honest measurement of your hosting you will ever get.

So work in the right order. Diagnose whether the delay is server-side or store-side. Fix the form: fewer fields, guest checkout, express payments, no coupon box you are not using. Then fix the foundation: object caching, enough PHP workers, enough memory, and hardware chosen for the single-threaded work WordPress actually does.

Put your store on hosting built for the uncacheable half

Per-site PHP pools, 512MB PHP memory on every paid plan, Redis-compatible object caching from Plus, PHP 7.4 to 8.5, five regions you choose, and free assisted migration with no downtime on your live store. Billed per day for the days a site is live, from around $5 a month.

Ready to build? Start your store on InstaWP.

Running WooCommerce sites for clients? Join our agency program and manage them all from one dashboard.

Frequently Asked Questions

Why is my WooCommerce checkout so slow?

Almost always because checkout cannot be cached. WooCommerce excludes Cart, Checkout and My Account from page caching because they show data specific to one shopper, so every checkout click runs PHP and queries your database live on your origin server. That makes checkout speed a direct measurement of your host, your PHP version and memory, your database, and how many plugins load on that page. Test the checkout URL specifically, not your homepage, because the homepage is cached and will always look fine.

Why is my WooCommerce add to cart slow?

Add to cart is an AJAX request that bypasses your cache. In those few seconds the server loads WordPress and WooCommerce from scratch, reads and writes the shopper session, validates stock and price, recalculates cart totals, and often refreshes cart fragments for the mini-cart. The usual culprits are cart fragments firing on every page, a bloated options and session table, a live shipping rate API call, and no object cache behind the request.

Does a CDN speed up WooCommerce checkout?

Not the checkout page itself. A CDN caches and serves static assets and cacheable HTML from an edge location near the shopper, but cart and checkout are excluded from caching by design, so those requests still travel to your origin server every time. A CDN is still worth having because it speeds up everything around checkout, including product pages, images and scripts, which improves the journey that leads to checkout.

What is a good checkout page load time for WooCommerce?

Aim for Time to First Byte under 600 milliseconds on the checkout page, and under 200 milliseconds is genuinely good. On the browser side, target the current Core Web Vitals: Largest Contentful Paint under 2.5 seconds, Interaction to Next Paint at 200 milliseconds or less, and Cumulative Layout Shift at 0.1 or less. Note that Time to Interactive is no longer a Core Web Vital and Interaction to Next Paint replaced First Input Delay in 2024.

Why does my WooCommerce checkout fail or time out during a sale?

This is usually PHP worker exhaustion rather than slowness. Your server runs a fixed number of PHP-FPM workers and each one handles a single request at a time. Cached pages never reach PHP, but every checkout request does. When all workers are busy, new checkout requests queue and eventually time out, which is why you see 502 and 504 errors on checkout while your cached homepage stays fast. The fix is more workers, which is what higher hosting plans actually buy you.

Can plugins slow down WooCommerce checkout?

Yes, and more than on any other page, because checkout is generated fresh so every active plugin runs on every request. Poorly coded plugins enqueue scripts and styles on checkout that they never use, add database queries, or hook expensive work such as CRM syncing onto order creation. Use Query Monitor to see exactly what runs on the checkout page, and Asset CleanUp or Perfmatters to unload assets that are not needed there.

Does object caching help WooCommerce checkout?

Yes, and it is the only caching layer that does. Page caching cannot store a checkout page, but an object cache keeps the results of repeated database queries in memory, so WooCommerce fetches product data, tax rates and option values once instead of repeatedly hitting MySQL. On InstaWP, Redis-compatible object caching is enabled for you from the Plus plan upward with no plugin to install or configure.

Should I remove the coupon field from WooCommerce checkout?

If you are not running promotions, yes. An empty coupon box prompts shoppers to leave and search for a code, and many never return. It also adds an AJAX validation request to a page that already has too many. Turn it off under WooCommerce, Settings, General by unticking Enable the use of coupon codes. If you do run promotions, keep the field but collapse it behind a link.

How often should I test my WooCommerce checkout speed?

Test monthly as a baseline, and always after a plugin or theme update, a new payment gateway, or any change to the checkout template. Run a full test order each time, not just a page speed score, because a checkout can load quickly and still fail at the payment step. Automated performance scans and uptime monitoring catch the drift between manual checks.

VS
Vikas Singhal
Founder, InstaWP

Vikas builds tools that take the friction out of WordPress development. He writes about WP-CLI, dev workflows, and running WordPress at agency scale.