Why Performance Audits Matter
WordPress powers over 40 percent of the web, but the average WordPress site loads in 3-4 seconds — well above the 2-second threshold that users and search engines expect. A systematic performance audit identifies the specific bottlenecks slowing your site and prioritizes fixes by impact.
This checklist covers every layer of the WordPress stack, from server configuration to frontend delivery. We use this framework when conducting WordPress performance optimization engagements.
Server Environment
PHP Version and Configuration
# Check current PHP version
php -v
# Verify OPcache is enabled
php -i | grep opcache.enable
# Recommended php.ini settings
opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.revalidate_freq=60
opcache.save_comments=1
opcache.enable_cli=0
# PHP-FPM pool settings
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500
Audit items:
- PHP 8.3 or 8.4 for supported production stacks
- OPcache enabled with sufficient memory
- PHP-FPM pool sized for your traffic level
max_execution_timeset to 30s (not 300s)memory_limitset to 256M (not 512M unless necessary)
Web Server Configuration
# nginx performance configuration
server {
listen 443 ssl http2;
# Enable gzip
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript
text/xml application/xml application/xml+rss text/javascript
image/svg+xml;
gzip_min_length 256;
# Browser caching for static assets
location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff2|svg|webp|avif)$ {
expires 365d;
add_header Cache-Control "public, immutable";
add_header Vary "Accept-Encoding";
}
# FastCGI cache
fastcgi_cache_path /tmp/nginx-cache levels=1:2
keys_zone=WORDPRESS:100m inactive=60m max_size=1g;
fastcgi_cache_key "$scheme$request_method$host$request_uri";
location ~ \.php$ {
fastcgi_cache WORDPRESS;
fastcgi_cache_valid 200 60m;
fastcgi_cache_valid 404 1m;
fastcgi_cache_bypass $skip_cache;
fastcgi_no_cache $skip_cache;
add_header X-Cache-Status $upstream_cache_status;
}
}
Audit items:
- HTTP/2 or HTTP/3 enabled
- Gzip or Brotli compression active
- Static asset caching headers set (1 year for versioned assets)
- NGINX FastCGI cache or Varnish in front of WordPress
- TLS 1.3 with optimized cipher suites
Database Optimization
Query Performance
-- Find slow queries
SELECT * FROM information_schema.processlist
WHERE time > 2 AND command != 'Sleep';
-- Check table sizes and overhead
SELECT table_name,
ROUND(data_length / 1024 / 1024, 2) AS data_mb,
ROUND(index_length / 1024 / 1024, 2) AS index_mb,
table_rows
FROM information_schema.tables
WHERE table_schema = 'wordpress'
ORDER BY data_length DESC;
-- Clean up post revisions (keep last 5)
DELETE FROM wp_posts WHERE post_type = 'revision'
AND ID NOT IN (
SELECT ID FROM (
SELECT ID FROM wp_posts WHERE post_type = 'revision'
ORDER BY post_modified DESC LIMIT 5
) AS keep
);
-- Clean up transients
DELETE FROM wp_options WHERE option_name LIKE '%_transient_%'
AND option_name NOT LIKE '%_transient_timeout_%';
-- Optimize autoloaded options
SELECT SUM(LENGTH(option_value)) / 1024 AS autoload_kb
FROM wp_options WHERE autoload = 'yes';
-- Should be under 1MB
Audit items:
- Autoloaded options under 800KB
- No more than 50 active post revisions per post (limit in wp-config.php)
- Transients cleaned regularly
wp_poststable indexed onpost_typeandpost_statuswp_postmetahas index onmeta_key- MySQL/MariaDB query cache appropriately sized
- InnoDB buffer pool set to 70-80 percent of available RAM
wp-config.php Optimization
// Limit post revisions
define('WP_POST_REVISIONS', 5);
// Increase autosave interval
define('AUTOSAVE_INTERVAL', 120);
// Disable file editing in admin
define('DISALLOW_FILE_EDIT', true);
// Object cache (Redis)
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_DATABASE', 0);
// Optimize cron
define('DISABLE_WP_CRON', true);
// Use system cron instead:
// * * * * * cd /var/www/wordpress && php wp-cron.php
Plugin Audit
Plugins are the most common source of WordPress performance issues. Audit every active plugin:
# List all plugins with their impact
wp plugin list --fields=name,status,update
# Profile plugin load time
wp profile hook --all --spotlight --url=https://example.com
Audit items:
- Remove deactivated plugins entirely (they still load PHP files)
- Identify plugins adding excessive database queries (use Query Monitor)
- Replace heavy plugins with lightweight alternatives
- Check for plugins loading assets on every page when only needed on specific pages
- Verify no plugin conflicts causing PHP errors
- Total plugin count under 25 for most sites
Object Caching
Redis Configuration
# Install Redis
sudo apt install redis-server
# Verify Redis is running
redis-cli ping
# Expected: PONG
# Install WordPress Redis plugin
wp plugin install redis-cache --activate
wp redis enable
wp redis status
Audit items:
- Redis or Memcached installed and connected
- Object cache hit ratio above 85 percent
- Redis
maxmemoryset appropriately (256MB-1GB depending on site size) maxmemory-policyset toallkeys-lru
Frontend Performance
Core Web Vitals
# Test with Lighthouse CLI
npx lighthouse https://example.com --only-categories=performance --output=json
# Key metrics to check:
# LCP (Largest Contentful Paint) < 2.5s
# FID (First Input Delay) < 100ms
# CLS (Cumulative Layout Shift) < 0.1
# INP (Interaction to Next Paint) < 200ms
Audit items:
- Images converted to WebP/AVIF with proper sizing
- Lazy loading on below-the-fold images
- Critical CSS inlined, non-critical CSS deferred
- JavaScript deferred or loaded async where possible
- No render-blocking resources in the head
- Font display set to
swapfor custom fonts - Preload LCP image and critical fonts
CDN Configuration
Audit items:
- CDN active for all static assets (images, CSS, JS, fonts)
- CDN caching headers properly configured
- Origin pull zones set up correctly
- CDN invalidation working for deployments
- Consider full-page CDN caching for logged-out visitors
Security-Performance Intersection
Several security measures also improve performance:
- Block bad bots at the server level (reduces unnecessary PHP execution)
- Use Cloudflare or AWS WAF to filter malicious traffic before it hits WordPress
- Disable XML-RPC if not needed (
add_filter('xmlrpc_enabled', '__return_false')) - Limit login attempts to prevent brute-force load
Monitoring After Optimization
Set up ongoing monitoring to catch performance regressions:
- Uptime monitoring with response time tracking
- Weekly Lighthouse CI runs against key pages
- Real User Monitoring (RUM) for actual visitor experience data
- Database slow query log enabled and reviewed monthly
Expected Results
A thorough performance audit and optimization typically achieves:
- TTFB under 200ms (from 800ms+ typical)
- LCP under 1.5s (from 3-4s typical)
- PageSpeed score above 90 (from 40-60 typical)
- Database query count under 30 per page (from 100+ typical)
For a hands-on performance audit and optimization of your WordPress installation, explore our WordPress optimization services. Regular audits ensure your site maintains peak performance as content and traffic grow.
Need help with this?
Our team handles this kind of work daily. Let us take care of your infrastructure.
Related Articles
WordPress 6.8 "Cecil": What's New & How It Makes Your Site Better
A deep dive into WordPress 6.8 Cecil, covering speculative prefetch, bcrypt password hashing, BLAKE2b token encryption, editor improvements, classic theme style variations, and new developer APIs.
WordPressEnhancing WordPress Security
A comprehensive guide to securing WordPress sites, covering updates, strong passwords, hosting, two-factor authentication, security plugins, SSL, login limits, wp-config hardening, and backups.
WordPressHow to Optimize Your WordPress Site SEO with WP Rocket
A step-by-step guide to configuring WP Rocket for optimal SEO performance, covering caching, file optimization, media loading, database cleanup, CDN integration, and add-ons.