Product Craft Bible
Error pages (404, 500, maintenance)
Inicio Patrones de interacción Error pages (404, 500, maintenance)
Patrones de interacción

Error pages (404, 500, maintenance)

8 reglas NN/g "Improving the Dreaded 404" (-40% errores) · NN/g Error-Message GuidelinesGoogle Developers "HTTP status codes · soft 404" · Search Engine Journal "404 vs Soft 404"GOV.UK Design System "Page not found pages" · NN/g Error-Message GuidelinesGOV.UK Design System "Page not found pages" · NN/g "Recognition rather than recall"
30

Error pages (404, 500, maintenance)

8 reglas
322

404: nunca dejes un callejon sin salida, ofrece al menos tres rutas útiles

Una página 404 que solo anuncia el fallo obliga al usuario a usar el botón Atras o a abandonar el sitio. Conviertela en un punto de recuperación: un campo de busqueda conectado al motor del sitio, un enlace claro a la página de inicio y un bloque de páginas más visitadas (derivado de los logs del servidor). NN/g midio una reducción del 40% en errores 404 al sumar corrección ortografica de URL con sugerencias de destinos alternativos. La heuristica de recuperación de errores exige que el sistema sea constructivo, no solo descriptivo del fallo.

NN/g "Improving the Dreaded 404" (-40% errores) · NN/g Error-Message Guidelines
Preferir

No encontramos esa página

Puede que el enlace este desactualizado. Prueba a buscar o sigue uno de estos accesos.

Páginas más visitadas

Evitar

404

Not Found

323

Devuelve el código HTTP correcto: nunca un 200 detras de una página de error

Un servidor que responde HTTP 200 mientras muestra "página no encontrada" genera un soft 404: el crawler indexa la página de error como contenido valido, Google detecta la discrepancia y la marca en Search Console, desperdiciando crawl budget. Cada error debe llevar su código real: 404 (no existe), 410 (eliminado permanentemente), 500 (error de servidor) o 503 (no disponible temporalmente). Las SPAs con routing del lado del cliente son las más vulnerables, porque el servidor devuelve 200 para el shell aunque la ruta no exista.

Google Developers "HTTP status codes · soft 404" · Search Engine Journal "404 vs Soft 404"
Preferir
Network · DevTools
GET /página-borrada404
El código coincide con el contenido. Google desindexa la URL y conserva crawl budget.
Evitar
Network · DevTools
GET /página-borrada200 OK
200 + contenido de error = soft 404. Google lo deja en estado ambiguo.
324

Lenguaje humano: sin culpar al usuario ni mostrar jerga técnica

El mensaje debe leerse en lenguaje llano y nunca insinuar que el error fue culpa del usuario. "400 Bad Request", "internal server error" o el código numérico crudo son incomprensibles para la mayoría. El GOV.UK Design System prohibe explicitamente usar jerga técnica como "404" o "bad request" en el cuerpo visible, y también las formulas informales tipo "oops" que minimizan el problema. NN/g lo refuerza: lenguaje positivo y no acusatorio, porque el sistema debe adaptarse al usuario, no al reves.

GOV.UK Design System "Page not found pages" · NN/g Error-Message Guidelines
Preferir

No encontramos esa página

Puede que el enlace este desactualizado o que la dirección tenga un error de escritura. Te ayudamos a volver al camino correcto.

Evitar

Error 404: Bad Request

The requested resource was not found on this server. Request failed with status code 404.

325

Conserva navegación y branding: la página de error sigue siendo tu producto

Quitar header, footer y menú en una página de error elimina el contexto que permite reorientarse y continuar la tarea. Son momentos de alta ansiedad: mantener la identidad visual y la navegación principal reafirma que el usuario sigue dentro del mismo producto y tiene salidas disponibles. El GOV.UK Design System conserva el header de servicio, los skip links y los estilos institucionales en todos sus patrones de error, apoyandose en la heuristica de reconocer antes que recordar: el usuario no debe memorizar como volver.

GOV.UK Design System "Page not found pages" · NN/g "Recognition rather than recall"
Preferir
ProductosPreciosAyuda

No encontramos esa página

El menú de arriba sigue activo para que continues donde quieras.

© Acme · Privacidad · Términos · Contacto
Evitar

Página no encontrada

Sin header, sin menú, sin logo: zona de salida desconocida.

