FREE INSURED SHIPPING WORLDWIDE
SEO Site Speed Optimization | Core Web Vitals Fixes
WebSEOGrow · Speed Bay
Talk to an engineer
Core Web Vitals engineering

SEO Site Speed Optimization That Holds Up in the Field

Most speed audits end as a PDF nobody deploys. Ours ends with a faster template, a second waterfall beside the first, and a number your team can defend in a board meeting.

  • Field data from real users, lab data for reproduction — both, not one
  • The LCP element traced inside the request chain instead of guessed
  • INP repaired by removing long tasks, not by hiding them
  • CLS locked down with reserved media boxes and font metrics
  • Cache, CDN and font policy documented so fixes survive your next deploy

Onboarding within 48 hours · No lock-in on the first sprint · We work inside your stack, not a sandbox copy

Bay 01 · Mobile field sample BEFORE
42 PERFORMANCE SCORE SLOW FAST LCP 5.4S · INP 410MS · CLS 0.24
5.4sLCPpoor
410msINPpoor
0.24CLSpoor
Waterfall · product template 2.1s TTI
DNS40
TTFB580
HTML290
Blocking700
Render490
Biggest paint, before → after3.5s saved
Representative template set: 5.4s → 1.9s average LCP on a throttled phone.

A green score can still lose the click

Speed is the one ranking input your visitors feel directly. They do not see a Lighthouse circle; they see a hero image that arrives after they have already scrolled, a menu that jitters as a web font swaps, and a radio button that stays cold for a full second after the tap. Meanwhile your dashboard may show 91 because it was measured on a fast desktop connection against a cached copy of the page.

The gap between that score and your real-world experience is exactly where our work starts. Field data from the Chrome UX Report tells us which template is failing for which device class. Lab data on a throttled profile tells us which request, which element and which script is responsible. Until both agree, nothing gets touched.

Common failures we see on supplier and storefront sites:

  • Content injected by a builder plugin that renders after hydration, so the largest element is discovered late
  • Six analytics and heatmap tags fighting for the main thread before the first interaction
  • A carousel that lazy-loads the hero slide, delaying the only image that mattered
  • Web fonts with no fallback metrics, causing a visible reflow on every heading
  • Uncached HTML that makes every bot and buyer wait on a database round trip

What you get from our SEO site speed optimization work

This is an engineering engagement, not a report. Each deliverable is tied to a metric and a template.

01 · DIAGNOSIS

Template-level baseline

Segment-level field data plus a throttled lab run for home, category, product and article templates. You get one page per template, not one page for the whole site.

02 · LCP

Largest paint surgery

Identify the real LCP node, then preload it, un-lazy it, compress it and move it off the critical path. We measure the delta in milliseconds per template.

03 · INP

Main-thread budget

Long-task inventory, tag governance, deferred third parties and smaller hydration units. Interaction latency is treated as a feature requirement.

04 · CLS

Layout stability

Explicit dimensions, aspect ratios, reserved slots for banners and embeds, and font metric overrides that stop the swap from pushing content.

05 · DELIVERY

Cache and TTFB

Full-page caching, edge HTML, stale-while-revalidate, Brotli, HTTP/2 and a hosting region that matches your buyers rather than your office.

06 · PROOF

Before/after re-test

A second run at 7 and 30 days, a written changelog of every change, and a regression checklist your developer can keep.

The work overlaps with crawl efficiency and rendering, which is why we run it as part of Technical SEO Services rather than as a standalone performance ticket.

Quantify before you change anything

Every sprint opens with the same three readings. First, the 75th percentile of LCP, INP and CLS from field data, split by mobile and desktop and by template. Second, a cold-cache lab run on a mid-tier Android profile at 4G throughput. Third, a request inventory with byte weight per origin, so we know which vendor is expensive before anyone argues about opinions.

Only then do we choose the target. A store with a 5.4-second mobile LCP does not need a rounding-error discussion about unused CSS; it needs the hero image and the blocking scripts dealt with. Priority comes from how many sessions each template carries multiplied by how far it sits from the 2.5-second threshold.

