Our team has dealt with various large scale eCommerce stores, each with different needs and problems. In this particular case, I’d like to go over our experience handling specific WooCommerce store, which may be helpful if you’re running into optimization issues, slow load times, and frequent errors.
This store garners around 15-20 million monthly page views, 35,000 orders a month, close to 1 million users, around 30-50 ‘add to cart’ and checkout actions every few seconds. Additionally, it’s a content-heavy site, with 10,000 products and 500 categories. This site was originally built and housed on an outdated ASP.NET eCommerce platform which developers had abandoned. The process of migrating to WooCommerce is an entire article in itself.
Handling 100,000’s of Orders
The WooCommerce backend was important to the client and their employees. There needed to be at least 10 employees logged in at once searching orders, adding notes, giving refunds, and confirming orders. Obviously, the backend needed to be fast to optimize employee efficiency. However, with half a million orders, searching and editing orders was a slow process. Our solution was ‘archiving’ 3 month+ old orders into a subdomain for employee use only. There are plugins out there that should do the trick, or simply use MySQL to export/import.
Also, make sure only the necessary columns are checked under ‘Screen Options’ and make sure other users with backend access don’t have an absurd amount of rows per page checked. We enforced users to never go beyond 30 per page unless they absolutely to view more on one page.
Lastly, we experimented with Woocomerce Custom Orders Table. To summarize, Woocommerce stores orders as custom post types along with at least 40 post meta entries for each order. The Custom Orders Table add on creates a separate ‘Orders’ table that stores orders in a single row. The tool is still in beta and may need customization based on your setup.
With these above steps taken, navigating the orders area dropped from 6-7 seconds to .4 seconds!
Optimizing For 10,000 Woocommerce Products
A separate issue we faced presented a problem for users. Navigating a website with 10,000 products and 500 categories (with child-parent-grandparent subcategories) was difficult for customers. We created a unique and well-working breadcrumb feature, a fantastic mega menu, however, we noticed it was still difficult for customers to find what they wanted- especially if they were simply ‘window shopping’. Not only was that problematic, the store is extremely content-heavy hindering load time. Anything over 2 seconds to search for a product was unacceptable. We implemented two features that made major differences.
Algolia is a hosted site search platform that is becoming extremely popular. It delivers instant results as users type in a product search field and you can weight the search by whatever you wish: product title, SKU, description, popularity, etc. Algolia does not have an official WordPress plugin, so you’ll have to integrate it yourself, but it’s well worth the time and price. Users were able to quickly find their product from the auto suggest drop down rather than searching a keyword, browsing, and clicking the product.
This did two things for us. Firstly, it made user experience much more efficient. It increased our store’s overall conversion rate and most of all, it’s average order value. Customers were able to quickly find a product, add to cart, and rinse and repeat. This especially helped mobile users which had a much lower conversion rate prior. Secondly, it lowered load time by a great deal. A great deal of users no longer had to query multiple pages to find their product.
Increasing Front and Backend WooCommerce Speed
An extra step we implemented was integrating ElasticSearch, which delivers all WordPress queries through their optimized database instead of your MySQL tables. Everything from navigating pages on the backend to navigating pages on the frontend, Elastic can handle it. We used ElasticPress, which is a stable plugin for ElasticSearch. It may require some modification based on your setup, but it’s well worth it. Employees searching for users, orders, or products on the backend became a night and day speed improvement. Front end load time was fast as lightning.
To expand on Algolia, we also implemented it for backend order searches too. This allowed super quick and easy searching for orders based on any data related to an order, including product, customer address, and much more. Algolia can be added anywhere that’s needed (backend user search, for example) and can increase your efficiency while reducing server load.
Monitoring and Troubleshooting Woocommerce Performance
There are two big players when it comes to monitoring your performance: New Relic and Query Monitor. I won’t expand much on these two tools, but New Relic especially is well worth the investment. In a lot of cases, shops that are this large require a lot of customizations and a lot of plugins. This combination can frequently cause conflicts and disasters. If you’re running into performance issues on either the front or backend and want to pinpoint the culprit, New Relic is your tool. A colleague of mine recently called me frantically how his Woocommerce site crashed and hadn’t a clue what’s causing it. The crash was caused by a plugin doing daily license verification checks from their host, and for some reason or the other, the license check call queried the server 1000% beyond our max load, effectively causing a DoS attack. I wouldn’t have believed it (or knew about it!) if it wasn’t for New Relic. Safe to say, he switched plugins right after that.
Every Woocommerce store is unique and needs to be assessed by a case to case basis. If you have a question regarding your high volume WooCommerce store, facing issues with performance, feel free to reach out to us.