326

500: ofrece una acción concreta y jamas expongas el stack trace

Un error 500 sin instrucciones deja al usuario sin agencia: no sabe si esperar, reintentar o contactar soporte. La página debe ofrecer al menos un reintento, datos de contacto si hay soporte humano y, opcionalmente, un enlace a la página de estado. El GOV.UK Design System prescribe el párrafo "intenta de nuevo más tarde" y prohibe formulas vagas como "experiencing technical difficulties". Nunca muestres stack traces, rutas de archivo, versiones de dependencias ni mensajes de excepción: son superficie de reconocimiento para un atacante (OWASP A05:2021 Security Misconfiguration).

GOV.UK Design System "Problem with the service" · OWASP Top 10 A05:2021
Preferir

Algo fallo de nuestro lado

Lo sentimos, no es culpa tuya. Intenta de nuevo en unos momentos o avisa a nuestro equipo.

Intentar de nuevo Contactar soporte
Ver estado del sistema
Evitar

NullPointerException

at com.app.UserService.load(UserService.java:142)

at com.app.AuthController.get(AuthController.java:88)

jdbc:postgresql://prod-db-01:5432/users v14.2

327

Mantenimiento: responde 503 + Retry-After y muestra el ETA al usuario

Durante mantenimiento planificado el servidor debe devolver HTTP 503 (Service Unavailable) con el encabezado Retry-After, en formato de fecha HTTP o de segundos. Googlebot respeta ese encabezado y no desindexara el contenido mientras dure la caida; también orienta a usuarios y crawlers sobre cuando volver. Mostrar solo "sitio en mantenimiento" con un 200 y sin ETA es el peor escenario simultaneo de SEO y UX: un 200 con contenido de mantenimiento puede acabar marcado como soft 404. Da una hora de retorno concreta y con zona horaria.

MDN "Retry-After" (RFC 9110 §15.6.4) · Yoast "HTTP 503 & maintenance SEO"
Preferir

Estamos haciendo mejoras

El sitio vuelve pronto. Gracias por tu paciencia.

Volvemos Mar 17 jun · 10:00 (CDMX)
HTTP/1.1 503 · Retry-After: 3600
Evitar

Sitio en mantenimiento

HTTP/1.1 200 OK · sin Retry-After ni ETA
328

Preserva el trabajo del usuario cuando el error ocurre dentro de un flujo

Cuando un error de servidor interrumpe un formulario o un flujo de pasos (registro, checkout, solicitud), el sistema debe conservar los datos ya ingresados antes de mostrar la página de error. Obligar a reescribir toda la información tras un fallo del servidor es una de las experiencias más frustrantes y dispara el abandono. El GOV.UK Design System recomienda almacenar lo capturado por un tiempo razonable y permitir retomar con datos prellenados al recuperarse el servicio; si la persistencia no es posible, la página debe decir con precisión que se guardo y que falta por reingresar.

GOV.UK Design System "Problem with the service" · NN/g Error-Message Guidelines
Preferir

Tu información de los pasos 1 y 2 esta guardada. Solo falta completar el paso 3 cuando el servicio se restablezca.

Nombre · guardado Ana Lopez
Correo · guardado ana@correo.mx
Dirección de envio · pendiente Por completar
Evitar

Error 500. Al volver, el formulario aparece vacio.

Nombre
Correo
Dirección de envio
329

Accesibilidad: H1 semántico, foco gestionado y nunca solo color

Las páginas de error necesitan un H1 que describa el problema (no solo una ilustración), mover el foco del teclado al encabezado cuando el contenido se carga dinamicamente y garantizar contraste WCAG AA de 4.5:1 en texto normal. Depender de una ilustración o de un color para comunicar el fallo excluye a quienes usan lector de pantalla y a las cerca de 350 millones de personas con deficiencia de visión de color. El GOV.UK Design System prohibe el rojo como único indicador y exige un H1 con texto claro; la ilustración decorativa va con aria-hidden="true".

WCAG 2.1 SC 2.4.3 Focus Order · NN/g (350M con deficiencia de visión de color) · GOV.UK Design System
Preferir

No encontramos esa página

Contraste 4.5:1, foco movido al H1 al cargar e ilustración marcada como decorativa.

<h1 tabindex="-1"> .focus()
Evitar
Algo salio mal