Página 404 personalizada: configuración e implementación correctas

Cómo devolver un 404 real, evitar señales de soft 404 y ofrecer al visitante una salida útil, en frameworks y en la configuración del servidor.

Cuando un usuario sigue un enlace roto, el servidor debe devolver el estado 404 Not Found. Pero en proyectos reales esta regla se incumple con bastante frecuencia: el CMS devuelve 200 OK, una redirección lleva a la página de inicio o la página «404» devuelve el código correcto, pero se ve como una pantalla en blanco. Cada una de estas situaciones es un problema distinto, tanto para el SEO como para el usuario.

Una página 404 bien configurada resuelve tres problemas a la vez: indica a Google que la URL no existe; mantiene al usuario en el sitio y le ayuda a encontrar la sección adecuada; y protege el presupuesto de rastreo frente a rastreos desperdiciados. Veamos cada aspecto en orden.

Google no penaliza a los sitios por tener páginas 404. Los problemas no vienen del código 404 en sí, sino de una implementación incorrecta: cuando la 404 devuelve 200 OK, cuando los enlaces internos apuntan a URL 404 o cuando se eliminan miles de páginas sin redirecciones 301.

Qué es una página 404

404 Not Found es el código de respuesta HTTP que el servidor devuelve cuando el recurso solicitado no existe. El código indica que el servidor funciona bien y ha resuelto la ruta, pero el documento pedido no está. Así se distingue el 404 del 500 (error del servidor) y del 503 (servicio no disponible).

~74%

Sitios sin 404 personalizada

La mayoría de sitios muestra la 404 por defecto de la plataforma en lugar de una página con su marca y su navegación

Semanas

Tiempo hasta la desindexación

Google suele quitar del índice una 404 que devuelve el código correcto en pocas semanas. Acelera el proceso desde Search Console

Soft 404

El error más frecuente

El CMS devuelve 200 OK en lugar de 404: Google indexa páginas vacías y diluye el enfoque temático del sitio

410

Se desindexa más rápido

Google quita el 410 (Gone) del índice bastante más rápido que el 404: úsalo para eliminaciones masivas de páginas

Una página 404 existe en dos niveles. El nivel HTTP es el código de respuesta en la cabecera que ve el rastreador del buscador. El nivel visual es el contenido HTML que ve el usuario. Ambos niveles importan por igual: un código HTTP incorrecto es un problema de SEO; un diseño pobre es un problema de UX.

La regla principal: devuelve siempre HTTP 404

La primera y más importante regla: una página de error debe devolver el estado HTTP 404 (o 410), nunca 200. Esto se llama «hard 404», en contraposición al «soft 404».

Error crítico: devolver HTML con el mensaje «Página no encontrada» con el estado HTTP 200 OK. Google ve una respuesta «correcta» y pone la página en cola para indexarla. Como resultado, aparecen en el índice cientos de URL sin sentido con el mismo contenido.

Puedes comprobar el estado HTTP de cualquier página directamente en el navegador: F12 → Network → recarga la página → localiza la primera solicitud → columna Status. O con curl en la terminal:

bash
# Check HTTP status of a page
curl -s -o /dev/null -w "%{http_code}" https://example.com/non-existent-url
# Expected output: 404

# Check full response headers
curl -I https://example.com/non-existent-url
Comprobación rápida en el navegador: abre DevTools (F12) → pestaña Network → ve a la página 404 → mira la columna Status de la primera solicitud. Debe mostrar 404, no 200.

Soft 404 y 410: la diferencia

Además de la «hard 404», existen dos casos relacionados que en la práctica se confunden a menudo: el soft 404 y el estado 410. Entender la diferencia es importante para gestionar bien las páginas eliminadas.

EstadoCódigo HTTPQué significa para GoogleCuándo usarlo
Hard 404404El recurso no se encuentra; Google lo quita del índice en pocas semanasPágina eliminada o que nunca existió
Soft 404200 (¡error!)Google ve una respuesta «correcta» e indexa contenido vacíoNunca: es un error de implementación, no una decisión intencionada
Gone410El recurso se ha eliminado de forma permanente; Google lo desindexa bastante más rápido que el 404Eliminación masiva de páginas (productos antiguos, secciones obsoletas)
El soft 404 no es una decisión deliberada del desarrollador, sino un error. Suele aparecer en WordPress y otros CMS donde la plantilla 404 va integrada en el layout principal, que siempre devuelve 200. Comprueba ahora mismo tu página 404 con curl o con DevTools.

