[ Case study ]
CrUX showed category pages failing all three Core Web Vitals on mobile — the pages that carried 60% of non-brand entrances. A previous agency had proposed a full redesign; the retailer wanted to know what was actually slow first.
CLIENT a mid-size online retailer — FOCUS Diagnose with field data, not Lighthouse alone
Representative examplesEvery case study in this library is an illustrative composite of the kind of engagement we deliver — written to show our method and standards, not to name clients.
The client is a mid-size online retailer whose category pages carry most of its non-brand search traffic — and every one of them was failing Core Web Vitals on mobile. The storefront runs on a theme shared with checkout-adjacent templates, so careless changes anywhere risk the till. Merchandising apps add features on request, injecting scripts nobody tracks, and the trading calendar means fixes only get honestly measured during seasonal peaks, when the field data finally has enough users to speak.
CrUX showed category pages failing all three Core Web Vitals on mobile — the pages that carried 60% of non-brand entrances. A previous agency had proposed a full redesign; the retailer wanted to know what was actually slow first.
We proposed diagnosing before touching anything: field data first, lab tools second. CrUX and real-user monitoring showed the largest category image and two third-party scripts as the actual causes of the failing vitals — layout shift, the lab's favorite complaint, was secondary. The fixes were surgical and per-template: responsive image variants with priority hints for the hero slot, and every third-party tag moved under a consent-gated loader with a named owner in a register. Each fix waited for the rolling 28-day CrUX window to confirm it against what real phones experienced.
Just as important is what we ruled out, and why:
CrUX and RUM showed the LCP image and two third-party scripts as the real causes — the lab's complaints about layout shift were secondary.
Category imagery moved to responsive variants with priority hints; third-party tags moved under a consent-gated loader with a documented owner.
Each fix waited for the CrUX window to roll, so the claim rests on what real users experienced, not a lab run.
Delivered by the growth pod — technical SEO specialist + frontend engineer over 6 weeks, with working increments reviewed with the client every week.
Obstacle
The tag discovery widened: fourteen third-party scripts fired on category pages, four belonged to apps whose vendors had gone quiet, and none had a named owner.
Handled: We built the register, moved controllable tags behind the consent-gated loader, and disabled the four unowned ones on a monitored trial — no revenue complaint survived two weeks.
Obstacle
The shared theme leaked: an image fix staged for category pages also changed a checkout-adjacent template's hero rendering, caught in staging by the retailer's developer.
Handled: We split the change into per-template overrides with a staging diff reviewed before each deploy; the leak became the argument for keeping fixes surgical.
Obstacle
The six-week engagement outlived only two CrUX windows, so the final fixes could not be fully confirmed inside the project itself.
Handled: We staged the fixes so their windows overlapped, used RUM for interim reads, and left a monitoring sheet that confirmed the last window after handover.
The headline: all three core web vitals on category pages (p75), 28-day crux window after final fix — Poor → Good, read from CrUX field data. A second check: category-page entrances from non-brand organic queries, same period at +9%.
Speed stopped being a mystery the team argued about. New app requests now pass a simple question — which tag, which owner, what does it cost the page — before anything is installed, and the register made the answer checkable in a minute. The merchandising team kept its countdown timer, correctly, and the developer stopped dreading deploys to the shared theme. Peak season arrived with pages that had already been measured by the users who mattered.
The result was read from CrUX field data against the pre-engagement baseline over the stated window, with a guardrail check on category-page entrances from non-brand organic queries, same period. Where platform-reported numbers and business outcomes differ, this record says which layer it is quoting.
What we would do differently
We would have asked for RUM access in week one — the tag-injection discovery came from client-side monitoring we could have had immediately.
[ Related service ]
[ Related builds ]
4 27Weekly prompt-set answers citing or summarizing the brand's content, weeks 1 to 10
14 31Qualified inquiries per month attributed to service pages, over the 8 weeks after rollout versus the 8 before
[ Next step ]
Next case study