WordPress LCP Recovery: 5.5s → 2.49s Into 'Good' Zone (Case)
Flat vector illustration of WordPress Core Web Vitals performance dashboard: a monitor displaying a speed gauge with its needle in the green "Good" zone, surrounded by audit (magnifying glass over code), mobile speed check, upward-trending traffic chart, stopwatch, server with checkmark, and security shield — visualizing WordPress LCP recovery through audit-first engineering.

WordPress LCP Recovery: 5.5s → 2.49s on a 25-Year-Old News Platform (Into Google’s “Good” Zone)

A man with light brown hair and a beard stands with arms crossed, wearing a white t-shirt, a smartwatch, and a confident expression—ready to tackle your next WordPress project against a plain white background.

By Maciej Nowak

Case study: audit-first WordPress recovery took mobile LCP from 5.5s to 2.49s — into Google’s “Good” zone. 15× more readers fast, 40%+ traffic, no rewrite.

A 25-year-old US B2B news platform came to us in late February 2026 with Google Search Console flagging the site as slow. Mobile largest contentful paint (LCP) on real Chrome users showed 5.5 seconds. Only 5% of readers were landing on fast-loading pages. The instinctive next step would have been a rewrite proposal.

We ran a 60-page code audit instead. Eight weeks of engineering later, mobile LCP was down to 2.49 seconds — below Google’s 2.5-second “Good” threshold for the first time — 15× more readers were landing on fast pages, traffic climbed 40%+ across users, page views, and events, and Google Search Console showed zero URLs in its desktop “poor LCP” bucket. No rewrite, no migration, no CMS swap.

Mobile LCP, real Chrome users: 5.5s audit baseline reduced to 2.49s by week of May 16, crossing Google's "Good" Core Web Vitals threshold. US B2B news platform, 60-page audit by Osom first, no rewrite, no migration.

This is the case study.

 

The Situation: What Google Was Telling Them

The platform had been running on WordPress for over a decade, serving a US business readership across editorial content, podcasts, and gated reports. In late February the team noticed the familiar pattern – organic traffic plateauing, Page Experience signals turning yellow, ad partners flagging slow-load complaints from mobile users.

When we pulled the Search Console data, the picture was clear. Mobile LCP was averaging 5.5 seconds on real Chrome users, measured at the 75th percentile of field data. Only 5% of users were landing on pages Google considered fast. Lab tools were showing one picture; field data was showing a worse one. Google ranks on field data, and that was what mattered for the platform’s organic traffic.

Late February 2026, Google status: slow. A 25-year-old news platform with 5.5s mobile LCP and only 5% of users getting fast-loading pages. Before coding, we had to diagnose why; the audit became the roadmap.

Before any production code got touched, we needed to know what was actually wrong.

 

Why We Audited First Instead of Scoping a Rewrite

The default response when a long-lived WordPress site is “slow” is to scope a rewrite – migrate the content, build it on something newer, headless or JAMstack or whatever the current pitch is. For sites with significant SEO equity, an active editorial team, and a CMS investment built up over years, that path is often the highest-risk one unless an audit proves the existing platform cannot be recovered.

A rewrite risks SEO authority that took a decade to build. It disrupts editorial workflows the team has trained on. It triggers content migration risk – URLs to map, redirects to maintain, structured data to rebuild, an organic traffic exposure window across the cutover. And the assumption underneath the rewrite proposal – that the existing platform is the problem – is almost never verified up front.

The audit is what verifies it. Before quoting any kind of recovery work, you need to know which specific elements are slow, why they are slow, and what the smallest set of changes would be to fix them. For this site, that meant a WordPress code audit of the full stack – security, performance, hygiene, and frontend – produced before any production code was touched.

If you want the long version of how that decision works, we have a separate guide on what a WordPress technical audit covers and when rebuilding actually makes sense. The short version is: most slow WordPress sites we see are stack-drift problems before they are platform problems.

 