Google también clasifica como soft 404 las redirecciones desde una URL 404 hacia la página de inicio u otra página sin relación. Desde el punto de vista del buscador: el usuario buscaba A, llegó a B y el contenido de B no responde a la consulta. Esto degrada la señal de calidad de la página de destino.

Qué debe contener una buena página 404

Un usuario que llega a una 404 ya está algo frustrado. La función de la página es suavizar esa frustración y darle un siguiente paso claro. Una página 404 eficaz sigue una estructura reconocible.

Cómo una página 404 personalizada mantiene al usuario en el sitio.

Mensaje de error claro

Explica la situación con un lenguaje sencillo: «Página no encontrada» o «Parece que esta página no existe». Evita la jerga técnica y los códigos de error en el texto visible.

Cuadro de búsqueda

El elemento más eficaz de una página 404. El usuario ya sabe lo que busca: dale la posibilidad de encontrarlo aquí mismo, sin volver a Google.

Navegación a las secciones clave

Enlaces a la página de inicio, a las secciones más visitadas o al sitemap. Ayudan al usuario a orientarse y a seguir su recorrido por el sitio.

Botón de volver

Muchos usuarios quieren volver a la página de la que llegaron. Un enlace o un botón para volver reduce la tasa de rebote y mejora la UX.

La solución más eficaz para el comercio electrónico: mostrar en la página 404 productos o categorías populares. Un usuario que llegó por un enlace roto a un producto concreto probablemente se interesa por esa categoría.

Lo que no debes hacer en una página 404 es redirigir automáticamente al usuario a la página de inicio mediante JavaScript (window.location.href = '/'). Google puede tomarlo como soft 404: el usuario esperaba A, recibió B y el contenido no es pertinente. Las redirecciones 301 desde URL 404 solo son adecuadas cuando existe una página de sustitución real.

Implementación: Next.js, Nginx, Apache

La configuración de una página 404 personalizada depende de tu stack. Veamos las tres opciones más habituales: Next.js App Router, Nginx y Apache.

Next.js App Router

En Next.js 13+ con App Router, la página 404 personalizada se crea con el archivo not-found.tsx dentro del directorio app/. Para i18n (por ejemplo, con next-intl), el archivo va en app/[locale]/.

tsx
// app/[locale]/not-found.tsx
import Link from 'next/link';

export default function NotFound() {
  return (
    <main style={{ textAlign: 'center', padding: '4rem 1rem' }}>
      <h1>404 — Page Not Found</h1>
      <p>The link may be outdated or the address was mistyped.</p>
      <Link href="/">Back to homepage</Link>
    </main>
  );
}

// Next.js automatically returns HTTP 404 for this file.

Para generar la 404 de forma programática (por ejemplo, en una ruta dinámica app/[locale]/blog/[slug]/page.tsx), usa la función notFound() de next/navigation. Al llamarla, el renderizado se interrumpe de inmediato, se devuelve HTTP 404 y se muestra not-found.tsx.

tsx
// app/[locale]/blog/[slug]/page.tsx
import { notFound } from 'next/navigation';
import { getArticleDoc } from '@/messages/blog-articles/registry';

export default async function ArticlePage({ params }: { params: { slug: string } }) {
  const article = getArticleDoc(params.slug);

  // If slug does not exist — return HTTP 404 and render not-found.tsx
  if (!article) {
    notFound();
  }

  return <ArticleRenderer article={article} />;
}
En Pages Router (Next.js <13), la página 404 personalizada se crea de otra forma: con el archivo pages/404.tsx. Next.js dirige a él automáticamente y devuelve HTTP 404. La función notFound() no está disponible en Pages Router: usa { notFound: true } en getStaticProps o en getServerSideProps.
tsx
// Pages Router: pages/blog/[slug].tsx (legacy approach)
export async function getServerSideProps({ params }) {
  const article = getArticleDoc(params.slug);

  if (!article) {
    // Next.js will return HTTP 404 and show pages/404.tsx
    return { notFound: true };
  }

  return { props: { article } };
}

Nginx

En Nginx, la página 404 personalizada se configura con la directiva error_page dentro del bloque server. Asegúrate de que el archivo 404.html existe en la ruta indicada y de que servirlo no provoca una redirección interna que devuelva 200.

nginx
server {
    listen 80;
    server_name example.com;
    root /var/www/html;

    # Custom page for 404 errors
    error_page 404 /404.html;

    # The location for the file itself — returns 404, not 200
    location = /404.html {
        internal;
    }

    # Custom pages for other errors
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        internal;
    }
}
La directiva internal impide el acceso directo a /404.html desde fuera: la página solo está disponible como respuesta a un error. Sin ella, un usuario podría abrir /404.html directamente y recibir un 200, lo que crea un duplicado de contenido.

