Every second counts in e-commerce. Research consistently shows that a one-second delay in page load time can reduce conversions by 7 percent. For a WooCommerce store processing thousands of orders per month, that translates directly to lost revenue. This case study documents how our team at WPPoland transformed a struggling European furniture e-commerce store from a PageSpeed score of 40 to 98 - and what that meant for their bottom line.
The Client: A European Furniture E-Commerce Store
Our client operates a mid-size online furniture store serving customers across Central and Western Europe. With a catalog of over 3,500 products, 12,000 product images, and average order values exceeding EUR 420, the stakes were high. Their WooCommerce store had grown organically over five years, accumulating technical debt with every plugin installation, theme customization, and third-party integration.
By early 2026, the store was hemorrhaging revenue. Competitors with faster sites were outranking them in search results, and mobile users - who accounted for 64 percent of their traffic - were abandoning the site in droves.
The Challenge: Death by a Thousand Plugins
When we first audited the site, we found a familiar but severe pattern of performance degradation:
- 38 active plugins, many with overlapping functionality
- Shared hosting environment with no server-level caching
- Unoptimized database with over 2.3 million expired transients
- 12,000 product images served as uncompressed PNG and JPEG files
- No CDN - all assets served from a single origin server in Germany
- Render-blocking JavaScript from 14 plugins loading on every page
- 5-step checkout process with 22 form fields
The result was a site that felt broken on mobile. Pages took 8 seconds to load, the layout jumped around as elements rendered, and the checkout process was so cumbersome that 68 percent of visitors bounced before completing a purchase.
Before Metrics
| Metric | Value | Rating |
|---|---|---|
| PageSpeed Score (Mobile) | 40 | Poor |
| Largest Contentful Paint (LCP) | 8.2s | Poor |
| Interaction to Next Paint (INP) | 680ms | Poor |
| Cumulative Layout Shift (CLS) | 0.35 | Poor |
| Conversion Rate | 2.3% | Below Industry Avg |
| Bounce Rate | 68% | Critical |
| Time to First Byte (TTFB) | 2.4s | Poor |
| Total Page Weight | 6.8 MB | Excessive |
Our Approach: The 7-Phase Optimization Methodology
We follow a systematic, data-driven approach to WordPress speed optimization. Each phase builds on the previous one, and we measure the impact of every change in isolation before moving to the next.
Phase 1: Technical Audit (Days 1–3)
Before touching a single line of code, we spent three days profiling every aspect of the site:
- GTmetrix Waterfall Analysis to identify the longest request chains
- WebPageTest multi-location tests from Frankfurt, London, and Warsaw
- Chrome DevTools Performance Panel recording to profile main-thread activity
- Database query logging using the Query Monitor plugin to find slow queries
- Plugin profiling to measure each plugin’s impact on page load
The audit revealed that 73 percent of the load time was attributable to three factors: unoptimized images (31 percent), excessive JavaScript (26 percent), and slow database queries (16 percent).
Phase 2: Server Optimization (Days 4–7)
The foundation of any fast website is the server. We migrated the client from shared hosting to a dedicated VPS with the following stack:
- LiteSpeed Web Server with HTTP/3 and QUIC support
- Redis Object Cache for persistent WordPress object caching
- MariaDB 11.4 with optimized
my.cnfconfiguration - PHP 8.3 with OPcache preloading enabled
The LiteSpeed configuration included specific tuning for WooCommerce:
# LiteSpeed cache rules for WooCommerce
<IfModule LiteSpeed>
CacheLookup on
RewriteRule .* - [E=Cache-Control:no-autoflush]
RewriteRule ^/cart.* - [E=Cache-Control:no-cache]
RewriteRule ^/checkout.* - [E=Cache-Control:no-cache]
RewriteRule ^/my-account.* - [E=Cache-Control:no-cache]
</IfModule>
The Redis configuration was tuned for WooCommerce session handling:
// wp-config.php additions for Redis
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_DATABASE', 0);
define('WP_REDIS_MAXTTL', 86400);
define('WP_REDIS_PREFIX', 'wc_store_');
define('WP_REDIS_SELECTIVE_FLUSH', true);
Impact after Phase 2: TTFB dropped from 2.4 seconds to 180 milliseconds.
Phase 3: Database Cleanup (Days 8–11)
Five years of operation had left the database in a critical state. We performed a methodical cleanup:
- Removed 2.3 million expired transients - the
wp_optionstable had grown to 847 MB - Optimized 47 slow queries identified during the audit phase
- Added missing indexes to
wp_postmetaandwp_wc_order_statstables - Cleaned orphaned post meta - 340,000 rows of metadata for deleted products
- Converted tables to InnoDB where MyISAM was still in use
The custom indexing significantly improved product search and filtering:
-- Custom indexes for WooCommerce product queries
ALTER TABLE wp_postmeta ADD INDEX idx_meta_lookup (meta_key, meta_value(32));
ALTER TABLE wp_wc_product_meta_lookup ADD INDEX idx_price_stock (min_price, max_price, stock_status);
ALTER TABLE wp_woocommerce_order_items ADD INDEX idx_order_type (order_id, order_item_type);
Impact after Phase 3: Database query time dropped by 84 percent, and the wp_options table shrank from 847 MB to 12 MB.
Phase 4: Image Optimization (Days 12–15)
With 12,000 product images, this phase had the largest individual impact on page weight:
- Converted all images to AVIF format with WebP fallback for older browsers
- Implemented responsive
srcsetwith breakpoints at 320, 640, 960, 1280, and 1920 pixels - Added lazy loading with native
loading="lazy"for all below-the-fold images - Set explicit dimensions on every
<img>tag to eliminate CLS from image loading - Implemented blur-up placeholders using Low Quality Image Placeholders (LQIP)
The image processing pipeline was automated using a custom WP-CLI command:
wp media regenerate --image_size=all --format=avif --quality=75
Impact after Phase 4: Average page weight dropped from 6.8 MB to 1.2 MB. LCP improved from 5.1 seconds (post-server optimization) to 1.4 seconds.
Phase 5: JavaScript Audit (Days 16–19)
The JavaScript audit was surgical. We categorized every script on the site:
| Category | Scripts | Action |
|---|---|---|
| Critical (checkout, cart) | 4 | Kept, optimized |
| Analytics & tracking | 3 | Moved to Web Worker |
| Unused plugin scripts | 14 | Removed entirely |
| UI enhancements | 6 | Deferred, conditionally loaded |
For the analytics scripts, we implemented a delayed loading pattern:
// Delay non-critical scripts until user interaction
const loadDeferredScripts = () => {
const scripts = document.querySelectorAll('script[data-defer-src]');
scripts.forEach(script => {
const newScript = document.createElement('script');
newScript.src = script.dataset.deferSrc;
newScript.async = true;
document.body.appendChild(newScript);
});
};
['mouseover', 'touchstart', 'scroll', 'keydown'].forEach(event => {
window.addEventListener(event, loadDeferredScripts, { once: true });
});
We also eliminated render-blocking CSS by inlining critical styles and deferring the full stylesheet:
<link rel="preload" href="/wp-content/themes/theme/style.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="/wp-content/themes/theme/style.css"></noscript>
Impact after Phase 5: INP dropped from 680ms to 62ms. Total JavaScript payload reduced by 78 percent.
Phase 6: Checkout Optimization (Days 20–23)
A fast site means nothing if the checkout is a conversion killer. We redesigned the entire checkout flow:
- Reduced from 5 steps to 2 steps (shipping + payment on one page, confirmation on the next)
- Removed 14 unnecessary form fields (company name, phone 2, fax, etc.)
- Added express payment options (Apple Pay, Google Pay, Klarna)
- Implemented address autocomplete using the Google Places API
- Added real-time form validation to prevent errors at submission
// Remove unnecessary WooCommerce checkout fields
add_filter('woocommerce_checkout_fields', function ($fields) {
unset($fields['billing']['billing_company']);
unset($fields['billing']['billing_phone_2']);
unset($fields['billing']['billing_fax']);
unset($fields['order']['order_comments']);
return $fields;
});
// Add express payment gateway support
add_action('woocommerce_review_order_before_payment', function () {
if (class_exists('WC_Payment_Gateway')) {
echo '<div id="express-checkout-buttons" class="express-payment-wrapper">';
do_action('woocommerce_express_checkout_buttons');
echo '</div>';
}
});
Impact after Phase 6: Cart abandonment rate dropped by 34 percent. Average checkout completion time reduced from 4 minutes 12 seconds to 1 minute 38 seconds.
Phase 7: CDN and Edge Caching (Days 24–28)
The final layer of optimization ensured that the performance gains were consistent across all European markets:
- Cloudflare Pro with custom page rules for WooCommerce
- Edge caching for static product pages with 4-hour TTL
- Browser caching headers with cache-busting via content hashing
- Brotli compression enabled at the edge for all text-based assets
- Early Hints (103) for critical resources
# Cloudflare page rules
URL: *example.com/product/*
Cache Level: Cache Everything
Edge Cache TTL: 4 hours
Browser Cache TTL: 1 hour
URL: *example.com/cart*
Cache Level: Bypass
URL: *example.com/checkout*
Cache Level: Bypass
Impact after Phase 7: Global TTFB dropped to under 100 milliseconds. Users in Western Europe experienced sub-800ms full page loads.
The Results: After Metrics
After four weeks of systematic optimization, the transformation was dramatic:
| Metric | Before | After | Improvement |
|---|---|---|---|
| PageSpeed Score (Mobile) | 40 | 98 | +145% |
| Largest Contentful Paint (LCP) | 8.2s | 0.8s | -90% |
| Interaction to Next Paint (INP) | 680ms | 45ms | -93% |
| Cumulative Layout Shift (CLS) | 0.35 | 0.02 | -94% |
| Conversion Rate | 2.3% | 4.8% | +108% |
| Bounce Rate | 68% | 34% | -50% |
| Time to First Byte (TTFB) | 2.4s | 0.09s | -96% |
| Total Page Weight | 6.8 MB | 1.1 MB | -84% |
Business Impact: The Numbers That Matter
Technical metrics are satisfying, but business metrics are what justify the investment:
- +108% conversion rate increase - from 2.3% to 4.8%
- +156% mobile revenue - mobile users could finally shop without frustration
- -52% bounce rate reduction - visitors stayed and browsed instead of leaving
- ROI achieved in 6 weeks - the optimization project paid for itself in under two months
- +23% average order value - faster product browsing led to more items per cart
- +41% organic traffic - improved Core Web Vitals contributed to better search rankings within 8 weeks
The client estimated that the annual revenue increase attributable to the optimization exceeded EUR 380,000, against a project cost that was a fraction of that figure.
Lessons Learned
Every optimization project teaches us something new. Here are the key takeaways from this engagement:
1. Server Infrastructure Is the Foundation
No amount of front-end optimization can compensate for a slow server. The migration from shared hosting to a tuned LiteSpeed VPS accounted for 35 percent of the total performance improvement.
2. Database Hygiene Is Non-Negotiable
WooCommerce stores generate enormous amounts of transient data. Without regular cleanup, the wp_options table becomes a bottleneck that affects every single page load. Automated weekly cleanup should be standard for any WooCommerce store.
3. Fewer Plugins, Faster Store
Of the 38 plugins installed, 14 were either unused, redundant, or replaceable with lightweight code snippets. Every plugin adds database queries, JavaScript, and CSS - even when its functionality is not needed on the current page.
4. Images Are the Low-Hanging Fruit
Converting to AVIF and implementing responsive images reduced page weight by over 80 percent. This single change, which can be largely automated, delivers the most visible improvement to end users.
5. Checkout UX Is a Revenue Lever
The checkout redesign, while not a traditional “performance” optimization, had the most direct impact on revenue. Reducing friction in the purchase flow is as valuable as reducing load times.
6. Measure Everything in Isolation
By implementing changes in phases and measuring after each one, we could quantify the exact impact of every optimization. This data-driven approach prevents wasted effort and builds a clear narrative for stakeholders.
Timeline Summary
| Week | Phase | Key Activities |
|---|---|---|
| Week 1 | Audit + Server | Full technical audit, server migration, Redis setup |
| Week 2 | Database + Images | Transient cleanup, query optimization, AVIF conversion |
| Week 3 | JavaScript + Checkout | Plugin removal, script deferral, checkout redesign |
| Week 4 | CDN + QA | Cloudflare setup, edge caching, comprehensive testing |
Is Your WooCommerce Store Leaving Money on the Table?
If your store scores below 70 on PageSpeed Insights, you are losing customers every single day. Our WooCommerce optimization service follows the same proven methodology described in this case study, tailored to your specific store and infrastructure.
We offer a free initial performance audit - a detailed report showing exactly where your store is losing speed and how much revenue that costs you. No obligations, no sales pitch, just data.
Contact WPPoland to schedule your audit, or learn more about our WordPress speed optimization services.


