May 14, 2019

Zero Downtime: The Foolproof Way to Update Your WooCommerce Store

By Campbell Angus

It’s taken our team of WooCommerce specialists 10 years to perfect a foolproof system for updating a WooCommerce site.

What do we mean by “foolproof”? We mean that if you follow these step-by-step instructions, you can update your store with zero risk of downtime and lost sales.

In Greek mythology, the Sirens lured sailors to their island with a song. The enchanting music promised the sailors a divine truth. It wasn’t until it was too late that the sailors realised the song had blinded them to the island’s rocky coast.

WordPress has a similarly enchanting promise — the promise that you can update your site with a single click. The promise is as captivating as the Sirens’ song, and many a WooCommerce store owner has been lured into pressing that button only to shipwreck their site.

What are the odds?

What’s wrong with the promise of an automatic update? Absolutely nothing. Half the time.

We take six to eight hours to put a client’s site through our updating process. (If you’re wondering where that time goes, see ‘Appendix: Where does the time go?’ at the end of this page) After all that, roughly half the time everything would have been fine if we’d just pressed the update button.

In other words, you could save hours of work by pressing the update button, but every time you choose to do that, you’re playing Russian roulette with three of the six chambers loaded.

If those odds work for you, the rest of this guide has nothing to offer. But, if you know the coin isn’t going to come up heads every time, you know that you’ll eventually crash your site by relying on an automatic update.

Consequently, you have two choices.

1. Never update your site.

Okay, we lied. There aren’t really two choices, because not updating your site raises the odds of it crashing to 100%. That is, if it doesn’t get hacked first.

WordPress is the most popular content management system in the world, and hackers hack where the fish are. For just one set of statistics, see hackstats.

For the latest information, you should keep an eye on WPscan Vulnerability Database. It’s a directory of WordPress core, plugin and theme vulnerabilities. There are close to 12,000 known vulnerabilities at the time of writing.

If your site has even one of those vulnerabilities, you are at risk. (That’s why we check our clients’ sites daily for vulnerabilities, so that we can resolve them immediately.)

None of this need concern you if you have a robust system for updating your WooCommerce site. We update hundreds of sites every month with zero downtime, and in this guide, we are going to show you how to do the same with your site. You can be sure your site will be up to date, and there will be no downtime.

2. Develop a system to eliminate the risk and faultlessly update your site every time

That system for updating WooCommerce sites with no downtime is something we’ve developed over more than a decade.

If you follow the steps below, you’ll be able to keep your site current and running without any interruptions.

How to update your WooCommerce site with zero downtime

1. Back up your production site

First things first. You need a complete backup of your current site.

That backup needs to be:

  1. Current. Ideally, no changes should be made to the live site after you’ve made the backup. In this way, you can be certain that what you do in the following stages will still be relevant to the live site.
  2. Complete. You want everything in this backup. If something goes wrong, this backup needs to be ready to become your site.
  3. Off your server. If your update crashes your server, your backup is no good if it’s in the wreckage.

To see what tools we use to backup clients’ sites, see our list of backup tools.

2. Open the backup on a staging site

Opening your backup on a staging site serves two purposes.

  1. You’re testing the integrity of the backup. A backup that doesn’t work is as much use as a chocolate teapot in a disaster.
  2. You can work on a mirror of your live site, testing updates privately and securely on a staging site, while the live site carries on making money safely out of danger.

3. Update the WordPress and WooCommerce cores

Begin by testing the foundations — any WordPress or WooCommerce updates. If these cause issues with your existing setup, this is where you want to start.

We only build sites in WooCommerce because we believe it’s the best choice for 95% of businesses. And so we say this with affection: major releases of WooCommerce often cause problems. It’s just the nature of WordPress and WooCommerce.

To get a feel for how often it’s necessary to do this, check out the:

  1. WordPress release notes 
  2. WooCommerce release notes 

4. Tackle the plugins

1. Research

Now you’re safely on a staging site and you’ve tested WordPress and WooCommerce, you might be tempted to hit the update button — just to see what happens.

What we recommend instead is that you do some research. We have an internal database of 113 plugins that we know cause issues with WooCommerce.

The database also details the version numbers of other plugins that don’t usually cause problems with WooCommerce but that did at one point in their development.

With all this information in our database, we can anticipate problems. That way, we’re less likely to be looking for a needle in a haystack after a mass update.

