Browser cache misconfigured on WordPress

Cache-Control headers are absent or misconfigured. Browsers do not cache your static files (images, CSS, JS).

Why it matters

Without browser cache, each visit re-downloads all files - even unchanged images and scripts. Good caching can reduce load time for return visits by 80%.

How to fix

  1. 1

    Via .htaccess (Apache)

    apache
    <IfModule mod_expires.c>
      ExpiresActive On
      # Images : 1 an
      ExpiresByType image/jpeg "access plus 1 year"
      ExpiresByType image/png "access plus 1 year"
      ExpiresByType image/webp "access plus 1 year"
      ExpiresByType image/svg+xml "access plus 1 year"
      # CSS et JS : 1 mois
      ExpiresByType text/css "access plus 1 month"
      ExpiresByType application/javascript "access plus 1 month"
      # HTML : pas de cache (contenu dynamique)
      ExpiresByType text/html "access plus 0 seconds"
    </IfModule>
  2. 2

    Via Nginx

    nginx
    location ~* \.(jpg|jpeg|png|webp|svg|css|js|woff2)$ {
      expires 1y;
      add_header Cache-Control "public, immutable";
    }
  3. 3

    Asset versioning (cache busting)

    To avoid serving outdated files, WordPress automatically versions its assets via the ?ver= parameter. Your theme and plugins should do the same.

Ready to fix this issue on your site?

Audit my site for free →