A Black Friday sale can work exactly as planned, right up to the hour shoppers arrive. The danger is that the rush you worked for could slow your store down, or take it offline, at that very moment.
Checkout is where that risk sits. The pages shoppers need to pay are the ones your server builds fresh for every visitor.
Not knowing whether your site will hold up is stressful. In this guide, we’ll show WordPress and WooCommerce store owners how to estimate their Black Friday peak and prepare for it, even with only a couple of weeks left.
In This Article:
- Why Traffic Spikes Slow Down or Crash WordPress Sites
- How to Handle Traffic Spikes: A Black Friday Checklist for WordPress
- 1. Estimate Your Peak Traffic From Last Year's Sale
- 2. Check What Your Hosting Plan Can Handle
- 3. Cache Every Page That Can Be Cached
- 4. Put a CDN in Front of Your Images and Files
- 5. Load Test Your Store Before the Sale
- 6. Freeze Updates and Back Up Before the Sale
- 7. Test Checkout and Payments the Way Shoppers Will
- 8. Set Up Uptime Alerts
- How to Watch Your WordPress Site in Realtime During the Sale
- FAQs About Handling Traffic Spikes
Why Traffic Spikes Slow Down or Crash WordPress Sites
A traffic spike slows down or crashes a WordPress site when more shoppers arrive at once than its hosting can keep up with. Product and blog pages can be served quickly from saved copies, but the cart and checkout have to be prepared fresh for every shopper. When too many reach checkout together, pages slow down or stop loading.
Sale-day rushes can be huge. Adobe’s Cyber Monday figures show U.S. shoppers spending about $16 million online every minute during the busiest hours of the evening in 2025. Across all Shopify stores worldwide, Black Friday 2025 sales peaked at $5.1 million a minute just after noon Eastern time.
Those are totals across thousands of stores, not what any one store will see. They do show how sharply shoppers can bunch up at the peak.
Even big retailers have struggled with that kind of peak. In 2014, Best Buy took its website offline for part of Black Friday morning after what the company called “a concentrated spike in mobile traffic.”
In 2018, Walmart’s website ran into delays as its online Black Friday deals went live, and Walmart put them down to “extremely high demand.” The retail aggregator LovetheSales estimated the cost at about $9 million in lost sales.
A store’s hosting works a bit like a shop with a set number of checkout lanes. Every shopper who heads to the cart or checkout needs a lane. When all the lanes are busy, the next shopper waits, and if the line gets long enough, pages can time out.
WooCommerce itself can run a busy sale. A store’s limit comes mostly from how many lanes its hosting plan provides. So preparing for a spike has two jobs: giving the cart and checkout enough lanes, and serving everything else from saved copies.
How to Handle Traffic Spikes: A Black Friday Checklist for WordPress
To handle a Black Friday traffic spike in WordPress, size your peak, confirm your hosting can take it, cache every page that can be cached, add a CDN, load test, freeze changes, test checkout, and set up uptime alerts.
We’ve ordered the eight tasks the way we’d tackle them, starting with the number that items 2 and 5 rely on.
1. Estimate Your Peak Traffic From Last Year’s Sale
Estimating your peak traffic turns “a lot of visitors” into a number you can give your host and use in a load test. The place to start is the busiest hour of last year’s Black Friday.
In Google Analytics, open Explore and start a Free form exploration. Set a Custom date range with last year’s Black Friday as both the start and end date. Then add Hour as the rows and Sessions as the values, and click the Sessions heading to put the busiest hour on top.
Hours are numbered 00 to 23, so 14 is 2 PM. In our guide to creating custom reports in Google Analytics, we walk through building a Free form exploration step by step.
Keep in mind that Explorations only reach back as far as your property’s data retention setting, which can be as short as two months. If last year’s Black Friday comes up empty, or you didn’t run a sale last year, your biggest recent sale day works as a stand-in.
If you use MonsterInsights, the WordPress analytics plugin, its Spend by Hour report shows the same hours from the order side.
With the Pro plan and the eCommerce addon active, go to Insights » Reports » eCommerce » Spend by Hour and choose Set Custom Date Range. Pick last year’s Black Friday as a single day, since each hour row adds up every day in the range.
Then click the Transactions column heading in the Spending by Hour table to sort the busiest hours to the top. Those are the hours when your checkout pages were busiest.
With your busiest hour picked out, take that hour’s Sessions from your exploration. The average engagement time comes from a second place in Google Analytics. Open Reports » Acquisition » Traffic acquisition for the same day, and read the Total row in the Average online session engagement column. Then put both numbers into this rough estimate:
Visitors on the site at once ≈ sessions in your busiest hour × average engagement time (in minutes) ÷ 60
For example, 1,200 sessions in the busiest hour × 3 minutes ÷ 60 = about 60 visitors on the site at once.
That result is an average across the hour. Shoppers can arrive in a rush after a sale email lands, so the busiest minutes can run higher. Engagement time also only counts the time your page was the tab a shopper was actively using, so it can come in shorter than the real visit. That’s why it’s safer to round your result up.
If this year’s campaigns are bigger, it makes sense to plan above last year’s number.
2. Check What Your Hosting Plan Can Handle
Your hosting plan sets the limit on how many fresh pages, like carts and checkouts, your server can build at once. Hosts call that limit PHP workers (some say PHP threads). If you’re not sure what kind of plan you have, our guide explains how shared, VPS, dedicated, and managed hosting differ.
I’d send your host your peak estimate from item 1, along with three questions. How many PHP workers does your plan include? Can they add capacity temporarily for the sale? And can you run a load test, or can they run or approve one for you?
If your host can add capacity, that’s the lower-risk route this close to a sale, since nothing else about your setup changes. If it can’t, moving to a host that scales is the other route, as long as there’s time to test your store after the move.
Levamo is managed WooCommerce hosting set up for that kind of surge. On its Business plan and above, Levamo adds page-building capacity and memory automatically during a traffic spike, then scales back once things settle.
On Levamo, cart and checkout pages skip the saved copies automatically, and each site gets dedicated server resources rather than shared ones. All of Levamo’s managed WordPress hosting plans also include Cloudflare’s Enterprise CDN.
Levamo’s team handles the move for free, and most migrations finish within 48 business hours. A store may need a short maintenance window for the final switch, so it’s best scheduled well before the sale. Plans start at $35/month.
Whichever route you take, it helps to get the capacity answer in writing, since your load test in item 5 checks against it.
3. Cache Every Page That Can Be Cached
Caching every page that can be cached takes most of a sale’s browsing traffic off your server, which leaves it free for cart and checkout. A page cache is the tool that keeps those saved copies. It hands one to each visitor, so your server doesn’t have to build the page again.
A cache only works for pages that look the same to every shopper. Here’s how that splits across a typical store:
- Home, category, product, and blog pages are served from the cache to logged-out shoppers, so they put little load on your server.
- Cart, Checkout, and My Account pages are built fresh for every shopper. WooCommerce’s caching documentation says to keep them out of the cache, because they show each shopper’s own details.
- Pages a logged-in customer opens depend on your setup, since some caching setups skip logged-in visitors entirely.
WooCommerce already tells caching plugins to skip its cart, checkout, and account pages, but your cache still has to follow that instruction. The same guide also warns that some hosts’ built-in caching can still save a copy of the My Account page.
So the job is to confirm those exclusions in your caching plugin or your host’s caching settings, rather than build them.
If you don’t have a page cache yet, WP Rocket is the one we’d start with. It’s a paid plugin that starts caching your pages as soon as you activate it. It also leaves WooCommerce’s Cart, Checkout, and My Account pages out of its cache automatically.
Our list of the best WordPress cache plugins covers other options. If you’d rather use a free plugin, WP Super Cache also skips those three pages for you, so they won’t appear in its exclusion settings. On the plugin’s Advanced tab, the Rejected URL Strings box is where you’d add any other page that shows shopper-specific content.
To check that the exclusions work, add a product to the cart in a private browser window, browse to another page, and then open the cart again. If the cart is empty or out of date, the cart page is being cached.
Some hosts also offer an object cache, a setting that helps your server build cart and account pages faster. If yours does, it’s worth switching on before the sale.
4. Put a CDN in Front of Your Images and Files
A content delivery network (CDN) is a group of servers around the world. It keeps copies of your site’s images and the files that style your pages. Shoppers get those files from a server near them, so the requests don’t reach your own server during a spike.
That leaves more of your hosting capacity for the pages only your server can build. Cloudflare’s CDN page shows how a large CDN does this. Its network serves saved copies of sites from data centers around the world, taking traffic off each site’s own servers.
Some hosts include a CDN, so it’s worth checking yours before adding one.
Levamo’s CDN, for example, goes beyond images and files and keeps copies of whole pages for logged-out visitors. A shopper browsing product and category pages can then be served without reaching your server. Setup is a one-time domain connection, and the CDN switches on automatically after that.
If your host doesn’t include a CDN, our list of the best CDNs for WordPress can help you pick one.
5. Load Test Your Store Before the Sale
A load test sends many visitors to your store at once to show whether it can handle your peak estimate before real shoppers arrive. A speed test, by contrast, measures one visitor’s experience.
Before you run a load test, check with your host, because rules vary. Some hosts can run a test for you, and some ask for notice first (WordPress VIP, for example, asks for a support ticket). Others, like Kinsta, don’t allow customer load tests on most plans.
If your host offers to run or approve a test, that’s the simplest route. Either way, the safest place to test is a staging copy of your store, a private duplicate kept away from shoppers. A test on the live site can slow it down for real shoppers.
When your host is happy for you to run the test yourself, Loader.io runs a simple test from a web form, with no code. Its free plan runs one-minute tests on up to two pages. A product page and the cart page make a useful pair, since one is cached and the other is built fresh.
Before the first test, Loader.io asks you to upload a small file to your site’s main folder to prove the site is yours.
I’d run the test at your peak estimate first, then again a little above it. The busiest minutes of a sale can run higher than the hourly average. I’d also raise the numbers step by step. If pages slow down or errors appear, stop there, so the test doesn’t turn into an outage.
If the test shows trouble, I’d take the results back to your host, since the item 2 conversation goes faster with real numbers.
6. Freeze Updates and Back Up Before the Sale
A change freeze makes sure the store you load tested is the same store that runs the sale.
I’d finish plugin and theme updates a week or two before the sale and test them on staging. During the sale, I’d pause everything except security fixes, which are still worth applying after a quick staging check. Turning updates off entirely would leave known security holes open.
Before the freeze, it’s worth taking a full backup and confirming you can restore it, because an untested backup is only a hope. The free version of Duplicator is one good option for both.
Once it’s installed, go to Duplicator » Backups and click Add New to create a full backup. Each finished backup then gets a Restore button in the same list, so you can restore it from your WordPress dashboard.
I’d test that restore on a staging copy of your store rather than the live site, since a restore replaces the site with the backup. It’s also worth using the Download button to keep a copy of the backup somewhere other than your server. If Duplicator isn’t the right fit, our roundup of WordPress backup plugins covers other tools.
It also helps to agree now on who restores the site, and how, if something breaks mid-sale.
7. Test Checkout and Payments the Way Shoppers Will
Testing checkout yourself is the quickest way to catch a broken payment step before a shopper does. I’d place real test orders while logged out, on both a phone and a computer.
It’s worth trying each payment method you offer and the coupon code you’ve set up for the sale. Depending on your checkout layout, shoppers may enter that code from a Have a coupon? Click here to enter your code link at the top of the page.
Once each test order goes through, check that the order confirmation emails reach both you and the customer.
Staying logged out shows you the store the way shoppers see it, including the cached pages. It also lets your test order appear in real-time reports, since some analytics setups don’t track logged-in site administrators.
Testing can also turn up friction rather than a break, such as a long form or a missing payment option. Our guide to reducing shopping cart abandonment covers those checkout fixes.
8. Set Up Uptime Alerts
An uptime monitor checks your site from the outside every few minutes and alerts you when it stops responding. UptimeRobot’s free plan, for example, checks a site every five minutes. It helps to send the alerts to whoever is watching the store during the sale.
Analytics records what visitors do once a page loads, so during an outage a report simply goes quiet, much as it might on a slow afternoon. The monitor’s alert tells you which one you’re looking at.
It’s worth adding a monitor for your checkout page as well as your home page. A cached home page doesn’t need your server to build it. It can keep loading even when the server has no room left for cart and checkout, and only the checkout monitor would catch that.
With an empty cart, WooCommerce sends the monitor to the cart page, which works just as well because the cart isn’t cached either.
If you’re short on time, I’d do items 2, 3, and 7 first. The host conversation, the cache exclusions, and a real test order together cover the checkout pages that carry the most risk.
It also helps to write down three numbers before the sale: your peak estimate, the capacity your host confirmed, and the point where your load test started to slow. If the first number is close to either of the others, you know where to spend your remaining time.
See Your Store’s Busiest Hours and Live Visitors in WordPress
MonsterInsights puts last year’s best-selling hours and this year’s live visitors in your WordPress dashboard, so you can plan for the rush and then watch it arrive. The Realtime report comes with Plus and above, and Spend by Hour is part of the eCommerce reports on Pro.
Explore the Realtime and eCommerce ReportsHow to Watch Your WordPress Site in Realtime During the Sale
Google Analytics’ Realtime report shows who’s on your site in the last 30 minutes, which pages they’re viewing, and which key events, like purchases, are happening. Key events are the actions you’ve marked as important in Google Analytics. During a sale, I’d watch the report alongside your uptime monitor.
Realtime data can sometimes arrive late or with gaps, so a sudden dip may be a reporting delay rather than an outage.
In Google Analytics, go to Reports » Realtime to open the Realtime overview. The cards over the map show Active users in last 30 minutes and Active users in last 5 minutes, above an Active users per minute chart. The 5-minute figure reacts faster, so it’s the one to check right after a sale email goes out.
Our walkthrough of Realtime reports in Google Analytics covers the rest of the screen, including the key events card.
Here are four changes you might spot in Realtime on sale day, along with what each one can mean and what to check first:
- When active users fall toward zero, the site may be down, or tracking may have stopped. Your uptime monitor is the first place to look, and after that it’s worth loading the store yourself in a private window.
- If shoppers reach the checkout page but no purchase key events come in, a payment or checkout step may be broken. A test order with each payment method is the first check.
- A sale email that brings in no campaign traffic may have a broken link, or a link that’s missing its tags. I’d click the link in the sent email first and check its UTM parameters.
- One page taking most of the traffic may be a deal page doing its job, or bot traffic. The first thing to check is whether visitors on that page move on to the cart and checkout.
Any one of these is a reason to look closer, not proof of a problem. When two signals agree, such as a quiet Realtime report and an alert from your uptime monitor, it’s time to act.
Watch Sale-Day Traffic in Realtime From Your WordPress Dashboard
You can also watch sale-day traffic inside WordPress with MonsterInsights, without switching tabs while you manage orders. On MonsterInsights Plus and above, go to Insights » Reports and click the Realtime tab.
The Right Now panel shows Active users on site next to a Pageviews Per Minute chart, and the report updates about every 60 seconds. Further down, a Top Pages table lists the pages visitors are viewing.
During a sale, a deal or checkout page near the top of Top Pages confirms that shoppers are heading where you want them. For purchases as they happen, Google Analytics’ Key events by event name card shows the count, since purchase is a key event by default.
The Key events card fills in once your store sends eCommerce data to Google Analytics. If yours doesn’t yet, there’s still time to set up WooCommerce tracking before the sale.
Once the sale ends, the next step is comparing the results against your normal baseline. In our eCommerce conversion rate guide, we show how to set up that comparison.
FAQs About Handling Traffic Spikes
Can WooCommerce handle high traffic?
Yes. How much traffic a store can take depends mostly on its hosting plan and on how much of the store is served from the cache, rather than on WooCommerce itself. Cart and checkout pages are built fresh for every shopper, so they’re where capacity runs out first.
How do I know how much traffic my website can handle?
A load test is the reliable way to find out. I’d size the test from your busiest hour last year, using sessions × average engagement time in minutes ÷ 60 as a rough estimate. It’s also worth asking your host how many pages your plan can build at the same time.
Is it safe to load test a live website?
A load test can slow a live site down for real visitors, and some hosts ask for notice first, while some don’t allow load tests at all. Testing a staging copy is the safer option. If your host allows a test on the live site, it’s best to tell them beforehand and pick a quiet time.
What is a traffic spike?
A traffic spike is a sudden, short jump in visitors well above your normal level, such as the rush after a sale email goes out or a post takes off on social media. Spikes are hard on a store because many shoppers reach the cart and checkout at the same moment, and those pages are built fresh for each one.
How early should I prepare my site for Black Friday?
Starting several weeks ahead gives you time to test changes and, if needed, move hosts. With only a couple of weeks left, I’d focus on the host conversation, the cache exclusions for cart and checkout, and real test orders.
Should I update plugins right before Black Friday?
It’s safer to finish updates a week or two early and test them on staging. During the sale, I’d hold off on anything that isn’t a security fix, and give even those a quick staging check first.
Why did my website crash during a sale?
A site can crash during a sale when more shoppers request pages that are built fresh, like cart and checkout, than its server can build at once. A plugin conflict can cause it too. Your host’s error logs and your uptime monitor’s timeline are the best places to start looking.
That’s it! I hope this article helped you get your store ready to handle a Black Friday traffic spike. If you liked this article, check out the following beginner-friendly guides:
- How to Find Your eCommerce Conversion Rate in Google Analytics
- Smart Tactics to Reduce Shopping Cart Abandonment
- How to Set Up WooCommerce Google Analytics (Track Revenue Correctly)
- How to Find and Use Realtime Reports in Google Analytics
- Best CDNs for WordPress (Compared)
Follow us on Twitter, Facebook, and YouTube for more Google Analytics tips.