Debug getServerSideProps and getStaticProps errors in Next.js. Use when: (1) Page shows generic error but browser console is empty, (2) API routes return 500 with no details, (3) Server-side code fails silently, (4) Error only occurs on refresh not client navigation. Check terminal/server logs instead of browser for actual error messages.
DevOps
1.8K Stars
179 Forks
Updated Jan 17, 2026, 07:02 PM
Why Use This
This skill provides specialized capabilities for blader's codebase.
Use Cases
Developing new features in the blader repository
Refactoring existing code to follow blader standards
Understanding and working with blader's codebase structure
---
name: nextjs-server-side-error-debugging
description: |
Debug getServerSideProps and getStaticProps errors in Next.js. Use when:
(1) Page shows generic error but browser console is empty, (2) API routes
return 500 with no details, (3) Server-side code fails silently, (4) Error
only occurs on refresh not client navigation. Check terminal/server logs
instead of browser for actual error messages.
author: Claude Code
version: 1.0.0
date: 2024-01-15
---
# Next.js Server-Side Error Debugging
## Problem
Server-side errors in Next.js don't appear in the browser console, making debugging
frustrating when you're looking in the wrong place. The browser shows a generic error
page or 500 status, but no stack trace or useful error information appears in DevTools.
## Context / Trigger Conditions
This skill applies when:
- Page displays "Internal Server Error" or custom error page
- Browser console shows no errors, or only a generic fetch failure
- You're using `getServerSideProps`, `getStaticProps`, or API routes
- Error only occurs on page refresh or direct navigation (not client-side transitions)
- The error is intermittent and hard to reproduce in the browser
Common misleading symptoms:
- "Unhandled Runtime Error" modal that doesn't show the real cause
- Network tab shows 500 but response body is empty or generic
- Error disappears when you add console.log (timing issue)
## Solution
### Step 1: Check the Terminal
The actual error with full stack trace appears in the terminal where `npm run dev`
or `next dev` is running. This is the **first place to look**.
```bash
# If you don't see the terminal, find the process
ps aux | grep next
# Or restart with visible output
npm run dev
```
### Step 2: Add Explicit Error Handling
For persistent debugging, wrap server-side code with try-catch:
```typescript
export async function getServerSideProps(context) {
try {
const data = await fetchSomething();
return { props: { data } };
} catch (error) {
console.error('getServerSideProps error:', error);
// Return error state instead of throwing
return { props: { error: error.message } };
}
}
```
### Step 3: For Production Errors
Check your hosting provider's logs:
- **Vercel**: Dashboard → Project → Logs (Functions tab)
- **AWS**: CloudWatch Logs
- **Netlify**: Functions tab in dashboard
- **Self-hosted**: Check your Node.js process logs
### Step 4: Common Causes
1. **Environment variables**: Missing in production but present locally
2. **Database connections**: Connection string issues, cold starts
3. **Import errors**: Server-only code accidentally imported on client
4. **Async/await**: Missing await on async operations
5. **JSON serialization**: Objects that can't be serialized (dates, functions)
## Verification
After checking the terminal, you should see:
- Full stack trace with file name and line number
- The actual error message (not generic 500)
- Variable values if you added console.log statements
## Example
**Symptom**: User reports page shows "Internal Server Error" after clicking a link.
**Investigation**:
1. Open browser DevTools → Console: Empty
2. Network tab shows: `GET /dashboard → 500`
3. Check terminal running `npm run dev`:
```
Error: Cannot read property 'id' of undefined
at getServerSideProps (/app/pages/dashboard.tsx:15:25)
at renderToHTML (/app/node_modules/next/dist/server/render.js:428:22)
```
**Cause found**: Database query returned `null` instead of user object.
## Notes
- In development, Next.js sometimes shows an error overlay, but it often has less
detail than the terminal output
- `reactStrictMode: true` in `next.config.js` causes double-execution of server
functions in development, which can make debugging confusing
- For API routes, the error appears in the same terminal as page errors
- Client-side errors (in useEffect, event handlers) DO appear in browser console—
this skill only applies to server-side code
- If using `next start` (production mode locally), errors may be less verbose;
check `NODE_ENV` and consider adding custom error logging