By Cristian Daron
Google's ranking systems use Core Web Vitals as part of page experience. If your WordPress site takes more than 2.5 seconds to render the largest content element (LCP), you're losing both rankings and visitors. Here's how I work toward a good LCP on WordPress builds.
Measuring Your Baseline
Before optimizing, measure accurately. Use PageSpeed Insights for lab data, Chrome UX Report for real-user data, and WebPageTest for detailed waterfall analysis. Focus on LCP, CLS, and INP, these are the three Core Web Vitals that matter for rankings.
Image Optimization: The Biggest Win
Images are the heaviest part of most pages: HTTP Archive's 2025 Web Almanac found images to be the largest single component of the median mobile home page, at 911 KB. My optimization stack: convert all images to WebP/AVIF using a plugin like ShortPixel, implement responsive images with srcset attributes, lazy-load all below-fold images, and preload the LCP image with a link rel='preload' tag in the head.
Caching Strategy
I implement three layers of caching: browser caching via Cache-Control headers (1 year for static assets), page caching with WP Super Cache or W3 Total Cache generating static HTML, and object caching with Redis or Memcached for database query results. Together these cut server response time sharply, because most requests never reach PHP or the database.
CDN Configuration
Cloudflare is my default CDN for WordPress. Configuration: enable Auto Minify for HTML/CSS/JS, turn on Brotli compression, set up Page Rules for aggressive caching of static pages, and enable Argo Smart Routing for international sites. Cached pages are then served from the edge, close to each visitor.
Database Optimization
WordPress databases accumulate cruft: post revisions, transient options, orphaned meta data, and spam comments. I run quarterly cleanups using WP-Optimize and add database indexes for commonly queried custom fields.
Critical CSS & Script Deferral
Extract and inline above-the-fold CSS to eliminate render-blocking stylesheets. Defer all JavaScript that isn't needed for initial render. I use a combination of the Autoptimize plugin and manual script tag attributes (defer/async) to achieve this. The goal: zero render-blocking resources.
The Results Pattern
The targets I build to are Google's own thresholds for a good experience: LCP within 2.5 seconds, INP of 200 milliseconds or less, and CLS of 0.1 or less, measured on real users at the 75th percentile.