Two people can convert the identical site, deploy the identical files, and land on genuinely different Lighthouse scores — not because either conversion was wrong, but because of how the specific host serves those files.
Response size limits you won't hit until you do
Vercel caps a serverless function's response body at 4.5MB — a hard platform limit, not a Next.js setting. A static site with modest, well-optimized images never approaches this. A site with 100+ self-hosted images can genuinely exceed it if served through a function response rather than a true static file server, which silently breaks the request rather than degrading gracefully. This is a real failure mode we hit directly and fixed by switching to a streamed response instead of a buffered one.
Local testing vs. a real CDN
Testing a converted site with next start on your own machine measures something meaningfully different from a real Vercel or Netlify deployment: no real CDN edge caching, no HTTP/2 multiplexing tuned the way a production host configures it, and your own machine's CPU is doing double duty running both the server and the Lighthouse audit simultaneously. We've seen the same build score noticeably lower locally than the same build deployed for real — local testing is a useful lower bound, not a reliable final number.
Static hosting vs. real framework hosting
A fully static HTML bundle (no server-side code at all) and a real Next.js project deployed with its own build step are genuinely different hosting shapes, even when the visual output is identical. A real Next.js deployment carries some inherent framework overhead a pure static file doesn't — usually small, but worth knowing which one you're actually testing before comparing numbers to a purely static competitor's site.
The practical rule
Don't trust a single Lighthouse run, and don't trust a local test as your final number. Run PageSpeed Insights against the actual, real, publicly deployed URL — not a preview link, not localhost — and run it more than once, since network conditions add real variance between runs. That's the only number worth actually comparing against the original.