Apache / .htaccess

En Apache, la 404 personalizada se configura con ErrorDocument, ya sea en la configuración principal o en .htaccess.

apache
# .htaccess in the site root

# Custom 404 page
ErrorDocument 404 /404.html

# You can also point to a PHP file
# ErrorDocument 404 /404.php

# Custom pages for other errors
ErrorDocument 403 /403.html
ErrorDocument 500 /500.html

# Enable mod_rewrite for SPA routing
<IfModule mod_rewrite.c>
    RewriteEngine On
    # For React/Vue SPA: all non-existent routes → index.html
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^ /index.html [L]
</IfModule>
Cuidado con el enrutamiento SPA en Apache y Nginx: si todas las rutas 404 se sirven como index.html con código 200, los buscadores indexan páginas que no existen. La SPA debe añadir en el cliente la etiqueta <meta name="robots" content="[noindex](/glossary/noindex)"> a las páginas 404, o bien usar SSR/SSG con códigos HTTP correctos.

PHP (WordPress y otros CMS)

En WordPress, la página 404 personalizada es el archivo 404.php del tema. WordPress devuelve HTTP 404 automáticamente para las URL inexistentes cuando los enlaces permanentes están bien configurados. Si el CMS devuelve 200 en lugar de 404, el problema suele estar en .htaccess o en la configuración del servidor.

php
<?php
// themes/your-theme/404.php
// WordPress automatically returns HTTP 404
get_header();
?>
<main class="error-404">
    <h1>Page Not Found</h1>
    <p>Try using search:</p>
    <?php get_search_form(); ?>
    <p>Or return to the <a href="<?php echo home_url(); ?>">homepage</a>.</p>
</main>
<?php
get_footer();

Una página 404 bien configurada es solo la mitad del trabajo. La otra mitad consiste en encontrar todos los enlaces que apuntan a páginas inexistentes y corregirlos. Los enlaces rotos son la causa principal de que aparezcan errores 404 en el índice.

Paso 1Encuéntralas con Google Search Console

Search Console → Indexación → Páginas → «No encontrada (404)». Es la fuente gratuita y la más completa: Google muestra solo las 404 que descubrió al rastrear, es decir, justo las que importan para el SEO.

Paso 2Rastrea el sitio con Screaming Frog

Lanza un rastreo del sitio con Screaming Frog SEO Spider. Filtro: Response Codes → 4xx. La herramienta muestra no solo las URL 404, sino también las páginas de origen: exactamente qué páginas contienen enlaces rotos.

Paso 3Revisa los logs del servidor

Los logs contienen el 100 % de todas las solicitudes, incluidas las que Google aún no ha descubierto. Filtro: grep ' 404 ' access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -20, es decir, las 20 URL que más devuelven 404.

Paso 4Corrige o configura redirecciones

Para cada 404 encontrada hay tres opciones: configurar una 301 hacia la URL de sustitución adecuada (si existe una página similar), eliminar todos los enlaces internos que apuntan a ella o dejar la 404 tal cual (si no hay enlaces hacia ella, Google la quitará del índice automáticamente).

Ejemplo de código para localizar las 404 en los logs:
bash
# Find top-20 broken URLs in Nginx/Apache logs
grep ' 404 ' /var/log/nginx/access.log \
  | awk '{print $7}' \
  | sort \
  | uniq -c \
  | sort -rn \
  | head -20

# Example output:
# 143 /old-product-page
#  87 /blog/removed-article
#  34 /wp-login.php  (attack attempts — not critical)
No configures redirecciones 301 desde todas las URL 404 hacia la página de inicio. Esto se llama «cadena de redirecciones a la página de inicio» y Google lo trata como soft 404. Una redirección solo se justifica cuando la página de destino está temáticamente cerca de la eliminada. Si no hay sustituto, la respuesta correcta es una 404.

Monitorizar los errores 404

Una auditoría puntual está bien. Pero las nuevas 404 aparecen constantemente: se renombran páginas, se eliminan productos y los sitios externos enlazan a URL inexistentes. Conviene montar una monitorización periódica.

HerramientaQué monitorizaFrecuenciaGratis
Google Search Console404 que Googlebot descubrió al rastrearSe actualiza a diarioSí
Screaming Frog + programadorTodas las 404 en un rastreo completo del sitioSemanal o mensualHasta 500 URL
Logs del servidor (goaccess, awstats)Todas las 404 en tiempo real, desde access.logTiempo realSí
Ahrefs / Semrush Site Audit404 y enlaces externos entrantes hacia 404Semanal, automáticoDe pago
UptimeRobot / Better UptimeMonitorización de la disponibilidad de URL claveCada 1–5 minutosPlan básico gratuito