What a 60-Page Audit Actually Looks At

A code audit is not a checklist, and the output is not a list of every imperfection in the codebase. It is a prioritized fix list – findings rated by severity (critical, high, medium, low) and mapped to business impact, so the engineering work that follows can be scoped against real-world tradeoffs.

For this engagement the audit covered four areas: security review, performance bottleneck analysis, stack hygiene, and frontend rendering. We measured response times across the main page templates, traced the LCP element on each, inventoried plugins against known CVEs, checked PHP version and deprecated function usage, and reviewed how the editorial team’s daily actions affected page weight at runtime.

 

The Audit Findings

Our audit produced a long list of items. The ones that mattered most fell into two clusters.

60-page audit findings: critical security included SQL injection in the theme, hardcoded database credentials, and 8 plugins with known CVEs. Performance and stack issues: cache that wasn't actually caching, deprecated PHP blocking upgrades.

In critical security: a SQL injection vulnerability sitting in custom theme code, database credentials exposed in source code where they should not have been, and eight active plugins running with known CVEs that had patches available but never applied. None of those were discovered through penetration testing – they showed up in static analysis of the theme and active plugins, which is the kind of work that does not happen on a healthy maintenance schedule.

In performance and stack: a caching layer that the team thought was working but was actually missing on most requests, deprecated PHP blocking every other upgrade in the chain (plugin versions, hosting upgrades, security patches), and several theme functions running on every page load without need.

None of this is unusual on a long-lived WordPress site. The pattern we keep seeing in takeover audits is that none of it has been anyone’s specific job for years – hosting moves, devs rotate, plugins get installed for a campaign and forgotten, and the stack quietly drifts out of alignment. The audit is what surfaces the drift before it becomes the rewrite conversation. We have written about the same phenomenon from a different angle in WordPress Problems After Launch.

 

The Engineering Sprint: March 26 Onwards

With the audit finalized and the fix list prioritized, we scoped a first engineering sprint targeting the highest-impact findings – the ones most directly tied to mobile LCP, search position, and security exposure. Code work started March 26.

The first unlock was caching. Tuning the cache rules and fixing the configuration so the actual cache hit rate moved from 30% to 65% meant fewer requests reaching WordPress and the database on every page load. On a content site at this scale, that single change reshaped the response time distribution.

We made the stack actually work. First unlock: caching hit rate moved from 30% to 65%. Cache rules, asset loading, and risk cleanup combined for fewer slow server trips, lighter pages, safer code, no rewrite.

Asset loading was the second area. Fonts, scripts, and images had been blocking the render path through a combination of plugin defaults, theme decisions made years ago, and third-party scripts loaded synchronously. Reworking how assets were declared and prioritized meant pages could start rendering useful content earlier – the LCP element specifically.

Risk cleanup ran in parallel. Deprecated PHP usages were rewritten, theme issues were patched, output escaping was fixed across template files, and the CVE-affected plugins were either updated to safe versions or replaced with maintained alternatives. We did not swap any core functionality – the editorial workflow, plugin ecosystem, and content structure remained exactly as the team was using them.

How the recovery happened. Audit first, then code. Before coding: 60-page audit covering security, caching, PHP blockers, theme debt, performance bottlenecks. From Mar 26: engineering sprint targeting cache, assets, PHP, security fixes. By May 11: load time cut in half, client continued the engagement. Week of May 16: mobile LCP crossed Google's "Good" threshold.

The work progressed against two checkpoints. By May 11 – roughly six weeks into the engineering sprint – mobile LCP on real users was down to 2.6 seconds. Load time cut in half. The site held position throughout, and the client extended into a second engagement phase. By the week of May 16, the trailing CrUX window pushed LCP down to 2.49 seconds – below Google’s 2.5-second “Good” threshold for the first time, with the site now sitting in the “Good” Core Web Vitals zone for real Chrome users.

 

The Receipts: Field Data, Not Lab Scores