We also check what Google actually has. Search Console and the URL Inspection API show the rendered HTML and the resources the crawler fetched. If the crawler blocks a script that draws your main content, no amount of image compression will help, because the page Google indexes is not the page you think you shipped.

Fix LCP first, because it gates everything else

Largest Contentful Paint is rarely one problem. It is a chain: the HTML has to arrive, the CSS has to parse, the image has to be discovered, then it has to download and decode. Break the chain anywhere and the paint waits.

Find the element, not the metric

We log the actual LCP node per template — often a hero image on home, a product gallery on PDP, a heading on category pages where no image sits above the fold. That distinction changes the fix completely. A heading does not need preloading; it needs the render-blocking stylesheet split so text can paint.

Make the discovery instant

Hero media gets fetchpriority="high", a preload hint in the head, and no lazy attribute. Everything below the fold keeps lazy loading. We then verify in the waterfall that the image request now starts before the CSS finishes, which is the whole point.

Cut the render-blocking queue

Critical CSS is inlined for the above-the-fold sheet, the rest loads asynchronously, and unused builder CSS is removed rather than deferred forever. On WordPress and Shopify builds this alone often recovers 300 to 700 milliseconds on mobile, because a page-builder stylesheet generated for every module is shipped to every page.

INP is a main-thread problem, not a bandwidth problem

Interaction to Next Paint punishes pages that look fast and feel slow. The usual suspects are familiar: a chat widget that boots on load, a tag manager container with twelve tags, a hydration pass that rebuilds the whole tree, an event handler that recalculates a price table on every keystroke.

Our approach is a budget. We define how many milliseconds of main-thread work the first interaction may cost, then measure each third party against it. Tags that cannot justify their cost get deferred until idle, loaded on interaction, or removed. Long tasks get split, expensive handlers get debounced, and heavy computation moves off the main thread where the stack allows it.

We also check for layout thrash: code that reads offsetHeight and then writes styles in a loop will produce a janky feel that no image optimization can fix.

CLS is a promise you keep to the layout

Cumulative Layout Shift is the cheapest of the three to fix and the most often ignored, because it is invisible on a fast connection with a warm cache. The fix list is short and mechanical: width and height on every image, aspect-ratio on embeds and video, min-height on ad and promo slots, and a font strategy that does not change metrics mid-render.

For fonts we self-host, subset to the ranges you actually use, preload a single weight, and pair the web font with a local fallback tuned by size-adjust, ascent-override and descent-override. The heading renders immediately in the fallback and swaps with almost no movement.

Then we reserve space for anything injected late — consent banners, currency switchers, review stars, "you may also like" blocks. If a component cannot reserve its space, it does not belong above the fold.

Delivery layer: TTFB, cache and CDN

You can optimize a page perfectly and still lose because the server takes 900 milliseconds to answer. We measure TTFB at the edge and at origin, then fix the layer that is actually slow: unindexed database queries, an uncached product collection, a plugin that rebuilds a menu on every request, or a hosting region on the wrong continent.

Typical delivery work includes full-page cache with a sensible bypass list, edge HTML caching for anonymous traffic, stale-while-revalidate so a rebuild never blocks a request, Brotli on text assets, HTTP/2 or HTTP/3, and an image CDN that resizes at the edge instead of shipping a 2400-pixel JPEG into a 380-pixel slot.

Images and fonts are still the biggest silent cost

Serve AVIF or WebP with a legacy fallback, size every source to its rendered box, and use a responsive srcset so a phone never downloads a desktop hero. Compress with intent: a 60 KB hero at 1600 pixels wide beats a 400 KB hero at 3200 pixels that nobody can see the difference in.

Third-party scripts and theme bloat

We inventory every tag by owner and purpose, then apply a rule: nothing loads before the first paint unless it changes what the buyer sees. Analytics, chat, heatmaps and review widgets move behind an interaction or idle callback. Theme work follows the same logic — remove unused modules, drop dead plugin CSS, and stop shipping a full icon library for four icons.

On WordPress and WooCommerce stacks, most of the recoverable weight lives in plugins and page-builder output. That is why this work is usually paired with WordPress SEO Services, where we control both the markup and the load order.

Mobile-first is not a checkbox, it is the only measurement that counts

