---
layout: post
title: "Web-Perf Wednesday 001 – SPAs Are Finally Becoming Measurable"
date: 2026-07-15 02:00:00 +0000
categories: Web Development
main: ""
meta: "Chrome 151 brings native soft-navigation measurement closer, alongside better redirect timing, revealing CrUX data, and more trustworthy browser tooling."
---
## Welcome to Web-Perf Wednesdays!
For a while now, I’ve been curating my own weekly web performance and web
platform reading list through [RSS](/feed.xml), [newsletters](/newsletter/), and
a ChatGPT scheduled task. I decided to write my favourite bits up into
Web-Perf Wednesdays, a curated pick of the most pertinent and
interesting developments that week.
The digest is curated on a Monday and written up in time for the
Wednesday. Some drift may appear in the interim which I will endeavour to
correct, but please forgive any slightly-off timings.
## This Week
This week’s most consequential performance news is not a faster API or a new
optimisation trick. It is a change in what the browser can see. Chrome is
getting ready to treat certain Single-Page Application (SPA) route changes as
measurable performance events, which begins to close one of field monitoring’s
longest-standing blind spots. Better visibility is welcome, but the transition
will make otherwise familiar dashboards surprisingly easy to misread already.
## Chrome 151 Makes SPA Journeys Measurable
Chrome 151 Beta introduces two new Performance Timeline entry types:
[`soft-navigation` and
`interaction-contentful-paint`](https://developer.chrome.com/blog/chrome-151-beta).
Together, they give the browser a way to recognise an interaction-driven route
change, establish a new timing origin, and report contentful paints associated
with the updated view.
This matters because the browser and the user have traditionally had very
different ideas of what constitutes a page. A browser sees an SPA as one long
document; the person using it sees a product listing, a product page, a basket,
and a checkout. Most RUM tools bridge that gap with framework hooks, custom
timers, mutation heuristics, or proprietary virtual-page APIs. Those approaches
can be useful, but they do not provide one shared definition that every site
and monitoring product can rely on.
Chrome’s proposed definition is deliberately based on observable user
experience. A qualifying soft navigation needs a user interaction, a visible
URL change, and a visible paint. The [full soft-navigation
guidance](https://developer.chrome.com/docs/web-platform/soft-navigations)
also makes clear that false positives and false negatives remain possible;
framework authors and RUM vendors will still need to test how their own ideas
of a route align with the browser’s.
The immediate opportunity is much better route-level evidence. A respectable
initial LCP can conceal a painfully slow catalogue transition, account screen,
or basket update. Native entries should make those experiences easier to
identify and compare without every organisation inventing its own measurement
model.
The immediate risk is a measurement discontinuity. One document may begin to
produce several metric lifecycles, while an existing RUM integration continues
to emit its own virtual pages. Route-level and initial-load LCP might appear in
one percentile; the same transition might be counted twice; interactions near
a route boundary might move between populations. None of those failures need
to look obviously broken. The dangerous result is a plausible graph whose
meaning changed underneath it.
This is also a measurement launch, not an announcement that Google Search will
immediately assess every SPA route as a separate page. Conflating those two
ideas would create urgency for the wrong reason. The sensible reason to prepare
is that product teams and monitoring vendors can now observe experiences that
were previously awkward to measure consistently. That evidence can improve
engineering priorities long before it has any bearing on search policy.
Before adopting the new entries, run them alongside the existing
instrumentation. Record the route, previous route, browser version,
application release, and measurement-library version, then compare which
transitions each model detects. That kind of [SPA measurement
work](/consultancy/) is less about collecting another metric and more about
protecting every decision already built on the old one.
## Redirect Time Becomes Easier to Assign
Chrome 151 also adds an [opt-in for cross-origin redirect
timing](https://developer.chrome.com/blog/chrome-151-beta). An origin involved
in a redirect can allow the destination to measure that part of the journey,
giving teams better evidence for latency hidden inside authentication, SSO,
campaign tracking, localisation, or payment hand-offs.
The cooperation requirement is important: this does not make every opaque
redirect chain transparent overnight. Where both origins are under your
control, however, it can turn ‘the journey is slow’ into a much more useful
account of which system introduced the wait. Start with commercially important
entry points and ask external providers whether they intend to support the
mechanism.
## CrUX’s Android Regression Needs Context
At the start of this week, the latest published [Chrome UX Report release was
May 2026](https://developer.chrome.com/docs/crux/release-notes/). Google
reported an Android-heavy regression without a definitive cause: good LCP fell
to 68.6%, good INP to 86.6%, and the share of origins passing all Core Web
Vitals to 55.9%.
That wider movement changes the investigation, but it does not excuse a
site-specific decline. Compare mobile and desktop, important templates, browser
versions, traffic composition, and release dates before assigning a cause. A
[performance audit](/performance-audits/) should establish whether a site moved
with the ecosystem or materially underperformed it; the aggregate headline is
context, not a controlled experiment.
## Better Tools Still Need Expert Judgement
[Chrome DevTools 149](https://developer.chrome.com/blog/new-in-devtools-149)
fixed Live Metrics so Core Web Vitals tracking remains pinned to the primary
frame’s execution context. Previously, dynamic iframe churn could reset the
metrics — a particularly unhelpful behaviour on pages full of adverts, embeds,
consent tools, or payment frames.
Meanwhile, WebKit has introduced a [Safari MCP
server](https://webkit.org/blog/18136/introducing-the-safari-mcp-server-for-web-developers/)
that can expose DOM state, network requests, screenshots, console output, and
in-page performance data to compatible agents. It should reduce mechanical
evidence-gathering, but Safari Technology Preview on macOS is not a substitute
for physical-device testing or browser-process diagnosis. Tooling can make a
good investigation faster; it cannot make an incomplete investigation sound.
## Need Help with SPA Measurement?
If your application already has virtual pages, custom route timers, or
vendor-specific SPA instrumentation, Chrome’s new model deserves a careful
parallel trial. I can help compare route detection, attribution, sample volume,
and dashboard semantics; identify where the old and new populations disagree;
and leave you with reporting that remains intelligible through the migration.
The useful outcome is not simply ‘support for Chrome 151’. It is confidence
that a movement in LCP, CLS, or INP still means what everyone thinks it means.
If that is a problem you are about to inherit, [get in touch](/contact/).