northflank.com
Why we ditched Next.js and never looked back | Blog
### 1. Poor performance Next.js loves to talk about how fast it is. Yet it’s painfully slow at scale. Here’s what we saw: - Basic page renders were taking **200-400ms**. - Large pages, especially ones with dynamic content, could spike well beyond **700ms**. - If a Google crawler or our Ahrefs SEO monitoring tool hit multiple pages at once, the site would start crashing **multiple times per week**. - Next.js’s built-in caching was **unpredictable and inefficient** across multiple replicas. Performance isn’t just a "nice to have." Or at least, not for us. It’s everything. In a world where milliseconds determine conversion rates, Next.js forces businesses into a suboptimal reality where every interaction carries unnecessary latency. > **Google doesn’t wait. Users don’t wait. Next.js makes them wait.** … #### Landing page performance: - **First Contentful Paint:** Improved from **2.1s → 0.5s** (**4x faster**) - **Largest Contentful Paint:** Improved from **5.1s → 0.8s** (**6x faster**) - **Speed Index:** Improved from **8.4s → 1.7s** (**5x faster**) Even if you have a CDN in front, it doesn’t solve Next.js's deeper inefficiencies. Performance bottlenecks persisted regardless of CDN usage. Additionally, if you are seeking to enhance your landing page, you may find these tips beneficial. ... - **First Contentful Paint:** Improved from **2.0s → 0.5s** (**4x faster**) - **Largest Contentful Paint:** Improved from **3.6s → 0.8s** (**4.5x faster**) - **Total Blocking Time:** Improved from **2,810ms → 870ms** (**3x improvement**) … ### 2. SEO took a hit Next.js is supposed to be good for SEO because of SSR and SSG. Except when your page takes forever to render, search engines don’t care how "static" it is. We saw this firsthand: - Our **SEO performance halved in December**. - We **lost valuable rankings** because of **slow server-side rendering and JSON bloat**. - **Google was actively penalizing us** for slow speeds. - Customers noticed and **reported issues** with our slow-loading documentation pages. … ### 3. It was a black box - When Next.js crashed, we didn’t get **useful errors**. - When things slowed down, we couldn’t **pinpoint why**. - Instead of control, we got **a black box** with unpredictable performance issues. There were **no good ways to debug slow renders**. At some point, we stopped asking, *"How do we fix this?"* and started asking, *"Why are we using this?"* … ## The real cost of Next.js and Vercel One of the biggest issues with Next.js is how **tightly it’s coupled with Vercel**. - Next.js features often **work best (or only) on Vercel**. - **Vercel locks you in** with expensive hosting. - **Scaling Next.js is a headache** because of bad cache invalidation across replicas.
Related Pain Points3件
Poor page rendering performance at scale
9Next.js exhibits slow page rendering performance in production: basic pages take 200-400ms, large dynamic pages exceed 700ms, and crawlers hitting multiple pages simultaneously cause site crashes. Caching is unpredictable across replicas.
Vendor lock-in with Vercel makes migration to other hosting providers difficult
8Features work seamlessly on Vercel but become problematic when deployed elsewhere, creating tight coupling to Vercel's infrastructure. Some developers have inherited projects so tightly coupled to Vercel that migrating to other hosting providers like AWS proved nearly impossible, sometimes requiring complete rewrites.
Complex logging setup across multiple runtime environments
6Next.js middleware and production logging present unique challenges due to the framework's complex execution model. Developers spend hours implementing basic logging functionality that works across edge functions, server-side rendering, and client-side code, with confusion about where logs appear and how to maintain consistency.