{"id":198,"date":"2026-10-29T21:26:38","date_gmt":"2026-10-29T20:26:38","guid":{"rendered":"https:\/\/nodeguard.io\/blog\/?p=198"},"modified":"2026-10-29T21:33:35","modified_gmt":"2026-10-29T20:33:35","slug":"how-to-speed-up-a-wordpress-website","status":"publish","type":"post","link":"https:\/\/nodeguard.io\/blog\/how-to-speed-up-a-wordpress-website\/","title":{"rendered":"How to Speed Up a WordPress Website: 14 Brilliant Fixes That Actually Work"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">A slow site costs you visitors, sales and search rankings, and most of the time the cause is fixable in an afternoon. This guide shows you how to speed up a WordPress website step by step, starting with the changes that make the biggest difference and ending with the small tweaks that polish the result. You don&#8217;t need to be a developer. Most fixes are a setting, a plugin or a single command, and every one of them is explained in plain language.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">We&#8217;ll start by measuring your current WordPress speed, so you know where the time actually goes. Then we&#8217;ll work through 14 fixes grouped by layer: the server, caching, images, the front end and the WordPress database. Work in that order and you&#8217;ll see real gains after the first few fixes, not just after the last one.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why WordPress Speed Matters<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress speed is not a vanity metric. It affects three things you care about.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Visitors leave slow pages.<\/strong> People expect a page to appear in about two seconds. Every extra second of waiting raises the chance they hit the back button, especially on mobile, where connections are slower and patience is shorter.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Google measures it.<\/strong> Page experience, including the Core Web Vitals, is part of how Google evaluates pages. Speed alone won&#8217;t push weak content to the top, but between two similar pages, the faster one has the edge.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Slow sites cost more to run.<\/strong> A page that takes 900 ms of PHP work to build uses far more server resources than a cached page served in 20 ms. Better WordPress speed means your server handles traffic spikes instead of falling over during them.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The good news is that WordPress itself is not slow. A fresh install on decent hosting loads quickly. Sites get slow because of what gets added over time: heavy themes, a pile of plugins, uncompressed images, and no caching. That&#8217;s why fixing WordPress speed is mostly about removing waste and adding caching, not about rebuilding your site.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Measure First: Core Web Vitals and Your Baseline<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Before you change anything, record a baseline. Without one, you can&#8217;t tell which fix helped and which did nothing. Test your homepage plus one typical post or product page, because they often behave very differently.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use these free tools:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><a href=\"https:\/\/pagespeed.web.dev\/\" target=\"_blank\" rel=\"noopener\">PageSpeed Insights<\/a><\/strong> shows lab data from Lighthouse and, for sites with enough traffic, real-user field data from Chrome users.<\/li>\n\n\n\n<li><strong>Your browser&#8217;s DevTools<\/strong> (Network and Performance tabs) show every request in order, so you can see exactly what blocks the page.<\/li>\n\n\n\n<li><strong>Google Search Console<\/strong> groups your URLs into good, needs improvement and poor under its Core Web Vitals report.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">The three Core Web Vitals<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Google&#8217;s <a href=\"https:\/\/web.dev\/articles\/vitals\" target=\"_blank\" rel=\"noopener\">Core Web Vitals<\/a> are the three metrics that matter most for user experience. Aim for the &#8220;good&#8221; threshold on each:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Metric<\/th><th>What it measures<\/th><th>Good<\/th><\/tr><\/thead><tbody><tr><td><strong>LCP<\/strong> (Largest Contentful Paint)<\/td><td>How long until the main content, usually the hero image or headline, appears<\/td><td>2.5 s or less<\/td><\/tr><tr><td><strong>INP<\/strong> (Interaction to Next Paint)<\/td><td>How quickly the page responds when someone clicks, taps or types<\/td><td>200 ms or less<\/td><\/tr><tr><td><strong>CLS<\/strong> (Cumulative Layout Shift)<\/td><td>How much the layout jumps around while loading<\/td><td>0.1 or less<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Also note <strong>TTFB<\/strong> (Time to First Byte). It isn&#8217;t one of the Core Web Vitals, but it&#8217;s the time your server takes to start answering, and every other metric waits for it. If your TTFB is above about 600 ms, your server or caching is the bottleneck, and front-end tweaks won&#8217;t save you.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Write down your scores, your TTFB and your total page weight. This is your WordPress speed baseline. Run each test three times and use the median, because single runs vary.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/nodeguard.io\/blog\/wp-content\/uploads\/2026\/10\/speed-up-wordpress-load-time-1024x576.webp\" alt=\"How to speed up a WordPress website \u2013 where page load time goes, from server response to render-blocking files and the main image\" class=\"wp-image-199\" srcset=\"https:\/\/nodeguard.io\/blog\/wp-content\/uploads\/2026\/10\/speed-up-wordpress-load-time-1024x576.webp 1024w, https:\/\/nodeguard.io\/blog\/wp-content\/uploads\/2026\/10\/speed-up-wordpress-load-time-300x169.webp 300w, https:\/\/nodeguard.io\/blog\/wp-content\/uploads\/2026\/10\/speed-up-wordpress-load-time-768x432.webp 768w, https:\/\/nodeguard.io\/blog\/wp-content\/uploads\/2026\/10\/speed-up-wordpress-load-time-900x506.webp 900w, https:\/\/nodeguard.io\/blog\/wp-content\/uploads\/2026\/10\/speed-up-wordpress-load-time.webp 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Every page load follows the same path. Find the slowest stage, fix it first.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">How to Speed Up a WordPress Website: 14 Brilliant Fixes<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Here are all 14 fixes at a glance. They&#8217;re ordered by impact, so if you only have an hour, do the first seven.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>#<\/th><th>Fix<\/th><th>Layer<\/th><th>Effort<\/th><\/tr><\/thead><tbody><tr><td>1<\/td><td>Move to fast hosting<\/td><td>Server<\/td><td>Medium<\/td><\/tr><tr><td>2<\/td><td>Run a current PHP version<\/td><td>Server<\/td><td>Low<\/td><\/tr><tr><td>3<\/td><td>Enable OPcache and tune PHP-FPM<\/td><td>Server<\/td><td>Low<\/td><\/tr><tr><td>4<\/td><td>Turn on HTTP\/2 or HTTP\/3 and compression<\/td><td>Server<\/td><td>Low<\/td><\/tr><tr><td>5<\/td><td>Enable page caching<\/td><td>Caching<\/td><td>Low<\/td><\/tr><tr><td>6<\/td><td>Add a Redis object cache<\/td><td>Caching<\/td><td>Medium<\/td><\/tr><tr><td>7<\/td><td>Put a CDN in front of your site<\/td><td>Caching<\/td><td>Low<\/td><\/tr><tr><td>8<\/td><td>Compress images and serve WebP or AVIF<\/td><td>Images<\/td><td>Low<\/td><\/tr><tr><td>9<\/td><td>Size images correctly and lazy-load the rest<\/td><td>Images<\/td><td>Low<\/td><\/tr><tr><td>10<\/td><td>Remove render-blocking CSS and JavaScript<\/td><td>Front end<\/td><td>Medium<\/td><\/tr><tr><td>11<\/td><td>Host fonts locally and load fewer of them<\/td><td>Front end<\/td><td>Low<\/td><\/tr><tr><td>12<\/td><td>Audit your plugins and theme<\/td><td>Back end<\/td><td>Medium<\/td><\/tr><tr><td>13<\/td><td>Clean up the database<\/td><td>Back end<\/td><td>Low<\/td><\/tr><tr><td>14<\/td><td>Replace WP-Cron with a real cron job<\/td><td>Back end<\/td><td>Low<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Server-Level Fixes: Hosting, PHP and Compression<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Your server sets the limit for your WordPress speed, and everything else builds on it. These four fixes lower TTFB, which improves every other metric.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fix 1: Move to fast hosting<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">If your TTFB is slow even on a simple page, your hosting is the first suspect. Crowded shared servers split CPU and memory among hundreds of sites, so your pages wait in line. A VPS gives you dedicated resources and full control over the software stack.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Look for three things: NVMe storage (much faster than SATA SSDs for database work), enough RAM for PHP and the database to run without swapping (2 GB is a sensible start for one busy site), and a data center close to most of your visitors. A <a href=\"https:\/\/nodeguard.io\/cloud-vps\">NodeGuard Cloud VPS<\/a> runs on NVMe storage and gives you root access, so every server-level fix in this guide is yours to apply.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fix 2: Run a current PHP version<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Each major PHP release has made WordPress faster, and older versions also stop receiving security fixes. Check what you&#8217;re running under <strong>Tools \u2192 Site Health \u2192 Info \u2192 Server<\/strong>, or from the command line:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>php -v\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Aim for PHP 8.3 or newer. Before you switch, test on a staging copy, because very old plugins may not support new PHP versions. If something breaks, that plugin is usually a candidate for replacement anyway.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fix 3: Enable OPcache and tune PHP-FPM<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Without OPcache, PHP reads and compiles WordPress&#8217;s files on every request. OPcache keeps the compiled code in memory, which removes that work entirely. It&#8217;s usually enabled by default, but the defaults are small for WordPress. In your PHP <code>opcache.ini<\/code> or <code>php.ini<\/code>, a good starting point is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>opcache.enable=1\nopcache.memory_consumption=256\nopcache.max_accelerated_files=20000\nopcache.validate_timestamps=1\nopcache.revalidate_freq=60\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If you run Nginx with PHP-FPM, also check the <code>pm.max_children<\/code> value in your pool file. Too low and requests queue up; too high and the server runs out of memory. Our <a href=\"https:\/\/nodeguard.io\/blog\/how-to-install-a-lemp-stack-on-ubuntu\">LEMP stack guide<\/a> explains how to size it from your available RAM. Restart PHP-FPM after any change.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fix 4: Turn on HTTP\/2 or HTTP\/3 and compression<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">HTTP\/2 and HTTP\/3 let the browser download many files over one connection at the same time, instead of queuing them. Both require HTTPS, which your site should already use. On Nginx, HTTP\/2 is one directive in your server block.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Compression shrinks HTML, CSS and JavaScript before they&#8217;re sent. Gzip is universal, and Brotli is smaller still. In Nginx, enable gzip for text types:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gzip on;\ngzip_comp_level 5;\ngzip_types text\/css application\/javascript application\/json image\/svg+xml text\/plain;\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Text files often shrink by 70% or more, which helps visitors on slow mobile connections most.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Page Caching, Object Caching and a CDN<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Caching is where the biggest WordPress speed gains live. Without it, WordPress runs PHP and dozens of database queries to build the same page for every visitor. With page caching, it builds the page once and serves a ready-made copy to everyone after that.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fix 5: Enable page caching<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Page caching alone can cut TTFB from several hundred milliseconds to a few dozen. You have two good options:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>A caching plugin.<\/strong> WP Super Cache, W3 Total Cache, LiteSpeed Cache (on LiteSpeed servers) and similar plugins store finished pages as static files. Install one, enable page caching, and test.<\/li>\n\n\n\n<li><strong>Server-level page caching.<\/strong> On Nginx, FastCGI cache stores pages before PHP is even involved, which is the fastest option. It needs a few lines of configuration, as described in the <a href=\"https:\/\/nginx.org\/en\/docs\/http\/ngx_http_fastcgi_module.html#fastcgi_cache\" target=\"_blank\" rel=\"noopener\">Nginx FastCGI module documentation<\/a>, plus rules to skip the cache for logged-in users, the cart and checkout.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Whichever you pick, use only one page caching layer. Two caches fighting over the same pages cause stale content and confusing bugs. Also make sure dynamic pages, such as WooCommerce carts, account pages and anything personalized, are excluded from page caching.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/nodeguard.io\/blog\/wp-content\/uploads\/2026\/10\/speed-up-wordpress-caching-layers-1024x576.webp\" alt=\"WordPress caching layers \u2013 browser cache, CDN, page caching, Redis object cache and OPcache in front of PHP and the database\" class=\"wp-image-201\" srcset=\"https:\/\/nodeguard.io\/blog\/wp-content\/uploads\/2026\/10\/speed-up-wordpress-caching-layers-1024x576.webp 1024w, https:\/\/nodeguard.io\/blog\/wp-content\/uploads\/2026\/10\/speed-up-wordpress-caching-layers-300x169.webp 300w, https:\/\/nodeguard.io\/blog\/wp-content\/uploads\/2026\/10\/speed-up-wordpress-caching-layers-768x432.webp 768w, https:\/\/nodeguard.io\/blog\/wp-content\/uploads\/2026\/10\/speed-up-wordpress-caching-layers-900x506.webp 900w, https:\/\/nodeguard.io\/blog\/wp-content\/uploads\/2026\/10\/speed-up-wordpress-caching-layers.webp 1200w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Each caching layer answers a request earlier, so less work reaches PHP and the database.<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Fix 6: Add a Redis object cache<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Page caching doesn&#8217;t improve WordPress speed for logged-in users, the admin dashboard, or stores where many pages can&#8217;t be cached. For those, an object cache helps. It keeps the results of repeated database queries in memory, so WordPress doesn&#8217;t ask the database the same question again and again.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/redis.io\/docs\/latest\/\" target=\"_blank\" rel=\"noopener\">Redis<\/a> is the standard choice. On Ubuntu:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install redis-server php-redis\nsudo systemctl enable --now redis-server\nsudo systemctl restart php8.3-fpm   # match your PHP version\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then install the Redis Object Cache plugin and click <strong>Enable Object Cache<\/strong>. WooCommerce stores, membership sites and busy blogs see the biggest benefit.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fix 7: Put a CDN in front of your site<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A content delivery network keeps copies of your images, CSS and JavaScript on servers around the world, so each visitor downloads them from somewhere nearby. If your audience is spread across countries, a CDN noticeably improves WordPress speed for distant visitors. Many CDNs can also cache full HTML pages at the edge, which takes even more load off your server. Set long browser cache lifetimes for static files while you&#8217;re at it, so returning visitors don&#8217;t download them again.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Image Optimization for Faster Pages<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Images are usually the heaviest part of a WordPress page, and the main image is often the LCP element. Good image optimization is one of the cheapest ways to improve WordPress speed.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fix 8: Compress images and serve WebP or AVIF<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A photo straight from a phone can be 4 MB or more. Most web pages need it at under 200 KB. Image optimization has two parts:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Compress before or during upload.<\/strong> Plugins such as EWWW Image Optimizer, ShortPixel, Imagify or Smush compress new uploads automatically and can bulk-process your existing media library.<\/li>\n\n\n\n<li><strong>Use modern formats.<\/strong> WebP files are typically 25\u201335% smaller than JPEG at the same visual quality, and AVIF is smaller still. WordPress supports both formats, and most optimization plugins can create and serve them automatically.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Run a bulk optimization once, then let the plugin handle new uploads.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fix 9: Size images correctly and lazy-load the rest<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Uploading a 4000-pixel image to show it at 800 pixels wastes bandwidth on every visit. WordPress creates several sizes of each upload and uses <code>srcset<\/code> so the browser picks a suitable one, but that only works if your theme uses those sizes. Resize huge originals before uploading, and don&#8217;t stretch small thumbnails into large slots.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">WordPress lazy-loads images below the fold by default, so they load only when a visitor scrolls near them. One important exception: <strong>don&#8217;t lazy-load your LCP image<\/strong>. The hero image at the top of the page should load immediately, ideally with <code>fetchpriority=\"high\"<\/code>. Lazy-loading it is one of the most common causes of a poor LCP score. Always set width and height on images too, so the browser reserves space and the layout doesn&#8217;t jump, which keeps CLS low.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Front-End Fixes for Render-Blocking Files<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Even with a fast server and light images, WordPress speed can still suffer while the browser sits waiting on CSS and JavaScript before it shows anything. These fixes clear that path.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fix 10: Remove render-blocking CSS and JavaScript<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">When the browser meets a script or stylesheet in the page head, it usually stops rendering until that file downloads and runs. Too many of them delay everything the visitor sees.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Defer non-critical JavaScript<\/strong> so it runs after the page renders. Analytics, chat widgets and social embeds rarely need to load first.<\/li>\n\n\n\n<li><strong>Delay third-party scripts<\/strong> until the visitor interacts with the page. This also improves INP, because less JavaScript competes for the main thread.<\/li>\n\n\n\n<li><strong>Remove unused CSS.<\/strong> Page builders and big themes load styles for features you never use.<\/li>\n\n\n\n<li><strong>Minify<\/strong> CSS and JavaScript to strip whitespace and comments.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Plugins such as Autoptimize, Perfmatters, or the optimization features in your caching plugin handle most of this. Change one setting at a time and check the site afterwards, because aggressive deferring can break sliders, menus or forms.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fix 11: Host fonts locally and load fewer of them<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Web fonts are easy to overdo. Each family, weight and style is a separate download, and loading them from an external service adds extra connections. Pick one or two families and only the weights you actually use, often regular and bold. Host the font files on your own server, preload the main one, and use <code>font-display: swap<\/code> so text appears immediately in a fallback font instead of staying invisible.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Back-End Cleanup: Plugins, Database and WP-Cron<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The last three fixes protect your WordPress speed by reducing the work WordPress does on every uncached request and in the background.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fix 12: Audit your plugins and theme<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The number of plugins matters less than what each one does. One badly built plugin can add more load than twenty well-built ones. Use the Query Monitor plugin to see which plugins add the most database queries and PHP time on a page. Then ask, for each plugin, whether you still need it, and whether a lighter plugin or a few lines of code could do the same job. Deactivate and delete what you don&#8217;t use.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Your theme matters just as much. Multipurpose themes that load sliders, animations and dozens of scripts on every page are a common cause of poor WordPress speed. A lightweight theme, or a block theme built for the Site Editor, starts from a much faster base.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fix 13: Clean up the database<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Over time, the WordPress database collects post revisions, trashed items, spam comments and expired transients. The biggest hidden problem is usually <strong>autoloaded options<\/strong>: settings that WordPress loads on every single request. Abandoned plugins often leave large autoloaded data behind.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">With WP-CLI, you can clean up safely from the command line:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>wp post delete $(wp post list --post_type=revision --format=ids) --force\nwp transient delete --expired\nwp db optimize\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">You can also limit future revisions by adding <code>define( 'WP_POST_REVISIONS', 5 );<\/code> to <code>wp-config.php<\/code>. Always take a backup before cleaning the database. Plugins such as WP-Optimize do the same job from the dashboard.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Fix 14: Replace WP-Cron with a real cron job<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">WP-Cron runs scheduled tasks, such as publishing scheduled posts, sending emails and running backups, by checking on page loads. On a busy site, that adds overhead to visitor requests. On a quiet site, tasks run late. Disable it in <code>wp-config.php<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>define( 'DISABLE_WP_CRON', true );\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Then add a real system cron job that runs every five minutes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>*\/5 * * * * cd \/var\/www\/example.com &amp;&amp; wp cron event run --due-now &gt;\/dev\/null 2&gt;&amp;1\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">If your site uses a page builder or WooCommerce, also consider reducing the WordPress Heartbeat frequency in the admin, which polls the server every 15 to 60 seconds while editors are open.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Common WordPress Speed Mistakes to Avoid<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A few habits undo good optimization work. Watch out for these:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Stacking optimization plugins.<\/strong> Two caching plugins, or a caching plugin plus a separate minifier with the same features, often conflict. Pick one tool per job.<\/li>\n\n\n\n<li><strong>Chasing a perfect 100 score.<\/strong> A score of 90 with good Core Web Vitals and a fast real-world experience is a great result. The last few points rarely change anything for visitors.<\/li>\n\n\n\n<li><strong>Testing only the homepage.<\/strong> Your blog posts, product pages and checkout often load completely different scripts.<\/li>\n\n\n\n<li><strong>Optimizing without a backup.<\/strong> Database cleanups and script deferring can break things. Take a backup or test on staging first.<\/li>\n\n\n\n<li><strong>Ignoring mobile.<\/strong> PageSpeed Insights reports mobile and desktop separately, and Google mainly uses the mobile version of your site.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Frequently Asked Questions<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">How do I check my WordPress speed?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Run your homepage and a typical inner page through PageSpeed Insights and note the Core Web Vitals, TTFB and total page weight. Repeat each test three times and use the middle result, then test again after each change.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Which single fix improves WordPress speed the most?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">For most sites, page caching. It turns every repeat visit into a ready-made page instead of a full PHP and database run, often cutting server response time by 80% or more. If your hosting is overloaded, though, moving to faster hosting comes first.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Do I need a plugin for image optimization?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">You don&#8217;t strictly need one, because you can compress and convert images before uploading them. A plugin is easier, though, because it handles every new upload automatically and can convert your existing media library to WebP or AVIF in one pass.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Will page caching break my WooCommerce store?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Not if it&#8217;s configured correctly. Good caching plugins exclude the cart, checkout and account pages automatically. With server-level page caching, you add those exclusions yourself, along with a rule to skip the cache for logged-in users.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">How often should I repeat this process?<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Re-test your WordPress speed after installing a new plugin, changing themes or making big design changes, and do a quick check once a quarter. Speed tends to drift downwards as a site grows, so small regular checks beat one big cleanup a year.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Learning how to speed up a WordPress website is mostly about doing the right things in the right order. Measure first, so you know your baseline and your Core Web Vitals. Fix the server, so TTFB is low. Add page caching and an object cache, so most requests never touch PHP or the database. Then trim the weight with image optimization, clear render-blocking files, and clean up plugins, the database and WP-Cron.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You don&#8217;t need all 14 fixes to see a difference. The first five alone often turn a sluggish site into a fast one. Work through the list, re-test after each change, and keep the changes that move your numbers.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you&#8217;re running WordPress on your own server, start with our guide to <a href=\"https:\/\/nodeguard.io\/blog\/install-wordpress-on-an-ubuntu-vps-with-nginx\">installing WordPress on an Ubuntu VPS with Nginx<\/a>, then apply these fixes on top. For a deeper look at server tuning, the <a href=\"https:\/\/developer.wordpress.org\/advanced-administration\/performance\/\" target=\"_blank\" rel=\"noopener\">WordPress performance documentation<\/a> is a useful next step. And if your current host is what&#8217;s holding you back, a <a href=\"https:\/\/nodeguard.io\/cloud-vps\">NodeGuard Cloud VPS<\/a> gives you NVMe storage and full control to apply every fix in this guide.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","protected":false},"excerpt":{"rendered":"<p>A slow site costs you visitors, sales and search rankings, and most of the time the cause is fixable in an afternoon.\u2026<\/p>\n","protected":false},"author":2,"featured_media":200,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[29],"tags":[105,106,90,103,107,104,100,102],"class_list":["post-198","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress","tag-core-web-vitals","tag-image-optimization","tag-nginx","tag-page-caching","tag-performance","tag-redis","tag-wordpress","tag-wordpress-speed"],"_links":{"self":[{"href":"https:\/\/nodeguard.io\/blog\/wp-json\/wp\/v2\/posts\/198","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nodeguard.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nodeguard.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nodeguard.io\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nodeguard.io\/blog\/wp-json\/wp\/v2\/comments?post=198"}],"version-history":[{"count":4,"href":"https:\/\/nodeguard.io\/blog\/wp-json\/wp\/v2\/posts\/198\/revisions"}],"predecessor-version":[{"id":207,"href":"https:\/\/nodeguard.io\/blog\/wp-json\/wp\/v2\/posts\/198\/revisions\/207"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nodeguard.io\/blog\/wp-json\/wp\/v2\/media\/200"}],"wp:attachment":[{"href":"https:\/\/nodeguard.io\/blog\/wp-json\/wp\/v2\/media?parent=198"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nodeguard.io\/blog\/wp-json\/wp\/v2\/categories?post=198"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nodeguard.io\/blog\/wp-json\/wp\/v2\/tags?post=198"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}