DIY guide
How To Optimize WordPress Speed WITHOUT Plugins
Updated October 15, 2026
You can get a lot of speed from WordPress without installing a speed plugin. Be honest about the trade-off, though: a good caching plugin is easier than most manual alternatives. This guide shows what you can do with your host, your files and a few lines of code, so you rely on fewer plugins.
1. Start with the right foundation
- Choose hosting that offers server-level page caching.
- Use a currently supported PHP version.
- Pick a lightweight theme. A theme that loads little CSS and JavaScript saves more than any tweak.
2. Prepare images before you upload
Resize each image to the size it is displayed at, export it as WebP, and compress it. A free web tool such as Squoosh does this in your browser. WordPress serves WebP files, and recent versions also accept AVIF. WordPress also adds lazy loading and responsive image sizes by itself, so keep the image at the very top of the page free from lazy loading.
3. Remove features you do not use
Add this to the functions.php file of a child theme, so a theme update does not erase it. It removes the emoji script and the embed script:
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'wp_print_styles', 'print_emoji_styles' );
add_action( 'wp_enqueue_scripts', function () {
wp_deregister_script( 'wp-embed' );
} );
functions.php can take your site down. Edit through FTP or your host’s file manager, so you can undo the change quickly.4. Turn on compression and browser caching
On Apache or LiteSpeed servers, you can add rules to the .htaccess file in your site’s root. Back it up first, because many hosts already set this up.
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/css application/javascript application/json image/svg+xml
</IfModule>
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/webp "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType font/woff2 "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
</IfModule>
Nginx uses different configuration files. Ask your host to apply the equivalent settings.
5. Use a CDN at the DNS level
Services such as Cloudflare work by pointing your domain to them, not by installing a plugin. The free plan already provides a CDN and compression.
6. Limit what WordPress stores
Cap post revisions with define( 'WP_POST_REVISIONS', 5 ); in wp-config.php, and read the guide on database queries.
7. Delete what you do not use
Delete unused plugins and themes. Inactive ones do not slow your pages, but they add security risk and clutter.
What you cannot do easily without a plugin
Page caching, critical CSS and per-page script control are hard to do by hand. If your host does not provide caching, a single well-configured caching plugin is usually the best choice.
Prefer to have this done for you?
We test your site, fix what slows it down, and send a before-and-after report.