šŸ—“ļø Everything *[NYC] is back. A free gathering for AI builders. Sept 9 →

Sanity content loading bottom-to-top with staggered flash on first load

9 repliesLast updated: Dec 1, 2025

Hey guys, working on a NextJS project, which is live here . Noticing some strange behaviour on first load. Can anyone illuminate me as to why my page might be loading bottom-to-top in a staggered sequence? This content flash is driving me nuts!
AI Update

Based on your description of content loading "bottom-to-top in a staggered sequence," this is almost certainly a Next.js rendering issue rather than anything Sanity-specific. Here are the most likely causes and solutions:

1. React Suspense Boundaries / Streaming SSR

If you're using Next.js 13+ with the App Router, the default behavior uses streaming with React Server Components. This progressively sends HTML to the browser as components resolve, which can create that staggered loading effect.

Solutions:

2. Client-Side Data Fetching

If you're fetching Sanity content with useEffect or client-side queries, each component renders empty first, then populates with data after hydration. This creates the exact "flash" you're describing.

Solution:

3. Font Loading (FOIT/FOUT)

If you're using custom fonts without proper optimization, text might be invisible (FOIT - Flash of Invisible Text) or render with fallback fonts first (FOUT - Flash of Unstyled Text), causing layout shifts as fonts load.

Solution:

4. Image Loading Without Dimensions

If you're using images without specified dimensions, content below them will shift as images load and establish their height.

Solution:

5. CSS-in-JS / Styled Components FOUC

If you're using styled-components, Emotion, or similar CSS-in-JS libraries without proper SSR setup, styles may load after HTML, causing a Flash of Unstyled Content.

Solution:

6. Dynamic Imports with ssr: false

If you're using next/dynamic with { ssr: false }, those components won't render until client-side hydration completes, causing content to pop in.

Solution:

Quick Diagnostic Steps

Most Likely Culprit

Given the "bottom-to-top" staggered pattern, I'd bet on client-side data fetching combined with Suspense streaming. If you're fetching Sanity content in individual components rather than at the page level, each component will resolve independently, creating that staggered effect.

Try consolidating all your Sanity queries into a single server-side fetch at the page level, then pass that data down to child components as props. This should eliminate the staggered loading entirely.

Show original thread
9 replies

Was this answer helpful?

Sanity – Build the way you think, not the way your CMS thinks

Sanity is the developer-first content operating system that gives you complete control. Schema-as-code, GROQ queries, and real-time APIs mean no more workarounds or waiting for deployments. Free to start, scale as you grow.

Related contributions