404 Not Found
Uso
Cuando llega un error 404 Not Found, el estado no especifica si el recurso no está disponible de forma permanente, si no lo está de forma temporal o si nunca existió. Este error suele deberse a URL mal escritas y lo ven con frecuencia los desarrolladores que trabajan con un conjunto de recursos todavía en curso.
Los enlaces a direcciones que devuelven 404 Not Found se conocen habitualmente como enlaces muertos o enlaces rotos. El estado también se ha utilizado cuando un servidor no está dispuesto a reconocer que un recurso existe.
Cuando el servidor sabe que el recurso existió en su momento en la dirección indicada, pero se ha eliminado de forma permanente, el estado 410 Gone resulta más informativo.
Dado que los usuarios finales se encuentran con este error muy a menudo, muchos servidores utilizan una página de error personalizada, descriptiva y relevante para su sitio.
Nota
Un 404 no significa que el cliente esté bloqueado. Estar bloqueado produce 403 Forbidden. Algunos servidores devuelven 404 en lugar de 403 para ocultar la existencia del recurso. El 404 tampoco indica permanencia: el recurso puede aparecer más adelante. Para una eliminación permanente, el servidor devuelve 410 Gone.
Impacto en SEO
Los buscadores como Google no indexan una URL que devuelve el estado 404. Las URL indexadas previamente que devuelven este código de estado se eliminan de los resultados de búsqueda. Las páginas que devuelven este código no consumen presupuesto de rastreo. Google trata 404 y 410 de forma idéntica: ambos eliminan el contenido del índice al mismo ritmo. Bingbot considera el 404 una señal de eliminación de contenido y desindexa la URL tras confirmar el estado en un rastreo posterior. Devolver un 200 con contenido de error en lugar de un 404 correcto genera un soft 404, que desperdicia presupuesto de rastreo y erosiona la confianza en las señales del servidor del sitio.
Ejemplo
El cliente solicita un recurso y el servidor responde con 404 Not Found porque el recurso no existe en la dirección indicada.
Solicitud
GET /documents/secret-formula.pdf HTTP/1.1
Host: example.com
Respuesta
HTTP/1.1 404 Not Found
Content-Type: text/html
Content-Length: 216
<html>
<head>
<title>Resource Not Found</title>
</head>
<body>
<p>The requested resource was not found.
Check the spelling of the address.</p>
</body>
</html>
Cómo solucionarlo
Un 404 Not Found significa que no existe ningún recurso en la dirección solicitada.
Verifique la escritura y la ruta de la URL. Los errores tipográficos en la ruta, el nombre del archivo o la cadena de consulta son la causa más habitual. Revise con atención cada segmento de la dirección. Copie la ruta directamente del enlace de origen en lugar de escribirla a mano.
Compruebe la distinción entre mayúsculas y minúsculas. Los servidores basados en Linux tratan /Page y /page como rutas distintas. Respete exactamente las mayúsculas y minúsculas de la URL original. Los servidores IIS sobre Windows no distinguen mayúsculas de minúsculas de forma predeterminada, así que un 404 en IIS apunta a un recurso realmente inexistente.
Fíjese en la posible falta de la barra final. Algunos servidores distinguen entre /path y /path/. Añada o quite la barra final y vuelva a intentarlo. nginx y Apache tratan las barras finales de manera diferente según la configuración de try_files y DirectorySlash.
Confirme que el recurso existe en el servidor. Verifique que el archivo o la ruta estén desplegados y sean accesibles. Conéctese por SSH al servidor y confirme que el archivo existe en la ruta esperada del document root. En nginx, revise la directiva root o alias del bloque location coincidente. En Apache, revise DocumentRoot en el host virtual.
Configure redirecciones 301 o 308 para el contenido que se ha movido. Cuando un recurso se traslada a una dirección nueva, redirija la URL antigua para evitar enlaces rotos. En nginx:
location = /old-path {
return 301 /new-path;
}
En el .htaccess de Apache:
Redirect 301 /old-path /new-path
Revise las reglas de reescritura del servidor. Examine las reglas de mod_rewrite en Apache o los bloques try_files y location en nginx. Una reescritura mal configurada descarta silenciosamente las solicitudes a rutas válidas. Active el registro de reescrituras para seguir la evaluación de las reglas. En Apache, establezca temporalmente LogLevel alert rewrite:trace3.
Verifique los tipos MIME y las asignaciones de controladores en IIS. IIS devuelve 404.3 cuando una extensión de archivo carece de un tipo MIME o de una asignación de controlador registrados. Añada el tipo MIME que falta desde el Administrador de IIS o mediante web.config:
<staticContent>
<mimeMap fileExtension=".json"
mimeType="application/json" />
</staticContent>
Revise la configuración de DNS y de los hosts virtuales. Un dominio que apunta al servidor equivocado, o la falta de una entrada de host virtual, provoca un 404 en todas las rutas. Verifique que los registros DNS A/CNAME resuelvan a la IP correcta del servidor y que este tenga una directiva server_name (nginx) o ServerName (Apache) coincidente.
Audite los enlaces rotos con un rastreador. Ejecute un rastreador del sitio para detectar todas las respuestas 404 en él. Corrija los enlaces internos rotos y envíe un XML sitemap actualizado a los buscadores para acelerar la reindexación del contenido movido. Entre las herramientas para encontrar enlaces rotos están Google Search Console (informe de cobertura), Screaming Frog, Ahrefs Site Audit o wget —spider para comprobaciones desde la línea de comandos.
Referencias de código
.NET
HttpStatusCode.NotFound
Rust
http::StatusCode::NOT_FOUND
Rails
:not_found
Go
http.StatusNotFound
Symfony
Response::HTTP_NOT_FOUND
Python3.5+
http.HTTPStatus.NOT_FOUND
Java
java.net.HttpURLConnection.HTTP_NOT_FOUND
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_NOT_FOUND
Angular
@angular/common/http/HttpStatusCode.NotFound