WordPress powers 43% of the web. It’s also frequently blamed for slow sites — but slow WordPress sites are almost always a configuration problem, not a WordPress problem. A properly optimized WordPress site can score 95+ on PageSpeed Insights and load in under 1 second. Here’s how.

Measure First, Optimize Second

Don’t guess what’s slow. Use these tools to get a baseline:

Run tests from a cold cache (disable caching temporarily) to see your true baseline.

The Server Stack Matters Most

The single biggest performance lever is your hosting and server configuration. In order of impact:

  1. PHP version — PHP 8.2+ is ~30% faster than PHP 7.4. Update immediately if you haven’t.
  2. OPcache — caches compiled PHP bytecode in memory. Should be enabled on any production server.
  3. Redis object cache — caches WordPress database query results in memory. Critical for sites with heavy wp_options usage.
  4. Server hardware — more CPU cores and RAM directly improve response time under load.

Largest Contentful Paint (LCP): Make It Fast

LCP measures how quickly the largest visible element loads — usually a hero image or headline. Google’s Core Web Vitals threshold is under 2.5 seconds. To improve LCP:

Cumulative Layout Shift (CLS): Stop Things From Jumping

CLS measures visual stability — elements that shift after initial render. Common causes in WordPress:

Interaction to Next Paint (INP): Responsive Clicks

INP replaced FID as a Core Web Vitals metric in 2024. It measures how quickly your page responds to user interactions — clicks, taps, keyboard input. Poor INP is almost always caused by excessive JavaScript on the main thread.

Audit with Chrome DevTools Performance Insights. Long tasks (>50ms) block the main thread. Break them up with scheduler.yield() or move work to Web Workers.

Critical CSS and Font Loading

Render-blocking CSS delays the First Contentful Paint. Inline your critical CSS (above-the-fold styles) and load the rest asynchronously:

<link rel="preload" href="styles.css" as="style" onload="this.onload=null;this.rel='stylesheet'">

For fonts, preload the specific weights you use and use font-display: swap to avoid invisible text during font load.

WordPress-Specific Optimizations

Caching Stack for WordPress

A complete caching stack has four layers:

  1. Bytecode cache — OPcache (server level)
  2. Object cache — Redis or Memcached (database query results)
  3. Page cache — full HTML of each page (WP Rocket, LiteSpeed, or Nginx)
  4. CDN cache — static assets cached at edge (Cloudflare, Bunny.net)

Layers 1 and 2 are server configuration. Layers 3 and 4 are plugin + CDN configuration. All four together produce the fastest possible WordPress response time.

The 95+ PageSpeed Score Goal

Scoring 95+ on PageSpeed Insights is achievable on a well-configured WordPress site. The roadmap: fix your server stack, implement all four cache layers, optimize images, eliminate render-blocking resources, and audit your JavaScript. Each step produces measurable improvement.

Running a WooCommerce store? Also check out our guide on optimizing your shipping workflow — a fast store and a fast fulfillment process go hand in hand. Questions? Contact our team.

High-Performance Order Storage (HPOS) is the most impactful database improvement WooCommerce has shipped in years. Orders move from the overcrowded wp_posts and wp_postmeta tables into dedicated, indexed order tables — and the performance difference is dramatic. Here’s how to migrate safely.

Why HPOS Matters

Legacy WooCommerce stores every piece of order data — customer name, line items, shipping address, payment method, custom meta — in the generic WordPress post meta table. As your store grows, this table becomes enormous and queries slow down.

HPOS introduces dedicated tables: wc_orders, wc_order_items, wc_order_addresses, and wc_order_operational_data. These tables are purpose-built for order data with appropriate indexes, foreign keys, and query optimization. The result:

Before You Migrate: Compatibility Check

The most important step is verifying plugin compatibility. Any plugin that directly queries wp_posts or wp_postmeta for order data (instead of using WooCommerce’s order API) will break with HPOS.

WooCommerce provides a compatibility report under WooCommerce → Status → Features. Plugins that are HPOS-compatible declare compatibility explicitly. Check every active plugin before proceeding.

Well-maintained plugins have already added HPOS compatibility — the TheForge EasyPost Shipping plugin is fully HPOS-compatible and has been since the feature entered beta.

Step 1: Create a Full Database Backup

This is non-negotiable. Use your host’s backup tool, WP-CLI, or a plugin like UpdraftPlus to create a complete database backup immediately before migration. Store it somewhere outside your WordPress installation.

Step 2: Enable Compatibility Mode First

WooCommerce offers a Compatibility Mode that runs both the legacy post tables and the new HPOS tables in sync. Enable this first — it lets you test HPOS while keeping legacy data intact as a fallback.

Go to WooCommerce → Settings → Advanced → Features → Order Storage and select “WooCommerce orders tables (compatibility mode)”.

Step 3: Run the Migration

After enabling compatibility mode, WooCommerce will prompt you to run the data migration. This syncs your existing orders into the new HPOS tables. The migration runs in the background via Action Scheduler — for stores with 10,000+ orders, this may take several hours.

Monitor progress under WooCommerce → Status → Scheduled Actions. Don’t run other heavy batch operations while the migration is in progress.

Step 4: Test Thoroughly

With compatibility mode active, test every order-related workflow:

Step 5: Switch to HPOS-Only Mode

Once you’ve confirmed everything works correctly in compatibility mode, switch to HPOS-only: WooCommerce orders tables (recommended). This disables the legacy post table sync and runs purely on HPOS.

You’ll immediately notice faster order list loads and quicker bulk operations.

Rollback Plan

If something goes wrong after switching to HPOS-only, you can re-enable compatibility mode, which re-syncs from the HPOS tables back to legacy. If that fails, restore your pre-migration database backup.

Is It Worth It?

For stores with 1,000+ orders, the performance improvement is immediately noticeable. For stores with 10,000+ orders, HPOS migration is essential — the alternative is a database that continues to degrade as you scale. Migrate now while your order volume is manageable rather than waiting until performance becomes a crisis.

Need help with the migration or plugin compatibility questions? Our support team is here to help.