Navigate through the case study sections
Yoast.com had relied on Easy Digital Downloads (EDD) since the early days of its premium plugin offerings. As the SEO plugin climbed to the top of WordPress.org charts and the blog drew millions of visitors, the shortcomings of EDD grew serious. Customers asked for more currencies, subscriptions, and improved account features—requests that turned into lengthy custom hacks. A solid engine built for digital goods was no longer enough to handle the global scale and planned expansions. The team decided to rebuild the store on a modern, expansive platform that would accept orders in euros, dollars, and more, maintain accurate historical records, and simplify maintenance.
During a kickoff meeting in January 2017, Yoast’s architects—Joost, Omar, Jip, and Anton—mapped out every requirement. They needed multi-currency sales, automated recurring billing, integrated user accounts, and a future-proof system compatible with expected traffic growth. The conversation returned again to WordPress. No one wanted to leave the CMS that powered the SEO community. WooCommerce stood out because of its built in REST API, extensive plugin library, and active developer ecosystem. It promised a robust data model for orders, shipments, and refunds without reinventing the wheel.
However, WooCommerce by default only handles a single currency per store. To stretch its capabilities, the team explored custom currency plugins but decided those paths risked closure if the provider ceased support. They needed a durable, low-maintenance approach.
Rather than force a single WooCommerce install to juggle exchange rates, Yoast leveraged WordPress multisite. Each sub-site was dedicated to one currency—one URL for USD, another for EUR. The switcher on the front end allows users to choose their preferred shop, and WooCommerce processes everything in the local currency on each domain. Adding a new currency is as simple as spinning up a site copy and duplicating the store settings.
To prepare for future language support, MultilingualPress ties the sites together. This plugin elegantly links content across the network without excessive custom code. The result is a flexible framework where new regions and languages can be added with minimal effort.
Migrating years of orders and customer data required a reliable pipeline. The entire export resided in a single serialized meta field—compact but opaque. The team picked Pandas, a Python library designed for large datasets. Scripts extracted the serialized blobs, then shell-invoked PHP’s unserialize function to decode the data into structured rows. Once transformed, orders, line items, coupons, and subscription records were batch inserted into WooCommerce tables across the multisite network.
Testing was crucial. The engineers ran the migration on a staging replica of the live database, verified order counts, SKU alignment with finance systems, and refund histories. Only when the numbers matched exactly did they schedule the live switch.
To see all orders in one place, the team developed MyYoast. Webhooks in WooCommerce fire on every order creation, update, and refund event. A custom scheduler intercepts these calls and pushes them into a PHP-based delayed job queue. Workers consume the queue, enrich the payload, and store records in a central database. This architecture ensures orders sync reliably, even under brief downtime of the receiving service.
Customers log into MyYoast to view licenses, download products, and manage subscriptions. Support staff use the same interface to handle refunds and transfers quickly.
Initial load tests showed that every order-related page forced a full WP_Query and order model instantiation, hammering the database. The solution was to introduce an object cache layer using Redis, cutting response times by more than half for recurring calls. The Yoast team also submitted patches to WooCommerce’s core to cache currency lookups, reducing translation overhead. For subscription and order searches, a custom search service on MyYoast bypasses heavy meta queries until WooCommerce ships custom tables on its roadmap.
Throughout the project, Composer managed PHP dependencies, locking versions and streamlining updates. The team adhered to principles inspired by The Twelve-Factor App: separate config from code, treat logs as event streams, and run stateless processes. Automatic plugin updates were disabled in favor of controlled, CI-driven deployments.
Since the August 2017 launch, Yoast’s store has run smoothly under peak traffic, handled all SEO plugin subscriptions flawlessly, and made it trivial to add new currencies and languages. The platform can now scale as Yoast expands into British pounds, a process estimated to take a single day of configuration. The store foundation is ready for more integrations like a regional sales dashboard and automated support workflows.
By moving to WooCommerce and adopting modern tooling, Yoast built a sustainable, future-focused ecommerce solution that supports millions of users worldwide.
Subscribe to access the tools and technologies used in this case study.
Subscribe NowSubscribe to access the step-by-step replication guide for this case study.
Subscribe NowShare your success story with our community of entrepreneurs.
Discover other inspiring business success stories
Pixel Football Logos: Sandbox Colour by Numbers, a pixel art coloring app targeting soccer fans, achieved over 500,000 d...
Pixel Football Logos: Sandbox Colour by Numbers
In 2022, data analyst Marie launched a Telegram channel dedicated to analytics tips and career resources. Through high-q...
Marie's Telegram Channels
Monos, the Canadian minimalist luggage brand, tackled multi‐store checkout complexity by moving from checkout.liquid to ...
Monos