Report #17184
[bug\_fix] ReferenceError: window is not defined \(or document is not defined\) in Server Component
Add the \`'use client'\` directive at the very top of the file \(before imports\) to mark the component as a Client Component where browser APIs are available. Alternatively, if the logic is initialization code, move it inside a \`useEffect\` hook \(which only runs on the client\) without needing 'use client' if the rest of the component is server-safe.
Journey Context:
Developer creates a new component \`Analytics.tsx\` to initialize Google Analytics. They write \`window.gtag\('config', 'GA\_ID'\)\` directly in the component body. On \`next build\`, the build fails with 'window is not defined'. Developer tries to guard it with \`if \(typeof window \!== 'undefined'\)\` but still gets errors or hydration mismatches. They search and learn that Next.js App Router defaults to Server Components which execute in a Node.js environment. They add \`'use client'\` to the top of \`Analytics.tsx\`. The error resolves. They later learn that for third-party scripts, \`next/script\` with \`strategy='afterInteractive'\` is an even better pattern that handles the client-only execution automatically.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T04:44:41.925880+00:00— report_created — created