Sanity+Nextjs 15 Ppr
Compatibility analysis and integration guide
Compatible
Highly compatible but requires wrapping dynamic Sanity fetches in Suspense boundaries to leverage Partial Prerendering effectively.
Technical Analysis
Sanity CMS and Next.js are technically highly compatible, but Partial Prerendering (PPR) introduces a specific architectural requirement. PPR works by generating a static shell and streaming dynamic holes. When fetching from Sanity, if you use dynamic functions (like draftMode(), cookies(), or headers()) or set cache: 'no-store', Next.js needs to know which parts of the tree are dynamic.
To make this work, you must ensure your Sanity fetching components are wrapped in a boundary. If a Sanity fetch is executed in a component that is part of the static shell without a boundary, the entire route may opt out of PPR and revert to fully dynamic rendering. For Visual Editing (Stega), ensure the preview client is only instantiated within these dynamic segments to maintain optimal build-time performance.
Known Issues (2)
1Static Shell De-optimization
If Sanity data is fetched in a top-level layout or component without a Suspense boundary, the static shell cannot be generated, forcing the whole page to dynamic rendering.
Always wrap components that call 'client.fetch' with dynamic parameters or 'draftMode()' in a <Suspense fallback={<Skeleton />}> boundary.
2Draft Mode Streaming Conflicts
Enabling Next.js Draft Mode triggers a dynamic segment which can behave inconsistently with PPR if the cookie check is performed outside of a deferred component.
Isolate the 'draftMode().isEnabled' check inside a component that is intentionally deferred via Suspense.
Best Use Cases
- E-commerce product pages with static Sanity descriptions and dynamic inventory streaming.
- Marketing sites with static layouts and dynamic, Sanity-driven 'Live Preview' capabilities.
- Personalized landing pages where the hero section is static but the content grid streams from Sanity based on user segments.
- Content-heavy blogs using PPR to serve an instant header/footer while the Sanity-sourced article body streams in.
Frequently Asked Questions
Share this Badge
Add this compatibility badge to your GitHub README or website.
[](https://devradar.dev/check/sanity-cms-with-nextjs-15-ppr)<a href="https://devradar.dev/check/sanity-cms-with-nextjs-15-ppr"><img src="https://devradar.dev/api/v1/badge/sanity-cms-with-nextjs-15-ppr.svg" alt="Sanity + Nextjs 15 Ppr" /></a>https://devradar.dev/api/v1/badge/sanity-cms-with-nextjs-15-ppr.svgGet Started
Architecture isn't a gamble.
It's a calculation.
Eliminate incompatible technologies and build a defensible tech stack.
No assumptions. No account required. Deterministic validation.