You can approximate this with online research. Unfortunately, there’s no open- source database documenting known conflicts between existing plugins. It would be a nightmare to maintain because there are so many versions of plugins.

We’re able to maintain our database because we specialise in WooCommerce, so we’re monitoring only a subset of the 55,357 WordPress plugins available at the time of writing.

You can, however, check your specific WordPress plugins on WordPress.org. Each should have a support tab where other users might have raised concerns.

Some examples from our own database include:

  • Ajax Search for WooCommerce v1.2.0 — Can’t search on Android devices.
  • WooCommerce Stripe Payment Gateway v4.1.3 — Payment Request JS error when default country setting is not supported.
  • MailChimp List Subscribe Form v1.5.2 and earlier — Not compatible with PHP7.
  • Yoast SEO v7.0 — Attachment URL bug.
  • Flatsome Theme v2.9.x — Australian state field not visible on iOS devices.

Even something as integral to many WooCommerce store owners as MailChimp has a whole official support page covering the types of conflicts it can have with WordPress, WooCommerce, PHP and other plugins. You can see the WordPress MailChimp support page here.

2. Update

Now you can hit the update button.

5. Update the theme

WooCommerce store owners often forget to update their theme — perhaps because themes aren’t plugins, which means they’re not included when you hit the update button. However, the code in your theme is critical, so it must be kept up to date.

Theme problems are common for three reasons.

  1. Security. As with any critical code, your theme can contain security vulnerabilities, which is just one reason to keep them up to date.
  2. Customisations. If your developer didn’t use a child theme then updating the master theme can destroy any customisations you’ve made to your store. (If your developer hasn’t used a child theme, we strongly suggest contacting us before attempting an update.)
  3. Support. Your problem might not be with how you handle an update; it might be that you can’t update at all because your theme is no longer supported by its developer. If this is the case, the fuse is lit, and it’s just a matter of time before your theme blows up an important WooCommerce release.

In October 2018, a significant cross-site scripting vulnerability was found with Elegant Themes’ popular Divi theme. Elegant Themes’ page about the security issue is here.

Difficult problems and common issues

We asked three of our most experienced developers — Aisser, Nil and Jax — what issues they see most commonly and which are the hardest to fix. These are their insights.

Hardest problems

  1. Failing to properly co-ordinate the update of WooCommerce and the email templates in the child themes so that emails aren’t sent
  2. Themes that are no longer available or supported
  3. Problems with other aspects of the store ecosystem, e.g. the analytics and conversion tracking
  4. Having an excessive number of plugins on a site (greatly increasing the chances of conflicts)

Most common issues

  1. Forgetting to clear the cache after applying the updates
  2. Big changes to the code in the theme, especially between major version releases and when there are changes in the shortcodes or the theme options
  3. The content delivery network (CDN) doesn’t refresh
  4. SSL issues giving mixed content errors
  5. Checkout issues arising when you don’t update the licence for your payment gateway when trying to update WooCommerce

6. Comprehensive testing

Like a pilot with a checklist, you should follow a script every time you update your site. (And you should add to that script as appropriate after every update.)

1. Visual review

The klaxons won’t sound if the update breaks something. This is a common problem for WooCommerce store owners because there are no strobing red lights, no smell of smoke, so they think everything is fine. It might be a couple of days before a customer finally emails to say they can’t check out.

Making sure nothing is broken should be a rigorous process. Here’s what we recommend:

  1. Screen-by-screen comparisons. Have the staging site and the live site open side by side. Go through screen by screen to make sure the layout of the site is unaltered.
  2. Check different view ports. Make sure you’re looking in desktop view, tablet view and mobile view. Are they formatting consistently on every page type of the site — main pages, product pages, blog pages, cart…?
  3. Watch the developer console. It helps to have your browser’s development console open so that you can see any scripting problems. (If this is something you don’t know how to do and downtime would be critical for your store, this is an indication that you might not be the right person to run the update process.) This is a great tutorial on WordPress.org: Using Your Browser to Diagnose JavaScript Errors

2. Forms and other actions

If you have forms on your site or other actions that customers can take other than checking out (e.g. adding to a wishlist), you’ll want to check those, too.

  1. Use the forms (especially the contact forms) — fill them in, check the inputs arrive where they should
  2. Add to and take away from the wishlist

Make a note of any issues you find. They should be part of your process next time.

3. Check out