Google indexes the mobile version of your site. Your buyers in the US and EU open product pages on a four-year-old phone over a congested network. A desktop score of 96 means very little in that context. Every baseline we produce is anchored to a throttled mobile profile with cold cache, and every re-test uses the same profile so the comparison is honest.

That means we test the mobile menu, the sticky add-to-cart bar, the horizontal scroll regions and the tap targets. A page can pass Core Web Vitals and still be miserable on a phone; we treat both as part of the brief.

The five-stage speed sprint

  1. Hook up the gauges

    Search Console, CrUX history, analytics and a lab runner are connected. We agree on which templates carry revenue and which metrics define success.

  2. Run the baseline

    Field and lab readings per template, a full request inventory, and a ranked list of blockers by estimated millisecond recovery.

  3. Tune the heaviest templates

    Markup and asset changes ship in small batches, each with its own before/after reading so a regression is attributable rather than mysterious.

  4. Rebuild the delivery layer

    Cache rules, CDN behaviour, compression and origin response are adjusted, then verified from three geographic locations.

  5. Re-test and hand over the log

    A 7-day and 30-day re-test against the same profile, a changelog in plain language, and a guardrail list your developer keeps in the repo.

What the gauges read afterwards

"A kitchenware exporter, 5 months: mobile LCP 4.6s to 1.8s, organic inquiries 6 to 24 per month. The first sprint only touched the product template."

Home goods · EU

"A B2B packaging supplier, 7 months: category pages 5.1s to 2.0s, demo requests 9 to 27 per month, crawl requests on faceted URLs cut by half."

Industrial supply · US

"A hardware brand on a heavy builder theme, 4 months: INP 410ms to 160ms after tag consolidation. Trial signups rose 38% with no design change."

Consumer electronics · UK

Scope-based quotes, no price guessing

Every quote is built from three inputs: how many templates need work, whether we can change code or must work through a theme and plugin layer, and how much of the delivery stack is under your control. A single-template rescue is a short sprint; a full storefront with a custom headless front end is a longer programme with a monthly retainer for monitoring.

You get a written scope with the exact templates, the metrics in scope and the handover format before anything starts. If a fix needs a developer we do not have access to, we write the ticket with acceptance criteria instead of leaving you with a vague recommendation.

Tell us the template that hurts most

Send one URL and the device you care about. We will reply with the three largest blockers we can see from the outside, free of charge.

Questions buyers ask before the first sprint

How long before a speed change is visible?

Markup and asset fixes usually move lab numbers within days and field data within two to four weeks, because field data is a rolling 28-day window. We schedule a 7-day check for direction and a 30-day check for the real reading.

Do you promise a specific PageSpeed score?

No. Scores move with test conditions and third-party code we do not control. We commit to measured improvements on named templates and to a documented before/after, not to a number on a circle.

Is speed work safe for existing rankings?

Yes when it is done in small batches with a rollback path. Every change ships with a before/after reading and a way back. We never touch URLs, canonicals or indexation logic during a speed sprint without a separate sign-off.

Do we need a developer on our side?

Useful but not mandatory. If we have repository or CMS access we implement directly. If not, we deliver scoped tickets with acceptance criteria and review the deploy afterwards.

What do you need from us to start?

Read-only access to Search Console and analytics, a staging URL, and one person who can approve deploys. That is enough for the baseline.

How do you prove it actually worked?

Three layers: field data for the same template and device class, a lab run on an identical throttled profile, and business metrics such as add-to-cart rate or inquiry volume for the affected landing pages.

Will the fixes survive our next theme update?

Only if they are documented. We hand over a guardrail file that lists what must not be reverted — preload hints, image dimensions, cache headers, deferred tags — and we re-check after major releases if you keep us on monitoring.

Who runs the gauges

A small performance team that has spent the last several years inside e-commerce themes, headless front ends and WordPress builds — the three environments where speed work either lands or gets reverted by the next plugin update. We read field data first, write tickets that a developer can execute without a meeting, and report in milliseconds and inquiries rather than in adjectives.

Documentation is part of the deliverable. If we disappeared tomorrow, your developer should still be able to keep the template fast using the changelog and the guardrail list. That is the standard we hold ourselves to.