Six of the 20 agency websites we checked from Vercel's solution partner directory on 28 October 2026 do not run Next.js themselves. One of them, Blazity, sells Next.js performance optimisation and legacy to Next.js migration from a site built in Webflow. Another, Bejamas, lists Next.js as a core service and ships its own homepage in Astro with 16 KB of JavaScript, the lightest in the sample.
This teardown reads 20 Next.js and React agency websites as evidence: what framework each runs, how much JavaScript the homepage ships, what Google's Chrome UX Report says about real visitors, and where the content lives. The data comes from our own requests to each homepage, the Chrome UX Report as rendered by Treo, and the HTTP Archive's technology report for September 2026. The raw file is listed at the end of the method section.
How we chose the 20 and what we measured
We started from Vercel's solution partner directory, which listed 60 partners on 28 October 2026. We removed holding-company networks such as WPP and VML, consultancies describing teams of 500 or more, and SAP or commerce-platform specialists, then took 20 independent agencies whose directory profile is about building websites or web products. Being a Vercel partner does not mean an agency only builds in Next.js, which turned out to matter.
| Check | How we measured it | Why it matters |
|---|---|---|
| Frontend | Markers in the homepage HTML: /_next/ paths, data-wf-site, wp-content, /_astro/ | Does the agency use what it sells? |
| JavaScript weight | Compressed size of every external script referenced in the initial HTML | A proxy for main-thread work on a phone |
| Field data | Chrome UX Report, phones and all devices, via Treo | What real Chrome visitors experienced |
| Content source | Image and asset hosts in the HTML, such as cdn.sanity.io or a.storyblok.com | Who can change the site without a developer |
| Hosting | Response headers such as x-vercel-id | Where the "ownership" question really sits |
Source: Octo Agency method; Core Web Vitals thresholds from web.dev, Google
Two limits. We did not run Lighthouse for this piece: lab scores vary from run to run and from machine to machine, and the field data says more about real visitors. The JavaScript figure counts only scripts named in the first HTML response, so tags loaded later by a tag manager are missing and the real totals are higher. Our raw data is saved as research/OB-0155-nextjs-agency-sites-2026-10-28.tsv.
The 20 sites: framework, weight and content source
| Agency | Frontend | Content source | HTML, KB | JavaScript, KB |
|---|---|---|---|---|
| 10up | WordPress | WordPress | 15 | 45 |
| Basement Studio | Next.js, App Router | Sanity | 41 | 923 |
| Bejamas | Astro | Sanity signals | 19 | 16 |
| Big Human | Next.js, Pages Router | Strapi | 31 | 369 |
| Blazity | Webflow, served through Vercel | Webflow | 28 | 121 |
| Brandung | Next.js, App Router | Storyblok | 92 | 402 |
| Build in Amsterdam | Next.js, Pages Router | Storyblok | 15 | 381 |
| Chapter Three | Next.js, Pages Router | Drupal | 48 | 287 |
| Delicious Simplicity | Next.js, App Router | None visible | 13 | 214 |
| Engine Digital | Blocked by a bot challenge | Unknown | n/a | n/a |
| Enjoy Digital | Umbraco | Umbraco | 49 | 166 |
| Feels Like | Next.js, Pages Router | DatoCMS | 10 | 608 |
| Fishtank | Next.js, Pages Router | Sitecore | 95 | 1,642 |
| FocusReactive | Vite static build | None visible | 17 | 727 |
| Hoo Koo E Koo | Next.js, Pages Router | Payload | 3 | 229 |
| Monogram | Next.js, App Router | Sanity | 140 | 363 |
| Space Dinosaurs | Next.js, App Router | None visible | 29 | 269 |
| Unlikely | Next.js, App Router | Storyblok | 38 | 354 |
| UNRVLD | Next.js, App Router | Sanity | 39 | 320 |
| Webstacks | Next.js, App Router | Sanity | 451 | 1,113 |
Source: Octo Agency requests to each homepage, 2026-10-28; sizes are compressed transfer sizes
Next.js is the majority, not the rule. Fourteen of 20 run it, split eight on the App Router and six on the older Pages Router. The Pages Router sites are not broken, but an agency selling App Router migrations from a Pages Router site has a project of its own waiting.
The weight spread is wide. Excluding the two outliers, Fishtank at 1,642 KB and Webstacks at 1,113 KB, the Next.js homepages sit between 214 KB and 923 KB. Basement's 923 KB pays for a heavily animated portfolio, which is a fair trade for a design studio whose visitors are mostly on desktop. Webstacks' homepage HTML alone is 451 KB compressed, about 14 times the sample median of 31 KB, because the page carries its CMS data inline.
The lightest sites are not Next.js. Bejamas (Astro, 16 KB) and 10up (WordPress, 45 KB) ship a fraction of the JavaScript. Both agencies build Next.js for clients and chose something else for a mostly static marketing page, which is a sensible decision and the most honest advice in the sample.
Real-user speed: most of these sites are too small to measure
Google's Chrome UX Report only includes an origin that is publicly discoverable and "sufficiently popular", a visitor threshold Google does not disclose. Agency websites are low-traffic by nature, so the field data is thin.
| Agency | Frontend | Phone LCP | Phone INP | Phone CLS | Phone pass | All devices LCP |
|---|---|---|---|---|---|---|
| 10up | WordPress | 1.6 s | 100 ms | 0.00 | Yes | 1.4 s |
| Bejamas | Astro | 1.4 s | 150 ms | 0.00 | Yes | 0.9 s |
| Basement Studio | Next.js | 1.4 s | 450 ms | 0.00 | No, INP | 1.0 s |
| Unlikely | Next.js | 2.1 s | No data | 0.00 | Not enough data | 1.7 s |
| FocusReactive | Vite static | No phone data | No phone data | No phone data | n/a | 0.7 s, desktop |
| Enjoy Digital | Umbraco | No phone data | No phone data | No phone data | n/a | 2.9 s, desktop |
Source: Chrome UX Report monthly data via Treo, read 2026-10-28; good thresholds are LCP 2.5 s, INP 200 ms and CLS 0.1 (web.dev, Google)
Twelve more origins did not return data through Treo after repeated reads, and two showed no data at all. We report those as not measured, not as failing.
The pattern in the four phone results matches the web as a whole. Every site loads its main content quickly on a phone, with LCP between 1.4 and 2.1 seconds, and nobody shifts the layout. The one failure is responsiveness: Basement's homepage takes 450 ms at the 75th percentile to respond to a tap, more than twice the 200 ms threshold, and its 923 KB of JavaScript is the likely reason. Only 15% of Basement's Chrome traffic is on phones, so most of its visitors never see the problem.
What the wider web says about Next.js speed
The HTTP Archive's technology report gives the base rate the agency sites cannot. In September 2026, 35.7% of the 395,345 mobile origins detected as Next.js passed all three Core Web Vitals. Across all origins the figure was 52.8%, for Webflow 71.3% and for Astro 71.1%.
| Technology | Mobile origins | Pass, mobile | Pass, desktop | Good LCP, mobile | Good INP, mobile |
|---|---|---|---|---|---|
| Next.js | 395,345 | 35.7% | 56.9% | 53.5% | 59.7% |
| Astro | 47,277 | 71.1% | 84.6% | 81.1% | 85.0% |
| Webflow | 59,483 | 71.3% | 82.6% | 78.6% | 88.0% |
| All origins | 8,569,446 | 52.8% | 60.8% | 65.6% | 79.4% |
Source: HTTP Archive Core Web Vitals technology report API, September 2026 crawl, read 2026-10-28
The Next.js number includes logged-in apps, dashboards and stores alongside marketing pages, which pulls it down, so it is not a verdict on any one agency. It does show where the risk lies: only 59.7% of Next.js mobile origins have a good INP, against 79.4% across the web. That is the same failure Basement shows. Our website speed statistics roundup covers the business case for these thresholds, and our piece Core Web Vitals Statistics 2026: Pass Rates by Platform and Industry breaks the pass rates down by platform.
The advice on the service pages, set against the sites
Most of the 20 make performance claims somewhere. We read the Next.js or performance service pages of six of them and set each claim against what their own homepage does.
| Agency | What the service page says | What its own homepage does |
|---|---|---|
| Blazity | Sells Next.js performance optimisation and migration "from stuck to fast"; diagnoses "with field data, not just Lighthouse scores" | Built in Webflow and served through Vercel; no field data returned |
| Bejamas | Next.js done right, "then handed to a team that can own it" | Runs Astro with 16 KB of JavaScript and passes on phones |
| Webstacks | Speed and SEO "are table-stakes for B2B websites, and Next.js delivers on both" | Next.js with 451 KB of HTML and 1,113 KB of JavaScript; no field data returned |
| FocusReactive | Next.js development "engineered for best Core Web Vitals" (homepage); the hosting choice is "ours to make" | A Vite static build, fast on desktop at 0.7 s LCP |
| Space Dinosaurs | Specialises in Core Web Vitals improvements; states "1 second of delay = 7% fewer conversions" without naming a source | Next.js, 269 KB of JavaScript; no field data returned |
| Chapter Three | A Next.js front end for Drupal sites | Exactly that: Next.js reading from a Drupal CMS |
Source: each agency's service and home pages, read 2026-10-28
None of this proves an agency builds slow client sites. Blazity's Webflow site is a reasonable choice for a marketing page that a non-developer edits, and a performance engineer may well know that Next.js is the wrong tool for it. Bejamas and FocusReactive made the same choice with different tools. The useful reading is the opposite of a gotcha: the agencies that know Next.js best often do not use it for a brochure site. That is also our position, which we set out in Webflow or Next.js for a marketing site.
The unsourced conversion figure on the Space Dinosaurs page is worth a separate note. A seven percent loss per second circulates widely in agency copy without a dataset behind it. If a partner quotes it, ask where it comes from.
Ownership: you own the code, but check the hosting and the CMS
The ownership argument for Next.js is real. It is open source, and its own documentation describes self-hosting on a Node.js server, in a Docker container or as a static export. FocusReactive's service page says it will sometimes deploy to AWS with full control over the runtime, and that in-house developers who inherit its codebases can extend them without the agency.
Two things complicate it on the agency sites themselves.
Hosting concentrates on one vendor. All 14 Next.js sites answered with Vercel headers, as did Blazity's Webflow site and FocusReactive's static build. That is unsurprising for Vercel partners and does not lock anyone in, but features such as image optimisation, caching and incremental regeneration need extra work when self-hosted. The Next.js documentation spends most of its self-hosting guide on cache handlers, encryption keys and version skew across servers. Ask the agency what moving off Vercel would cost before you sign.
Content ownership sits in a second vendor. Twelve of the 14 Next.js sites pull their content from a headless CMS: Sanity on four, Storyblok on three, and Strapi, Drupal, DatoCMS, Sitecore and Payload on one each. That is how marketers edit without a developer, and it means the client relationship spans a framework, a host and a CMS. Two sites, Delicious Simplicity and Space Dinosaurs, showed no CMS in their HTML, which may mean content lives in the code and every change needs a developer.
How to use this when choosing a Next.js agency
Read the agency's website as a sample of its work, with care.
1. Check what it runs. View the page source and search for "_next". If the agency sells Next.js and does not use it, ask why. A good answer, such as "a static site generator is lighter for a brochure", is a point in its favour.
2. Ask for field data on client sites. The agency's own origin is probably too small for the Chrome UX Report. Ask for 75th percentile LCP and INP on phones for two client sites with real traffic.
3. Ask about INP specifically. It is where Next.js sites fail most often, at 59.7% good on mobile across the web.
4. Ask who edits what. Name the CMS, who holds the account, and which changes need a deploy.
5. Ask what leaving the host involves. Self-hosting Next.js is documented and possible; the work it adds should be in the proposal.
For our part, we build marketing sites in Webflow and applications in Next.js, and our four-week marketing-site process assumes a marketer will edit the site after launch. We would recommend Next.js for a marketing site only when it shares components or logins with a product, and we state that bias. Our white-label partner comparison applies the same read-the-site method to agencies selling capacity. If you need an application rather than a brochure, our web apps service page explains how we scope it.


