River
Y CombinatorBacked by Y Combinator

Marketing & GrowthFree

Core Web Vitals Triage by Template

Every failing URL group mapped onto the template that generates it, plus the templates your field data cannot see, ranked by URLs each fix resolves.

Start here

River's vitals triage reads the Core Web Vitals report against your crawl and rebuilds the failures around templates. Each URL group Google reports gets mapped onto the template that generates its URLs, which usually collapses a long list of groups into a handful of fixes. Every fix then carries the number of URLs it resolves and the impressions behind them, so the order of work is arguable rather than assumed. You get a sheet of groups and a document of fixes, one per template.

The reports that rank for this search hand over a URL list and a traffic-light colour. That is the shape of the problem rather than a plan. A developer receiving 8,940 URLs cannot schedule anything, because the unit of work is a component file and nobody has said which one. Grouping by URL also hides the ratio that decides priority: four of Ashbourne Tile's templates generate 57,742 URLs, and the report names 8,940 of them.

Built for SEOs who have to turn a vitals report into a sprint ticket, performance leads inheriting a site nobody has profiled, and developers handed a spreadsheet with no template column in it. Run the technical SEO audit pack first if the site has never been crawled properly, and the internal linking audit afterwards, since a fast page nobody links to is still unreachable. Both live in the marketing workspace alongside this. Reach for it when a vitals report has sat open in a tab for a month.

The report is describing the popular quarter of your site

Each metric carries a fixed pair of thresholds and one percentile. Largest Contentful Paint is good at 2,500ms or less and poor above 4,000ms, Interaction to Next Paint is good at 200ms and poor above 500ms, and Cumulative Layout Shift is good at 0.1 and poor above 0.25. All three are read at the 75th percentile of page views. So a template whose typical load is quick still sits in the poor band when a quarter of its visitors take a slower path, and an average is never a diagnosis.

The report is also narrower than it looks. Search Console states that a URL group without a minimum amount of reporting data is omitted, and that the table is a sample rather than a complete list. Each row is a group of similar pages, grouped by Google rather than by you. Ashbourne Tile, a tile and stone retailer, has 61,400 indexable URLs across nine templates. Field data exists for 15,612 of them, which leaves 74.6 percent of the site missing from its own report.

The reason sits upstream. CrUX includes a page only where it is sufficiently popular, meaning a minimum number of visitors that Google does not disclose. Ashbourne's product template generates 42,800 URLs and 6,200 of them clear that bar. Three whole templates clear it nowhere. One of the three, the brand hub, measures 5.9 seconds in the lab across 214 URLs earning 96,000 impressions a month, and it has never once appeared in the report.

How it works

  1. Send both files

    The Core Web Vitals export and your crawl, with URL patterns and rendering details if present.

  2. River maps the groups

    Each group resolved to the template behind it, and split apart where a group spans two.

  3. Read the fix list

    One entry per template, with the cause, the URLs it covers and the impressions at stake.

  4. Ship, then recheck

    Field data moves on a rolling 28-day window, so recheck once it rolls rather than tomorrow.

What you get

  • Every URL group mapped onto the template that generates its URLs, with the mapping shown
  • Groups spanning two templates split apart, because one number there is hiding two causes
  • Fixes ranked by the URLs each resolves and the impressions sitting behind them
  • Templates with no field data at all, measured in the lab and ranked by impressions
  • One ticket per template naming the component, with every URL the change covers
  • The templates already passing, named and set aside so nobody reopens them

Common questions

My crawl has no template column. How do you work out the templates?

From URL shape, title and meta patterns, the shared script and stylesheet references, and word-count clustering. The output names the evidence behind each grouping and flags the ones it is unsure about, because a template boundary drawn wrongly sends a developer to the wrong file. Confirming those few is faster than labelling every URL yourself.

Why is a template with no field data worth a ticket?

Because the absence is a traffic fact, not a performance one. A page enters the dataset only after clearing an undisclosed visitor minimum, so a template spread thin across many low-traffic URLs stays invisible however slow it is. Those get lab measurements instead, labelled as lab, and ranked by the impressions the template earns.

Is lab data not unreliable compared to field data?

It measures something different rather than something worse. Field data records what your actual visitors experienced on their actual devices; a lab run records one synthetic load on fixed hardware. For a template with no field data there is nothing to compare against, so a lab number is the only evidence available and gets labelled that way.

Why does one of my groups contain two templates?

Because the grouping is Google's, made from pages it considers similar, and similar pages can render through different code. When it happens the row's number is a volume-weighted blend of two populations, which is why nobody could reproduce the failure. The triage splits the group and gives each template its own figure and its own verdict.

How long after shipping should I expect the numbers to move?

Field data is reported over a rolling 28-day window, so the reported figure keeps a month of pre-fix experiences in it after the change lands. Recheck once the window has rolled past the deploy date. Checking the next morning shows a barely-moved number and gets a real fix rolled back.

Does this replace a full technical audit?

No. It reads one report in depth and leaves indexability, canonicals and status codes to the technical SEO audit pack, and what assistants cite to the AI search visibility review. Speeding up a template whose URLs Google will not index is wasted engineering, so run those first on a site nobody has crawled.

Core Web Vitals Triage by Template

Fill in the form and your workspace opens with the work already underway.