All articles

How to Speed Up WordPress and Pass Core Web Vitals (Step-by-Step)

How to speed up WordPress step by step: measure first, then fix LCP, INP and CLS with better hosting, caching, images and plugins. A prioritized list to follow.

Cover: performance gauge with LCP, INP and CLS metric cards
In this article

To speed up WordPress, measure your real-world Core Web Vitals first, then fix the biggest bottleneck in this order: hosting and caching, the largest image on the page, unnecessary plugins and scripts, and finally layout shifts. Most slow sites are not slow for one dramatic reason. They are slow because of five or six small, avoidable problems stacked together.

This guide gives you a prioritized list. It starts with the changes that usually have the biggest effect and ends with the fine-tuning, so you do not waste a week on details while a 3 MB hero image is the real problem.

Key takeaways

  • Core Web Vitals are three metrics: LCP (loading), INP (responsiveness) and CLS (visual stability). INP replaced FID in March 2024.
  • Measure with field data (Chrome UX Report, Google Search Console) before and after every change. Lab scores alone can mislead you.
  • Hosting, page caching and image handling fix more problems than any “speed plugin” setting.
  • Every plugin and script has a cost. Audit them with Query Monitor and remove what you do not need.
  • Speed work is a loop: measure, change one thing, measure again.

What Core Web Vitals actually measure

Core Web Vitals are Google’s way of describing how a page feels to a real visitor. Google evaluates them at the 75th percentile of real visits, which means three out of four visitors should get a “good” experience. You can read the official definitions on web.dev’s Core Web Vitals guide.

MetricWhat it measures“Good” threshold
LCP (Largest Contentful Paint)How fast the biggest visible element (usually a hero image or heading) appears2.5 seconds or less
INP (Interaction to Next Paint)How quickly the page responds visually after taps, clicks and key presses200 milliseconds or less
CLS (Cumulative Layout Shift)How much content jumps around while loading0.1 or less

INP is the newer one. It replaced First Input Delay (FID) because FID only looked at the first interaction, while INP looks at responsiveness across the whole visit. If an old article tells you to “optimize FID”, read it as “optimize INP”.

Step 1: Measure before you try to speed up WordPress

Without a baseline you cannot tell whether a change helped. Use more than one tool, because each answers a different question.

  • PageSpeed Insights: shows real-user data from the Chrome UX Report (when your site has enough traffic) on top, and a Lighthouse lab test below. Read the field data first.
  • Lighthouse (in Chrome DevTools): a lab test on your machine. Great for finding specific causes, such as render-blocking files, but one run is only a sample.
  • Search Console, Core Web Vitals report: groups your URLs into good, needs improvement and poor, using real visits. This is the closest thing to what Google sees.
  • Query Monitor (WordPress plugin): shows slow database queries, which plugin or theme loaded which script, and PHP errors. It explains why the server side is slow.

Test your homepage, one blog post and one key landing page or product page. Test on mobile settings, since most sites get the majority of their traffic on mobile and mobile is usually the weaker result.

Step 2: Fix hosting and caching first

If your server takes a long time to answer, nothing you do in the browser can fully compensate. Time to first byte feeds directly into LCP.

Choose hosting that matches the site

Very cheap shared hosting with hundreds of sites on one server is a common cause of slow response times. Look for current PHP versions, SSD or NVMe storage, server-level caching and a data center reasonably close to your visitors. For stores and sites with logged-in users, plan for more resources than a brochure site needs.

Turn on page caching

WordPress builds each page with PHP and database queries on every visit unless you cache it. Page caching saves the finished HTML and serves it instantly. Many hosts provide this at server level. Otherwise, well-known plugins such as WP Rocket, LiteSpeed Cache or W3 Total Cache can do it.

Use one caching solution, not three. Stacking several cache plugins creates conflicts that are painful to debug.

Add object caching when it makes sense

For WooCommerce stores, membership sites and busy admin areas, persistent object caching (Redis or Memcached, if your host offers it) reduces repeated database work. Never cache cart, checkout and account pages as static pages.

Step 3: Optimize images (the usual LCP culprit)

On most WordPress sites, the LCP element is an image. This is where the quickest wins are.

Use modern formats and the right size

  • Serve WebP or AVIF instead of large JPEG or PNG files. WordPress supports WebP uploads in core and AVIF in recent versions, and image plugins can convert existing libraries in bulk.
  • Do not upload a 4000 px photo to display it at 800 px. Resize before upload and let WordPress generate responsive srcset sizes.
  • Compress every image. A hero image usually does not need to be heavy to look sharp.

Always set width and height

Missing dimensions are one of the most common causes of layout shift. The browser cannot reserve space for an image it has not measured yet.

<!-- Above the fold: the LCP image. Do not lazy-load it. -->
<img src="hero.webp" width="1200" height="600" alt="Describe the image"
     fetchpriority="high">

<!-- Below the fold: lazy-load it. -->
<img src="gallery-1.webp" width="800" height="600" alt="Describe the image"
     loading="lazy">

Lazy-load below the fold, never the hero

Lazy loading delays offscreen images until the visitor scrolls near them, which saves bandwidth. WordPress adds loading="lazy" automatically in recent versions and tries to skip the first content image, but themes and page builders sometimes override it. Check that your hero or featured image is not lazy-loaded, because that directly delays LCP.