Performance work without verifiable measurement is theater. Three independent data sources tracked across the audit-and-engineering window confirmed the recovery – and importantly, all three are field data on real users, not synthetic lab scores.

Google Search Console. As of May 9, 2026, the site held zero URLs in the desktop “LCP issue: longer than 4 seconds” bucket. At baseline, the same Search Console report had been showing the majority of measured URLs in that category. This is the field data Google itself uses for Page Experience signals – the same data that informs ranking, not a lab benchmark run from a Google data center.

Google Search Console screenshot from May 9, 2026 showing 0 affected URLs in the desktop LCP issue (longer than 4 seconds) bucket. A real Google Search Console receipt, not a lab score.

Chrome User Experience Report (CrUX). Pulling the trailing 28-day P75 mobile field data for the week ending May 16, 2026, the loading experience had moved in the same direction across every metric. LCP “good” share went from 5% to 75%. FCP “good” from 4% to 54%. TTFB “good” from 3% to 48%. In aggregate, 15 times more readers were landing on fast-loading pages compared to the audit baseline.

A report slide showing improved user experience numbers: LCP good increased from 5% to 75%, FCP good from 4% to 54%, and TTFB good from 3% to 48%. Text highlights “15x more readers now get fast-loading pages.”.

Google Analytics. Across the trailing 28-day window ending May 19, 2026 compared against the prior 28 days, every audience metric climbed in lockstep. Active users were up 44.0% (103K). Page views up 43.3% (154K). Events up 39.7% (495K). Across the same window, the platform’s search position held through the fix window with no ranking drop while substantial code shipped continuously into production.

Our work recovered performance, traffic followed. Google Analytics 28-day comparison shows +44.0% active users, +43.3% page views, and +39.7% events. Search position held through the fix window with no ranking drop while the site got dramatically faster.

That last point deserves emphasis. The biggest worry on a content site of this age is that any non-trivial change triggers a temporary ranking dip that takes weeks to recover from. That did not happen here. The engineering work was deployed in measured batches, the URL structure was preserved exactly, no redirects were introduced, and positions held while the site got dramatically faster.

 

What Did Not Happen

It is worth listing what we did not do, because the absence is the point. The audit-first path meant no rewrite, no migration, no swap to another CMS or framework. No content was migrated, no URLs changed, no redirects were introduced. There was no SEO drop, no editorial workflow disruption, no downtime.

The rewrite path would have done all of those things, and taken months in the process – content to migrate, URLs to map, redirects to maintain, structured data to rebuild, an editorial team to retrain, and an organic traffic exposure window across the cutover. The audit-first path took eight weeks of focused engineering against a prioritized fix list and shipped continuously into production with the existing platform.

 

The Client Outcome

At the May 11 checkpoint, the client’s reaction was straightforward.

Client checkpoint May 11 quotes: "The responsiveness has gone up." "We're getting back up to where we used to be." "We're gonna continue with you guys. We're happy."

Performance recovery led directly into the next phase of work – a second engineering window focused on audit items that were not critical to LCP but had been queued for follow-up: ongoing security hygiene, plugin ecosystem cleanup, and a refresh of the technical maintenance setup for the platform going forward. By the time the week-of-May-16 CrUX window confirmed the site had crossed into Google’s “Good” zone, the engagement had already moved from recovery mode into continuous improvement.

 

What This Means for Your WordPress Site

If Google Search Console is flagging your site as slow, if Page Experience signals are yellow or red, or if your organic traffic is plateauing while your editorial team keeps publishing, the default options on the table tend to be: do nothing, try a few plugin tweaks, or scope a rewrite. There is a fourth option, and on long-lived WordPress sites it is almost always the right one. Audit first.

An audit does not presuppose the answer. A rewrite proposal does. The audit tells you which specific elements are slow, which fixes would have the biggest impact, and how much of the existing platform you can actually keep. For most sites we look at, the honest answer is: most of it. The rewrite conversation only makes sense after the audit closes off the cheaper, faster, safer paths – which is a different framing of the same point we made in our guide on when switching agencies needs an audit first.

 

