If you use Next.js anywhere but Vercel, here's some bad news: Next.js 15.1+ is broken.
tl;dr: Starting with version 15.1.8, Next.js might break metadata handling for non-Vercel deployments, potentially devastating your search rankings. This is not a bug.
When Did This Happen?
In 2024, Vercel introduced metadata streaming as an experimental feature. This fundamentally changes how Next.js handles metadata.
Traditional approach: Metadata tags (title, description, Open Graph tags) are rendered directly in the HTML <head>
during server-side rendering or static generation.
Metadata streaming: These same tags are sent separately after the initial page load, requiring JavaScript execution.
Vercel's Technical Justification
Vercel's stated rationale centers on performance optimization for metadata generation that causes computational bottlenecks. However, this solution creates more problems than it solves:
- Metadata is typically static and lightweight (< 1KB)
- Server round-trips for metadata are more expensive than inline generation
- Dynamic metadata needs are edge cases, not the norm
- The implementation of metadata streaming is complex and confusing.
How Did This Happen?
The root cause seems to trace back to performance complaints from developers dealing with computationally expensive metadata generation. Some users were experiencing significant delays during server-side rendering while generating metadata, particularly when fetching data from external APIs. As a result, Vercel started working on a solution.
What About Search Engines?
Search engines that don't run JavaScript will miss your metadata entirely. This hurts your SEO. So Vercel introduced another fix to this situation they got themselves into: htmlLimitedBots
. If the server detects a crawler, streaming is skipped and the metadata is included in the HEAD
.
What About Other Providers?
Are providers like Netlify, Cloudflare, or AWS better? Not really. For one, make sure to read this article. These providers created OpenNext to make Next.js work on their platforms. There is just one problem: These adapters are garbage. Next.js has become so tightly coupled to Vercel's infrastructure that porting it anywhere else requires significant reverse-engineering.
What If You Have A Static Build?
Here's where it gets absurd. Even with static builds, metadata tags aren't included in the HTML head anymore. They're bundled with React Server Components and require JavaScript execution. Your static site server now needs crawler detection logic just to serve basic HTML metadata.
It Gets Worse.
On March 21, 2025, a critical vulnerability (GHSA-f82v-jwr5-mffw/CVE-2025-29927) was disclosed in Next.js. This vulnerability allows attackers to bypass authorization checks implemented in middleware by manipulating a specific header. With a CVSS score of 9.1, this is classified as a critical security issue.
What does this have to do with any of this? Well, if you're locked into version 15.1.8 to avoid metadata streaming, you're running vulnerable code. That is because the patch was released on 15.2.3.
It Doesn't Get Better.
Metadata streaming obscures hidden performance problems. If you use metadata tag streaming, you might become unaware of latency issues with your pages. Search engine crawlers will penalize you if your page takes too long to load. So...
Closing Thoughts
Next.js has become a Vercel vendor lock-in disguised as an open-source framework. Save yourself the headache and choose something else for your "next" project.
Subscribe to the Newsletter
Get the latest posts from this blog delivered to your inbox. No spam.