Step 4: Audit plugins and your theme

Plugins are not bad by definition. The problem is plugins that load CSS and JavaScript on every page when they are needed on one.

  1. List every active plugin and write down what it does for the business.
  2. Install Query Monitor and open a page. Check the scripts and styles panels and the slow queries.
  3. Remove duplicates (two SEO plugins, two slider plugins, two cache plugins).
  4. Replace heavy plugins that do one tiny job with a few lines of code or a lighter alternative.
  5. Use an asset manager or conditional loading so contact-form or slider scripts load only where used.

The theme matters just as much. Heavy multipurpose themes and layered page builders ship a lot of CSS and JavaScript that most pages never use. In my own projects I build with clean code and only the assets a page needs, which is why speed is a focus of my WordPress development work. If you are weighing a builder against a custom theme, the trade-offs are covered in Elementor vs custom WordPress theme.

Step 5: Remove render-blocking CSS and JavaScript

Render-blocking files stop the browser from painting the page until they finish downloading. The main fixes are:

  • Minify and combine carefully. Minification is safe. Aggressive combining can break layouts, so test after enabling it.
  • Defer non-critical JavaScript so it runs after the page is parsed. Analytics, chat widgets and tracking pixels rarely need to load first.
  • Inline critical CSS for the above-the-fold area and load the rest later. Good caching plugins can generate this automatically.
  • Load fonts sensibly. Host fonts locally, use WOFF2, limit the number of weights and add font-display: swap.
@font-face {
  font-family: "MyFont";
  src: url("/fonts/myfont.woff2") format("woff2");
  font-weight: 400;
  font-display: swap;
}

Third-party scripts deserve special suspicion. Each tag manager, heatmap, chat widget and ad script adds network requests and main-thread work, and they are a common reason a fast site gets a poor INP.

Step 6: Use a CDN for global and regional reach

A content delivery network stores copies of your static files (images, CSS, JavaScript, fonts) on servers around the world and serves them from the closest one. It helps most when your visitors are far from your origin server, for example a site hosted in Europe serving visitors in the Gulf. Many CDNs also add compression, image optimization and extra security.

A CDN does not fix a slow origin or oversized images. Treat it as a multiplier on a site that is already reasonably built.

Step 7: Fix INP and CLS specifically

Improve INP

Poor INP means the main thread is busy when the visitor taps. Reduce JavaScript: remove unused plugins and third-party tags, defer what you can, and avoid heavy sliders and animated page-builder effects on mobile. Keep the page’s DOM size reasonable, since huge nested layouts make every interaction slower.

Improve CLS

  • Set width and height (or aspect-ratio) on images, videos and embeds.
  • Reserve space for ads, banners and cookie notices instead of pushing content down after load.
  • Use font-display: swap with a similar fallback font to limit text jumping.
  • Avoid injecting content above existing content after the page has rendered.

The prioritized checklist to speed up WordPress

Follow this order. Stop and re-measure after each stage.

  1. Record a baseline in PageSpeed Insights and Search Console (mobile first).
  2. Update PHP, WordPress, theme and plugins on a staging copy first.
  3. Enable page caching, using one solution only.
  4. Compress and resize images, convert to WebP or AVIF, set dimensions.
  5. Make sure the hero image is not lazy-loaded and has high priority.
  6. Remove or replace unnecessary plugins; confirm with Query Monitor.
  7. Defer or delay third-party scripts; remove those you do not use.
  8. Fix fonts and render-blocking CSS and JavaScript.
  9. Add a CDN.
  10. Re-test, wait for field data to update (it is based on a rolling period of real visits, so allow some time), and repeat.

Frequently asked questions

Why is my WordPress site slow?

The usual causes are slow hosting, no page caching, oversized images, too many plugins and heavy themes. Use Query Monitor and the PageSpeed Insights diagnostics to find which of these applies to your site instead of guessing.

What is a good Core Web Vitals score?

There is no single score. Google’s thresholds are LCP at 2.5 seconds or less, INP at 200 milliseconds or less and CLS at 0.1 or less, measured at the 75th percentile of real visits. Passing all three means the page is rated “good”.

Do Core Web Vitals affect SEO?

They are part of Google’s page experience signals, but relevance and content quality still matter far more. Treat speed as a tiebreaker that also improves conversions and user satisfaction, not as a shortcut to rankings. For the wider picture, use the WordPress SEO checklist.

Is a caching plugin enough to speed up WordPress?

No. Caching helps server response time, but it cannot shrink a 3 MB image or remove a script that blocks rendering. Combine caching with image optimization, a plugin audit and script control.

Why does Lighthouse show a different result from PageSpeed Insights field data?

Lighthouse is a simulated lab test of one load on one device. Field data comes from real users on different devices and networks. Use the lab test to diagnose and the field data to judge success.

Conclusion

To speed up WordPress reliably, work in priority order: measure, fix hosting and caching, optimize the LCP image, trim plugins and scripts, then polish fonts, CDN and layout shifts. Small, measured changes beat a long list of settings applied blindly.

If you would rather have an experienced developer handle it, I am Hossam Hamdy, a Front-End and WordPress developer in Mansoura, Egypt, with 4+ years of experience and 25+ websites and stores delivered for clients in Saudi Arabia, the UAE and Egypt. Get in touch through the contact section to discuss your site and request a quote.