Get an Audit

If your WordPress site is in this situation, we run the same audit-first diagnosis for every engagement. The output is a prioritized technical fix list scoped against your business goals, with engineering estimates against each item, so you can decide what to fix, in what order, and with what team.

A WordPress code audit typically takes 5-7 business days from when we get access, and answers the question every site owner is asking quietly while watching the GSC dashboard: do we need to rebuild, or can this be fixed.

Osom Studio. Engineering-first WordPress for sites that can't afford slow pages, fragile code, or invisible technical debt. Result: 5.5s to 2.49s mobile LCP, now in Google's "Good" zone. Proof: 0 URLs in GSC's poor LCP bucket. Outcome: the client continued the engagement. If Google is flagging your WordPress site as slow, let's talk.

FAQ

What is a WordPress code audit?

A WordPress code audit is a structured manual technical review of a live site, covering security, performance, stack hygiene, plugins, and frontend rendering. The output is a prioritized fix list with severity ratings – critical, high, medium, low – mapped to business impact, not a list of every imperfection in the codebase. Manual review surfaces issues automated scanners miss: logic flaws in custom code, performance bottlenecks tied to architecture, and technical debt that accumulated over years.

 

How long does WordPress performance recovery take?

In this case study the audit-and-engineering window ran around three months from start to “Good” Core Web Vitals threshold: roughly three weeks of audit and prioritization work, six weeks of focused engineering to the May 11 checkpoint where load time was already cut in half, and another two to three weeks for the field-data window to fully reflect the change. Most sites needing performance recovery sit in the 4-8 week range for the engineering phase, depending on scope and stack debt. The audit-first approach makes the engineering window predictable because the fix list is scoped before code work starts.

 

Do you need to rebuild a slow WordPress site?

For long-lived WordPress sites with significant SEO equity and active editorial workflows, the answer is usually no. Most “slow WordPress” cases are stack-drift problems – caching layers that stopped working after a hosting move, deprecated PHP, plugin debt, theme decisions made years ago – that are fixable through engineering, not rewriting. The audit is what tells you which path makes sense, based on evidence for your specific site.

 

What is “good” mobile LCP for WordPress?

Google’s threshold for “good” mobile LCP is 2.5 seconds or less, measured at the 75th percentile of real-user field data. Between 2.5 and 4 seconds is “needs improvement.” Above 4 seconds is “poor.” This is the field data Google uses for Page Experience signals and search ranking – different from the lab scores PageSpeed Insights shows by default at the top of the report.

 

What is the difference between PageSpeed Insights and CrUX field data?

PageSpeed Insights shows two numbers: a lab score (a simulated test run on demand from a Google data center) and a field score (real-user data from the Chrome User Experience Report, when available for the URL or origin). The lab score can pass while the field score fails – and Google ranks on field data, not lab. CrUX is the public dataset of real Chrome user measurements aggregated at origin and URL level. For Core Web Vitals work that actually affects rankings, field data is the only score that matters.

Maciej Nowak

About the author

Maciej Nowak – CRO

Maciej is the CRO and co-founder of Osom Studio. He is a software engineer turned entrepreneur with a passion for WordPress. Maciej looks at business challenges from a developer perspective and on software projects from a business perspective. Outside of work, he runs, reads, and trains BJJ.

View all posts

Next article

Illustration of two computer monitors connected by an arrow, surrounded by icons for wordpress security, data servers, a shield, locks, email, globe, and gears—symbolizing secure data transfer or hosting network communication.

How to Switch WordPress Agencies Without Breaking Production

A man with light brown hair and a beard stands with arms crossed, wearing a white t-shirt, a smartwatch, and a confident expression—ready to tackle your next WordPress project against a plain white background.

By Maciej Nowak