WordPress

How to Speed Up WordPress – 12 Changes That Really Work

Text
Contents

Standard WordPress + Elementor + 25 plugins = average 4.8 seconds loading on mobile. After our optimization, the same stack usually gives 1,2–1,8 sNo hosting changes, no theme rewriting. I'll show you exactly 12 changes that make all the difference.

In short

  • Start with measurement — you don't optimize what you don't measure.
  • 80% of problems are: no cache, unoptimized images, blocking JavaScript.
  • Average LCP improvement after our 12 steps: from 4.5 s to 1.5 s.
  • Time to do it yourself: 4–8 hours for a medium-sized website.

First, measure

Open pagespeed.web.dev and save for the home page and the 2 most important subpages:

  • LCP (Largest Contentful Paint) - Target <2.5 sec
  • INP (Interaction to Next Paint) - Target <200 ms
  • CLS (Cumulative Layout Shift) - Target <0.1
  • Mobile and desktop results

This is your baseline. After each change, go back and compare.

1. Enable page cache

Biggest profit with 1 shift. Without cache, every user input calls PHP, connects to the database, generates HTML - 1-3 seconds of waste.

Plugins I recommend (in order of preference):

  • WP Rocket (paid, $59/year) - reasonable defaults, works out of the box
  • LiteSpeed Cache (free) - if you have hosting on LiteSpeed (mydevil, cyberFolks)
  • W3 Total Cache (free) - for advanced users, many options to configure

Real profit: -50-70% load time. LCP typically drops by 1.5-2.5 seconds.

2. Configure lazy loading

WordPress 6.x ma natywny lazy loading dla obrazów (loading="lazy"), ale not for iframe and CSS background. An iframe (e.g. Google Map, YouTube) loads immediately upon entry - several hundred KB of script.

What to do:

  • Enable lazy loading in the cache plugin (WP Rocket does it automatically)
  • For YouTube use Lazy Load for Videos by WP YouTube Lyte — inserts only thumbnail, JS YouTube loads on click
  • For Google Maps replace iframe static map image + "Open in Google Maps" link

Real profit: -300–800 ms LCP if you had an iframe on home.

3. Optimize your images

The most common WordPress speed killer: someone uploads a 4,000 x 3,000 px photo straight from the camera (8 MB) and the site displays it at 800 x 600 px.

3 steps:

  1. Resize — upload images in target sizes (max width 1920 px for full-width, 800 px for in-text)
  2. Convert to WebP/AVIF - plug ShortPixel or Imagine does it automatically. Weight savings: 30–60%
  3. CDN — Cloudflare, BunnyCDN. Images served from the server closest to the user

Real profit: -1–2 sec LCP if you had suboptimal images.

4. Disable emojis, embeds, RSS

WordPress loads a bunch of junk scripts (emoji.js, oEmbed, RSS) by default—even if you don't use them. Each script adds 10-80KB of unnecessary downloads.

Plug: Perfmatters (24 USD/rok) — wyłącza wszystko jednym kliknięciem. Alternatywa: kod do functions.php:

remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('wp_print_styles', 'print_emoji_styles');
remove_action('wp_head', 'wp_oembed_add_discovery_links');

Real profit: -200–400 ms.

5. Optimize your fonts

Google Fonts ładowane przez <link> this 2 additional requests + external server fonts.googleapis.com. Each request takes 200–500 ms.

What to do:

<link rel="preload" href="/fonts/inter-regular.woff2" as="font" type="font/woff2" crossorigin>
  • Use font-display: swap — the page appears immediately with the fallback font, the web font will be loaded "in the background"

Real profit: -300–700 ms LCP, smaller CLS.

6. Defer / async for JavaScript

JavaScript domyślnie blokuje renderowanie strony. Tagi <script> w <head> zatrzymują parser HTML, dopóki skrypt się nie pobierze i wykona.

Solution:

  • async for independent scripts (Analytics, Tag Manager)
  • defer for scripts that modify the DOM after loading (most widgets)
  • Lazy load for scripts that are used only for interaction (e.g. live chat)

