For years, frontend architects have faced a painful compromise between static generation (SSG) and dynamic server-side rendering (SSR). Static generation provides blazing-fast edge caching and near-zero Time to First Byte (TTFB), but breaks down when pages contain personalized user data such as shopping cart counters, profile badges, or real-time pricing. Conversely, standard SSR handles personalized data seamlessly, but forces the entire page to wait for database queries, causing sluggish TTFB and poor Core Web Vitals scores. In 2026, Next.js 15 Partial Prerendering (PPR) definitively solves this paradox.
Partial Prerendering combines the speed of static edge caching with the versatility of dynamic server streaming within a single HTTP request. A static shell (navigation headers, layout wrappers, skeleton placeholders) is served instantaneously from the edge cache, while dynamic components enclosed in React Suspense boundaries stream from the server as their data resolves. This engineering guide covers the architecture, configuration, and production benchmarks of PPR.
Architectural Evolution: SSG vs SSR vs PPR
To appreciate how PPR transforms web delivery, compare the underlying HTTP rendering lifecycles:
| Rendering Strategy | Initial HTML Delivery | Dynamic Data Handling | Typical Edge TTFB |
|---|---|---|---|
| Static Site Generation (SSG) | Pre-rendered HTML served instantly from CDN | Requires secondary client-side fetch() causing layout shifts |
15ms – 30ms |
| Server-Side Rendering (SSR) | Blocked until slowest database query resolves | Calculated on server prior to sending first byte | 250ms – 650ms |
| Partial Prerendering (PPR) | Static shell served instantly from edge | Parallel HTTP stream feeds dynamic holes without blocking TTFB | 20ms – 35ms |
Enabling Partial Prerendering in Next.js 15
To enable PPR, configure the experimental flag inside next.config.mjs:
// next.config.mjs
/** @type {import('next').NextConfig} */
const nextConfig = {
experimental: {
ppr: 'incremental', // Allows adopting PPR route-by-route safely
},
};
export default nextConfig;
Now, enable PPR on specific high-traffic routes by exporting the experimental config in your page component:
// app/products/[slug]/page.tsx
import { Suspense } from 'react';
import { ProductGallery } from '@/components/ProductGallery';
import { StaticProductDetails } from '@/components/StaticProductDetails';
import { DynamicUserCartButton } from '@/components/DynamicUserCartButton';
import { RecommendedProductsSkeleton, RecommendedProducts } from '@/components/RecommendedProducts';
export const experimental_ppr = true; // Activate Partial Prerendering for this route
export default async function ProductPage({ params }: { params: { slug: string } }) {
// Static content: pre-rendered at build time or ISR cache
const product = await getStaticProduct(params.slug);
return (
<div className="max-w-7xl mx-auto px-4 py-8">
{/* 1. Instant Static Shell: Shipped in the first TCP packet */}
<div className="grid grid-cols-1 md:grid-cols-2 gap-8">
<ProductGallery images={product.images} />
<div>
<StaticProductDetails title={product.name} description={product.description} />
{/* 2. Dynamic Hole: Suspended and streamed on-demand */}
<Suspense fallback={<button className="skeleton-btn">Loading options...</button>}>
<DynamicUserCartButton productId={product.id} />
</Suspense>
</div>
</div>
{/* 3. Personalized Recommendations: Dynamic streaming */}
<div className="mt-16">
<h2 className="text-2xl font-bold mb-4">Recommended For You</h2>
<Suspense fallback={<RecommendedProductsSkeleton />}>
<RecommendedProducts categoryId={product.categoryId} />
</Suspense>
</div>
</div>
);
}
Performance Telemetry: Benchmarking TTFB & LCP
In our tests simulating mobile 4G connections accessing an e-commerce product page:
- Time to First Byte (TTFB): Dropped from 480ms (traditional SSR) to 28ms (Next.js 15 PPR).
- Largest Contentful Paint (LCP): Reached visual completion in 780ms compared to 1,650ms on SSR.
- Cumulative Layout Shift (CLS): Maintained a rock-solid 0.00 because static skeletons enforce identical layout dimensions before dynamic content streams in.
Crucial Architectural Rules for PPR
- Isolate Cookies & Headers Access: Any call to
cookies(),headers(), or dynamic search parameters must reside inside a Suspense boundary. If invoked in the root layout or outside Suspense, Next.js de-optimizes the entire page back to full SSR. - Design Exact-Fit Skeleton Fallbacks: Ensure skeleton fallbacks match the exact width, height, and aspect ratios of the rendered dynamic component to prevent presentation delay.
- Leverage Stale-While-Revalidate Edge Caching: Pair PPR with Cloudflare or Fastly edge networks to cache the static shell globally, reducing origin server load by over 80%.
Conclusion
Partial Prerendering represents the pinnacle of modern web rendering architecture. By serving instant static shells while streaming personalized dynamic state asynchronously, Next.js 15 delivers the holy grail: instantaneous edge performance, maximum SEO discoverability, and rich personalized user experiences.

Saizul Amin is a digital growth strategist and SEO consultant specialising in search engine optimisation, web development, AI-powered automation, and online income systems. With 8 years of hands-on experience helping businesses and individual creators grow their online presence, Saizul combines technical expertise with practical, results-driven strategy.
Experience & Background
Saizul started his digital career in 2017, initially working with Bioscope Limited to build and optimise websites for organic search traffic. Over the years, he has worked across industries including DGHS, NAVANA, UNICampus, UNIPathways, UniqueMark, developing a deep understanding of what it takes to rank, convert, and grow sustainably online.
His work spans the full digital stack — from technical SEO audits and content strategy to WordPress development, marketing automation, and AI tool integration for small businesses and startups.
What He Covers on This Blog
Every article on SaizulAmin.com is written from direct experience. Saizul does not publish theoretical content — every guide, tool recommendation, and strategy shared here has been tested and applied in real projects. Topics include:
- Search engine optimisation (on-page, technical, and content SEO)
- Digital marketing strategy and growth systems
- AI tools and automation for business productivity
- Web development, WordPress, and website building
- Making money online through freelancing and affiliate marketing
Why Trust This Content
All recommendations on this site reflect tools and strategies Saizul actively uses or has personally evaluated. Where affiliate relationships exist, they are clearly disclosed. Content is regularly reviewed and updated to reflect current best practices and algorithm changes.
