Implementation-first service

Core Web Vitals and speed fixes

When TTFB, LCP, or INP regress because of code, cache, CDN, script loading, theme or plugin behavior, or rendering bottlenecks, the work should stay focused on the layer that is actually causing the slowdown.

Sprint shape

Clear scope before implementation, one controlled sprint, and written verification at the end.

The first pass is meant to move the actual problem, not generate vague theory or generic audits without implementation.

Typical issues

  • High TTFB on key templates or routes.
  • Poor LCP after theme, plugin, or app changes.
  • INP issues caused by heavy scripts or UI logic.
  • Cache or CDN misconfiguration.
  • Render-blocking assets and delayed critical rendering.
  • Image delivery and lazy-loading mistakes.
  • Third-party scripts hurting real user performance.

Common root causes I usually find

When Core Web Vitals regress, the bottleneck is usually not that WordPress is slow. It is usually one of a few repeat failures: the wrong hero asset winning LCP, cache or CDN rules serving the wrong layer, a theme or plugin release adding synchronous work, third-party scripts taking over INP, or a template change turning a previously light route into a heavier render path.

The point of the first sprint is to isolate the dominant bottleneck, not to spread effort across every performance suggestion in a report.

What I need from you

Send the affected URLs or templates, what changed before the regression, your current cache and CDN stack, any PageSpeed screenshots, and whether the slowdown is steady or intermittent.

Best starting set

  • One homepage or primary landing page.
  • One category or template page.
  • One page that clearly became slower after a specific change.

Proof note

One recurring paid-work pattern here is post-release speed regression on high-value pages where the real bottleneck sits in template weight, asset delivery, cache behavior, or script loading rather than in one dramatic server failure.

The useful proof is not a generic score screenshot. It is isolating the dominant bottleneck on representative pages, moving it, and handing off before-and-after verification that maps back to the affected template.

Controlled WordPress CWV lab

I also maintain a controlled WordPress Core Web Vitals lab for public proof without exposing client data. It uses two matching WordPress setups: a slow baseline and a fixed implementation with the same dummy layout, route structure, hero area, review widget area, gallery, FAQ, testimonials, and post grid.

The slow routes scored 24, 44, 37, and 45 in PageSpeed lab checks. The matching fixed routes scored 100, 100, 100, and 100 after media, script, cache, and layout cleanup.

It is a technical work sample, not a client case study or a guarantee. The point is to show the sprint pattern: isolate the dominant bottleneck, fix the implementation layer, verify selected routes, and hand off the evidence.

View the WordPress CWV lab

What you get

A bounded sprint focused on the bottleneck, implementation changes where needed, before and after verification, and a written handoff.

Best fit

Sites with a clear speed problem and a real technical layer to fix.

Price expectation

The first step should feel like a fixed sprint, not a vague audit.

Most work starts as a fixed first sprint after the issue is reviewed.

  • Small diagnostics usually start around $350.
  • Focused technical SEO, tracking, indexing, or speed sprints commonly land between $650 and $1,500+.
  • Larger implementation or recovery work is scoped separately once the first failure path is clear.
  • If you need a $99 SEO audit, this is not the right fit.
  • If something technical is suppressing indexing, speed, crawl, tracking, or rollout recovery, send the URL, what changed, and the exact symptom.

Related notes

Read the symptom-led notes that support this lane.

These notes show the failure paths, checks, and verification logic that usually sit behind the sprint.

Read all notes

Start with the issue

Have the symptom and the context?

Send the URL, what changed, and where the break shows up. If the issue is sharp enough, the first reply should turn into a bounded sprint instead of a broad package.