What if your visitors never got lost, even on missing pages?
Why Not-found.tsx customization in NextJS? - Purpose & Use Cases
Start learning this pattern below
Jump into concepts and practice - no test required
Imagine your website visitors land on a page that doesn't exist, and they just see a boring, generic error message or a blank screen.
Manually handling missing pages means writing repetitive code for each error, which is easy to forget or make inconsistent. It also leads to a poor user experience because the message is not helpful or friendly.
Next.js lets you customize the not-found.tsx file once, so every missing page shows a clear, friendly, and consistent message automatically.
if (!page) { return <div>404</div>; }
export default function NotFound() { return <h1>Page not found</h1>; }This makes your website more professional and user-friendly by guiding visitors gently when they hit a wrong link.
Think of an online store where a product is removed; instead of confusion, the customer sees a helpful message suggesting other products.
Manual 404 handling is repetitive and inconsistent.
Customizing not-found.tsx centralizes error display.
Improves user experience with friendly, clear messages.
Practice
not-found.tsx file in a Next.js app?Solution
Step 1: Understand the role of
This file is specifically for customizing the page shown when a user tries to access a page that does not exist.not-found.tsxStep 2: Compare with other options
Other options like layout, authentication, or API routes are handled by different files or folders in Next.js.Final Answer:
To customize the page shown when a user visits a missing URL -> Option CQuick Check:
Missing page display = Customnot-found.tsx[OK]
- Confusing not-found.tsx with layout or API files
- Thinking it handles authentication
- Assuming it manages site navigation
not-found.tsx?Solution
Step 1: Recall correct default export syntax
In React with Next.js, the correct way is to writeexport default function ComponentName() { ... }.Step 2: Check each option
export default function NotFound() { returnPage Not Found
; } matches the correct syntax. function NotFound() { returnPage Not Found
; } export NotFound; has incorrect export syntax. export function NotFound() { returnPage Not Found
; } exports a named function, not default. default export function NotFound() { returnPage Not Found
; } uses invalid syntax.Final Answer:
export default function NotFound() { return <h1>Page Not Found</h1>; } -> Option DQuick Check:
Default export =export default function[OK]
- Using named export instead of default
- Incorrect export keyword placement
- Missing 'default' keyword
not-found.tsx component, what will be displayed when a user visits a missing page?export default function NotFound() {
return (
<main role="main">
<h1>Oops! Page not found.</h1>
<p>Try going back or visit the homepage.</p>
<a href="/">Home</a>
</main>
);
}Solution
Step 1: Read the returned JSX
The component returns a main section with a heading, paragraph, and a link to the homepage.Step 2: Understand what renders on missing page
When a page is missing, this component renders the content exactly as coded, showing the heading, paragraph, and link.Final Answer:
A page with a heading 'Oops! Page not found.', a paragraph, and a link to Home -> Option AQuick Check:
JSX content renders as visible page elements [OK]
- Thinking it redirects automatically
- Assuming no content shows
- Confusing console errors with UI output
not-found.tsx code snippet:export default function NotFound() {
return (
<div>
<h1>Page Not Found</h1>
<a href="/">Go Home</a>
</div>
)
}Solution
Step 1: Check JSX syntax
The JSX is correctly wrapped and returned; no syntax errors or missing semicolons needed after return.Step 2: Consider accessibility best practices
Using <main> instead of <div> improves accessibility by defining the main content region.Final Answer:
Using <div> instead of <main> for accessibility -> Option AQuick Check:
Use <main> for main content in error pages [OK]
- Thinking semicolons are required after return
- Ignoring accessibility tags
- Assuming JSX needs extra parentheses
not-found.tsx page to show a custom message only if the user is on a mobile device, otherwise show a default message. Which approach fits Next.js best?Solution
Step 1: Understand client vs server rendering
Device detection usingwindow.navigator.userAgentworks only on client side, so use React hooks likeuseEffect.Step 2: Evaluate other options
Server-side detection is complex and not typical innot-found.tsx. CSS media queries only style but don't change content. Multiple files for one route is invalid.Final Answer:
Use a React hook likeuseEffectwithwindow.navigator.userAgentto detect device and conditionally render -> Option BQuick Check:
Client detection with hooks = best for device-specific UI [OK]
- Trying to detect device server-side in this file
- Using multiple not-found.tsx files
- Relying only on CSS for content changes
