| UI or UX | UI + UX - Missing-route recovery page | UI + UX - Whole-service unavailable page | UI + UX - Recoverable failure surface | UI + UX - Resolved no-data content surface |
| UI guidance | Render a full page with site or service identity, a page title and H1 that state the page was not found, concise likely causes, and recovery routes such as search, start page, account dashboard, contact, or report-broken-link. | Render a full page with the service name, unavailable scope, status, return time or update promise, saved-work status, alternate route, support contact, and request or incident reference when available. | Render a persistent error region near the affected content with a specific failure heading, plain-language cause, preserved context, and recovery actions. | Render a resolved no-data region with a specific heading, cause text, one primary action when available, optional secondary path, and restrained illustration or icon support. |
| UX guidance | Use a page not found page when the service is reachable but the requested URL, public page, resource, or deep link cannot be resolved. | Use a service unavailable page when the service, transaction, or route is intentionally closed, under maintenance, overloaded, permanently closed, or unable to handle requests at the entry point. | Help users recover when expected loading, saving, validation, sync, permission, or computation fails without losing their work. | Help users distinguish legitimate absence from loading, no-results, error, permission, and setup conditions before offering a next step. |
| Good UI | A benefits service 404 page says Page not found, shows the requested path only if safe, offers Search benefits, Start a new application, Report this link, and Contact support. | A benefits application page says the service is unavailable from 22:00 to 01:00, names the affected transaction, says saved drafts remain for 30 days, and links to urgent phone support. | Reports could not load appears in the report section with the saved filter, Retry, Use cached data, and Contact support actions. | No projects yet heading, short explanation, Create project primary button, Import CSV secondary button, and visible workspace context. |
| Bad UI | A bare 404 code with a single Home button. | A blank white page with only 503 in the browser title. | Tiny transient toast for a blocking failure. | A blank white table body with no text, object name, or action. |
| Good UX | A user who mistyped a web address sees clear check-the-address advice and can search the service immediately. | A user returns during planned maintenance, sees a precise reopening time, learns their draft is saved, and uses an alternate phone channel for an urgent deadline. | User input and filter context are preserved after failure, and retry returns to recovered content or a clear still-failed state. | Users can create the first project, import existing work, or request access depending on the actual cause. |
| Bad UX | Users are sent to the homepage with no explanation and assume their task was lost. | Users repeatedly refresh because the page gives no recovery window or status update path. | Clearing work after save failure. | The same empty message appears for loading, search no-results, permission denial, and service failure. |
| Best fit | A route, URL, public page, file, object link, or deep link cannot be found. | A whole service, transaction entry point, or route is closed or not ready to handle requests. | A system or task failure blocks expected content or action. | The product area can legitimately contain no user data. |
| Avoid when | The service route exists but is temporarily closed, overloaded, or under maintenance. | Only one local section or action failed and users can recover inside the current page. | Nothing exists yet and the state is expected. | The absence was caused by filters or search. |
| Required state | Unknown route from typed or pasted URL. | Planned maintenance page with start or return time. | Normal expected state before failure. | First-use empty state before any objects exist. |
| Accessibility burden | Use a unique page title and H1 that state the page was not found. | Use a unique page title and H1 that state the service is unavailable, not just a code. | Use appropriate alert or status semantics for newly appearing critical errors. | Keep the message in normal reading order near the empty region it explains. |
| Common misuse | Returning a successful status with page-not-found copy. | Using a full-page spinner for a closed service. | Using a transient toast for critical errors. | Showing a blank page with no explanation. |