Troubleshooting

Slow Site Despite Caching

Your site is cached but still feels slow? Here's what to check.

1. Verify caching is working

First, confirm your content is actually being cached. Check the response headers:

X-Cache: HIT ← Content served from cache
X-Cache: MISS ← Content fetched from origin

If you see all MISSes, check if your origin is sending Cache-Control: no-cache or private headers.

How to check if cache is working →

2. Check for uncached resources

Even if your HTML is cached, slow third-party resources can drag down performance.

Common culprits:

  • Google Fonts loaded synchronously
  • Analytics scripts (Google Analytics, Facebook Pixel)
  • Chat widgets (Intercom, Drift, Crisp)
  • External ad scripts
  • Social media embeds

Tip: Load third-party scripts with async or defer attributes to prevent them from blocking page render.

3. Large images on the page

Even with WebP conversion, oversized images slow down LCP.

Solutions:

  • Resize images to the actual display size (don't serve 4000px images for 800px containers)
  • Use responsive images with srcset
  • Lazy load images below the fold
  • Consider using a hero image that's optimized for the viewport

4. Slow origin server

For cache MISSes (first requests, dynamic pages), your origin speed still matters.

Check your origin:

  • Slow database queries (check slow query logs)
  • Missing database indexes
  • Too many plugins (WordPress/WooCommerce)
  • Insufficient server resources
  • No opcode caching (PHP)

Goal: Origin TTFB should be under 500ms. Fast caching amplifies your origin speed — a fast origin means even faster cached responses.

5. Render-blocking resources

CSS and JS in the <head> block page rendering.

Solutions:

  • Inline critical CSS in the <head>
  • Load non-critical CSS with media="print" onload="this.media='all'"
  • Add defer to JavaScript files
  • Move scripts to the bottom of <body>

Performance checklist

  • X-Cache shows HIT for static resources
  • Third-party scripts are async/deferred
  • Images are appropriately sized
  • Origin TTFB is under 500ms
  • No render-blocking resources in head