Hosting a WooCommerce shop: what to check before Black Friday
· The AYT team · 4 min read

A WooCommerce shop behaves differently from a blog. On a blog, nearly every visitor sees the same pages, which can sit ready in a cache. In a shop, each customer has their own cart, their own account and their own prices after a coupon, and those pages are built every time in PHP, with database queries. When five times the usual number of people arrive, those are the pages that give way first.
A page cache with the right exceptions
Product pages, categories and the home page can come from the cache. The cart, the checkout, the "My account" page, and any request from a customer with something in their cart must skip it. Otherwise one customer can see another's cart or address, which is also a personal data problem.
At AYT, the page cache runs in nginx and recognises WooCommerce cookies: products and categories come from the cache, while the cart, checkout and customer account always go around it. You turn it on from the site's Caching tab in the panel.
If you use a caching plugin in WordPress, check the same exceptions in its settings. Most have them already, but if you've translated the page addresses (for example /cos instead of /cart), make sure the exceptions use your addresses.
Redis for queries
What can't be cached still asks the database: prices, stock, product variations, plugin options. WordPress repeats many of these queries on every load. An object cache in Redis keeps the results in memory, and the next request takes them from there.
You feel the difference most in wp-admin, in search, and in shops with thousands of products or many filters. On AYT's paid plans Redis is included, and we install the plugin that connects it to WordPress.
PHP processes and memory
Every request that doesn't come from the cache keeps a PHP process busy while it runs. If a checkout takes two seconds and the account has 40 concurrent processes, at most 20 checkouts fit in a second. In practice fewer do, because wp-admin, WP-Cron and search engine crawlers run at the same time.
Ask your host for written limits on processes, memory and CPU. At AYT, the plans have 40, 80 and 150 concurrent processes with 1, 2 and 4 GB of RAM, and your account's resources aren't used by neighbours on the server.
Your part of the preparation:
- Open the slow plugins report in the panel before the campaign. A reviews or related-products plugin that runs hundreds of queries per page stands out at once.
- Let WP-Cron run from the server's cron, so scheduled tasks don't start in the middle of a customer's request. It's a setting in WordPress Toolkit.
- Take out of the checkout whatever isn't required: extra fields, slow external checks, chat scripts.
The database and orders
A shop with a few years behind it collects expired sessions, old product revisions and thousands of finished Action Scheduler tasks. Tables grow and queries slow down. A few clean-ups a year, from WooCommerce → Status → Tools or with an optimisation plugin, keep the database small.
A shop needs backups more than any other site, because a lost order is a customer who paid and gets nothing. On AYT's paid plans, files and database are copied every night to another server, and the copies are kept for 2 years.
Updates, tested on a copy
Many shop outages on campaign day come from a WooCommerce, theme or payment plugin update made the day before. Run updates on staging, place a test order there from cart to confirmation, and only then publish to the live site. In campaign week, don't update anything.
The checklist for the week before the campaign
- The page cache is on, and the cart and checkout skip it. Check from a private window with a product in the cart.
- Redis is on and the slow plugins report shows nothing new.
- You have a recent backup and know which menu restores it.
- You've placed a test order with every payment method.
- Updates wait until after the campaign.
If your shop has outgrown its current hosting, the Business plan is built for WooCommerce, and we handle the move from your old provider for free.


