Report #67521
[bug\_fix] Warning: Prop className did not match. Server: sc-xxx Client: sc-yyy
Configure styled-components babel plugin for Pages Router, or use the styled-components registry pattern with next/script for App Router to ensure SSR-generated CSS classNames match the client
Journey Context:
Developer sets up a new Next.js 14 project with styled-components. They create a simple styled.div\`color: red;\` component and render it in page.tsx. In development, the console shows a warning: 'Prop className did not match. Server: sc-abc123 Client: sc-def456'. In production, the page initially loads unstyled, then flashes to styled \(FOUC - Flash of Unstyled Content\). Developer searches and finds that styled-components generates different class names on server vs client because the ServerStyleSheet isn't being extracted and passed to the client. For Pages Router, they need to customize \_document.js to collect styles. For App Router, they need to create a registry.tsx with 'use client' that uses styled-components' StyleSheetManager and useStyledComponentsRegistry, then wrap the layout. This ensures the server-rendered HTML includes the style tags with correct class names that match the client's hydration.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T19:48:55.501416+00:00— report_created — created