W WP Rocket robi się to w 1 checkboxie. Bez wtyczki — wpisz w functions.php filtry script_loader_tag.

Real profit: -500–1500ms LCP.

7. Clear the database

After 2 years of blogging, the WP database has:
– Hundreds of post revisions (each change = a new revision)
– Thousands of transients (cache that hasn't expired)
– Comment spam (even if deleted, remains in trash)
– Plugin logs

Plug: WP-Optimize (free). Enable once every 2 months:
– Delete revisions older than 30 days
– Remove expired transients
– Defragment MySQL tables

Real profit: -100–300 ms TTFB (Time to First Byte).

8. Enable GZIP / Brotli

Compression reduces the size of uploaded files by 60-80%. Most hosts have this enabled by default, but it's worth checking with your GIDNetwork tester.

Jeśli wyłączone — w .htaccess:

<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html text/css application/javascript
</IfModule>

9. Throw away the heavy Theme builder

Visual Composer i Divi to powolne konstruktory generujące brzydki HTML z 15 wagonów <div>. Each widget = separate CSS and JS request.

Alternatives:
– Elementor (still the fastest of the popular ones)
– GeneratePress / Astra + Gutenberg (light themes)
– Bricks Builder (fastest new builder)

Migrating from Visual Composer to Elementor takes 1–3 days. Real LCP gain: -1–2 seconds.

10. Check plugins - which one slows down the site

Plug Query Monitor (free) shows which plugins "cost" the most to load.

Most common culprits:
– Social share plugins (Easy Social Share, Sassy Social Share)
– Popup builder plugins loaded on all subpages
– Backup plugins that make copies on the go

What to do: disable selectively on subpages where it is not needed (Asset CleanUp or Perfmatters).

11. Hosting - is the current one working?

Shared hosting for PLN 9/month usually has old PHP 7.4, no NVMe, no OPcache. Migrating to a better hosting can reduce TTFB from 1.5 s to 200 ms.

Polish hosting that gives real profit:
– mydevil.net — LiteSpeed, NVMe, OPcache, good price/performance ratio
– CyberFolks — WP-managed, free CDN, automatic backup
– Hostido — premium WP hosting, expensive but fast

Real benefits from migration: -300–1000 ms.

12. CDN - Cloudflare, BunnyCDN

CDN serves static content (images, CSS, JS) from the server closest to the user. For a Polish site with a UK audience, the difference is 200–600 ms.

Cloudflare — has a free plan, sufficient for most sites. It boots up in 5 minutes (DNS change).

Real profit: -100–400 ms LCP, better INP.

What's next - implementation sequence

You do this in this order (from greatest profit to smallest):

  1. Cache → 2. Image Optimization → 3. Defer JavaScript → 4. Lazy Loading → 5. Local Fonts → 6. WP-Optimize → 7. Disable Emoji/Embed → 8. Asset CleanUp → 9. CDN → 10. Hosting Throttling Test → 11. Theme Builder Migration → 12. CSS Cache

Measure after every change. If something breaks the page, undo.


Core Web Vitals optimization is standard in our projects — the average of the last 12 implementations is 97/100 PageSpeed. Check out our care packages or order a speed audit.

Twoja opinia

Czy ten artykuł był pomocny?

Jedno kliknięcie — pomaga mi wybierać kolejne tematy.

Share article

Websky Newsletter

New entries straight to your email.

Once a month — practical insights on WordPress, WooCommerce, SEO and AI. No spam, unsubscribe with one click.

  • Case studies from Polish projects
  • Checklists and templates to download
  • Google and WordPress changes in a nutshell

Your data goes to Websky Studio only. You can unsubscribe with one click in every message.

WordPress

Utknąłeś na czymś w WordPressie?

Wdrożenia, migracje, naprawy po innych wykonawcach i rozwiązania dedykowane. Piszesz do projektanta, nie do handlowca.

Napisz do studia