If your customers can’t check out, you don’t have an online store: you have a product showcase advertising products that your customers will go to your competitors to buy. Thoroughly checking your shopping cart is crucial.

  1. Add products to your cart
  2. Change the quantity in the cart
  3. Remove products
  4. Check shipping is being calculated correctly
  5. Make sure all the payment options are visible on the screen
  6. Confirm you can get to the payment stage and complete checkout

7. Resolve any issues

As we said at the beginning, there’s a 50/50 chance that you’ve already encountered a problem with:

  1. WordPress
  2. WooCommerce
  3. Your theme
  4. One or more plugins

When it comes to fixing any problems you’ve found, there are a few things you can do.

  1. Forums. Look at the issue history for the WordPress, WooCommerce, theme or plugin to see if anyone else has raised it and if someone has suggested a resolution. You can look on WordPress.org, the WooCommerce support forums or in any support forums provided by your plugin or theme developer.
  2. Developers. Ask the developer if they’ve got a solution to it.
  3. Self-help. Basic mistakes in the code of a theme or a plugin (something like a missing semicolon) is something our developers will just fix. If you have some coding skills, you can do the same.
  4. Skip the update. You should update as much of your site as possible, but you can usually skip an element or two and wait until the next update, which will most likely fix the problem.

8. Take notes

Over the process so far, you should have compiled a list of issues specific to your site. You’ll want to fix them before pushing to your live site, but just in case any of those issues show up when you push the changes to the live site, your notes will tell you how to repair them immediately.

9. Back up the staging site

By this point, you will have:

  1. Tested everything
  2. Listed any specific issues you need to check when your updated site is live (and prepared fixes)

Now you should back up your staging site. And for good measure, you should back up your live site again, too. (Changes might have been made since you took the backup you’ve been working on.) Follow the guide in Step 1 above.

10. Update your live site

Because your live site is still taking orders, you can’t just migrate the staging site you’ve been working on and overwrite the live site.

However, you can now initiate the updates in the live environment because you have your list of any issues you’ll need to fix and — just as important — your notes on how to fix them quickly.

11. Test the updated live site

Your first test should be of any areas where you had issues in the staging environment. After that, you should run through some visual inspection for peace of mind.

It’s up to you, but we would always make sure we could order and pay for a basket of goods to be shipped correctly. That is, after all, what you’re in this business for!

Insuring against downtime

Every step described above is essential if you want to ensure zero downtime. You’re looking at six to eight hours of work as insurance against the risk of open-ended downtime while you try to fix a catastrophic failure in a live environment.

Some people try to run their updates at 11 pm or 2 am to minimise the risk of losing sales. But if your site goes down in the middle of the night, who can you call to fix it? Your customers are going to be affected in the morning regardless.

As a store owner, you don’t need us to tell you what it would cost you if your store went down at a crucial time. We have clients who make 50–70% of their annual revenue in the Christmas period. Some of them go from turning over $30,000- 40,000 a month to making $200,000 or $300,000 in a single day. Being down for a couple of days in that time would fundamentally change the bottom line for the whole year.

Anything other than zero downtime is not an option for them.

Inside advice on minimising risk

The more frequently you run through this process, the lower your chances of encountering problems. (If you leave too much time between updates, there will be more to update and a commensurate growth in the risk of problems.)

The Blaze Alternative

Whatever the perceptions of pina coladas and passive incomes, we know how hard online store owners work. It’s why we don’t like to see any online stores go down, and that’s why we’re happy to share our watertight process for updating a WooCommerce store. But if you’d rather have someone do it for you, we’re here to help (and from as little as $99 a month).

Find out more about the Blaze WordPress Maintenance service for WooCommerce.

Appendix: Where does the time go?

Because we work on hundreds of sites a month, we know the average update takes between six and eight hours. And we know this is a process you should repeat every two to four weeks.

The table below shows you where time goes, except for the always unknown x factor — how long it will take to resolve any issues you find. Depending on the issues, it could be a 30-second fix or it could be the end of your weekend.

IssueTime allowance
Backup live siteAllow up to an hour, depending on size of site
Create staging site from backupAllow up to an hour
Review WordPress and WooCommerce release notes and update the site with the latest versions15 mins
Research recent support history for active plugins and theme1 hour
Update plugins and theme15 mins
Comprehensive testing~4 hours
Resolve issues found during testingVaries by order of magnitude
Apply all fixes and updates to live site1 hour
Comprehensive testing on live site2 hours