En sitios grandes (más de 10 000 páginas) los logs del servidor son especialmente valiosos: cubren el 100 % de las solicitudes, incluidas las de bots, usuarios y scripts. Search Console solo muestra lo que Googlebot encontró al rastrear: es un subconjunto de la imagen completa.

Configura alertas en Google Search Console: Configuración → Notificaciones por correo electrónico. Search Console enviará un aviso si el número de 404 se dispara de golpe, por ejemplo tras un despliegue que rompió el enrutamiento por error.

Lista de comprobación de una página 404 correcta

Estado HTTP

  • La página 404 devuelve el estado HTTP 404 (comprobado con curl o DevTools)
  • Sin soft 404: la página de error no devuelve 200 OK
  • Sin redirecciones por JavaScript desde URL inexistentes hacia la página de inicio
  • 410 Gone para las páginas eliminadas en masa sin sustituto
  • Redirecciones 301 solo para URL con una página de sustitución pertinente

Contenido de la página

  • Mensaje de error claro, con lenguaje sencillo y sin jerga técnica
  • Hay un cuadro de búsqueda o un enlace a la búsqueda del sitio
  • Hay un enlace a la página de inicio
  • Hay enlaces a 2–4 secciones o categorías populares
  • La página sigue el estilo visual de la marca del sitio (cabecera, pie, tipografías)

Implementación

  • Next.js: creado el archivo not-found.tsx; se llama a notFound() para los slug inexistentes
  • Nginx: configurada la directiva error_page 404; el archivo 404.html está marcado como internal
  • Apache: ErrorDocument 404 definido en .htaccess o en la configuración principal
  • WordPress: existe 404.php en el tema activo
  • SPA (React/Vue sin SSR): la etiqueta meta noindex se añade en el cliente en las páginas 404

Monitorización

  • Google Search Console conectado y alertas por correo configuradas
  • Rastreo periódico con Screaming Frog o equivalente (al menos una vez al mes)
  • Logs del servidor accesibles y analizados en sitios con mucho tráfico
  • Todos los enlaces internos que apuntan a URL 404 localizados y corregidos
Comprueba ahora mismo tu página 404: ve a yourdomain.com/test-404-check (una URL inexistente), abre DevTools → Network, localiza la primera solicitud y revisa el estado. Si aparece 200, tienes un soft 404 y debes corregir la configuración del servidor.

Preguntas frecuentes

Respuestas a preguntas habituales sobre la configuración de páginas 404 que surgen en auditorías y en desarrollo.

¿Hace falta añadir una etiqueta noindex a la página 404?
No. Una página que devuelve HTTP 404 no será indexada por Google, tenga o no la etiqueta noindex. Google simplemente no la añade al índice. Si devuelves 200 OK con noindex, Google puede tratar la página como indexable durante un tiempo antes de reconsiderarlo. El código HTTP correcto importa más que cualquier metaetiqueta.
¿Qué hacer si una página que estaba bien posicionada en Google ahora devuelve 404?
Google la quitará del índice por sí solo, normalmente entre 1 y 4 semanas después de que Googlebot vuelva a visitar la URL. Para acelerarlo: Search Console → herramienta de eliminación de URL. Si existe una página de sustitución temáticamente cercana, configura una redirección 301: transmite la autoridad de enlace y actualiza las posiciones más rápido.
¿Puede una página 404 ser atractiva y tener marca propia?
Debe serlo. Una página 404 con marca y navegación mantiene al usuario en el sitio y reduce la tasa de rebote. Devolver HTTP 404 en la cabecera no impide que la página sea visualmente atractiva. Lo clave es devolver el código HTTP correcto y ofrecer al usuario un siguiente paso claro.
¿Debe ser la misma página 404 para todas las URL inexistentes?
En la mayoría de sitios, sí: basta con una página 404 universal. En comercio electrónico se puede personalizar: detectar por el patrón de la URL de qué categoría llega el usuario y mostrar productos relevantes. Pero esta complejidad solo se justifica cuando las páginas 404 reciben mucho tráfico.
¿Qué es el presupuesto de rastreo y cómo lo gasta una 404?
El presupuesto de rastreo es el número de páginas que Googlebot está dispuesto a rastrear en tu sitio en un periodo determinado. Si hay enlaces internos a URL 404, el bot revisará una y otra vez esas direcciones muertas en lugar de rastrear páginas activas. En sitios con millones de URL esto es crítico: elimina todos los enlaces internos que apuntan a 404.

Check it with SpiderHead

Free and local: run the audit on your own machine.

Try it