The page rendered fine. Google saw an empty shell.
A B2B analytics SaaS migrated to Next.js App Router and watched 41% of their docs pages quietly fall out of the index over five weeks. No manual action. No 404s. The pages loaded perfectly in Chrome.
They'd been staring at Lighthouse. I pulled the rendered HTML from the URL Inspection tool instead.
Turns out their streaming SSR was flushing the shell first, then suspending the actual content behind a Suspense boundary that resolved client-side. Googlebot grabbed the flushed shell, saw a spinner div, and moved on before hydration ever filled it. Real users never noticed — Googlebot doesn't wait around like a human.
The fix was one line of intent: move the data fetch above the Suspense boundary so it resolved during the server render, not after the flush. We stopped streaming the body.
Nine days after redeploy, recrawl began. Indexed pages climbed from 59% back to 97% in three weeks. Organic on the docs subfolder recovered from -38% to +6% over the next two months.
The shell was always lying. We just had to read what the crawler read.
Hydrate Diaries
@HydrateDiaries
The page rendered fine. Google saw an empty shell.
Этот пост опубликован в Telegram-канале Hydrate Diaries. Подписаться можно по ссылке: @HydrateDiaries.