Los códigos de respuesta del servidor son una parte importante de la interacción entre una página web y un navegador.
Cada vez que un usuario a través de un navegador solicita una página web y realiza su petición http, el servidor envía un código de respuesta junto con la página solicitada. Estos códigos de respuesta indican el estado de la solicitud y proporcionan información adicional sobre la solicitud.
Cabe decir que Google en su documentación no recoge todos los códigos de Estado posibles, como el status code meme 418 (de soy una tetera), por lo que no podemos esperar que se comporte de una forma 100% predecible, aunque la tendencia es a que lo tome igual que su familia (el primer número) de códigos de respuesta.
Aquí hay una lista de algunos de los códigos de respuesta más comunes que puede encontrar en una página web:
1xx (Información):
Los códigos de respuesta de esta categoría, informan de que la petición ha sido recibida y que se continua en el proceso. No afectan necesariamente ni al rastreo ni a la indexación.
100 Continue: Indica que la solicitud se está procesando y que el cliente debe continuar con la solicitud.
101 Switching Protocols: Indica que el servidor acepta la solicitud del cliente de cambiar a los protocolos especificados en la línea de cabecera Upgrade.
103 Early Hints: Código de respuesta para generar Early Hints, una forma de precarga de recursos que ayuda a mejorar el wpo. [De momento no se soporta a nivel de SEO por GOOGLEBOT].
2xx (Éxito):
Los códigos de respuesta de esta categoría una vez rastreados, pueden ser tenidos en cuenta para la indexación (leer en específico cada uno para saber más). Para que un contenido sea indexable, a la fuerza tiene que ser un código de respuesta de categoría 2XX.
200 Exíto: Indica que la solicitud se ha completado correctamente y que la página solicitada se ha proporcionado. Este es el código de respuesta mayoritario de cara a la indexación. Para que una página sea indexable, lo ideal es que devuelva un código de respuesta 200.
201 Created: Indica que la solicitud ha tenido éxito y que se ha creado un recurso como resultado.
Más códigos de respuesta HTTP 2XX
202 Accepted: Indica que la solicitud se ha aceptado para su procesamiento, pero no se ha completado todavía. El robot de Google esperará un tiempo limitado y luego enviará a indexación en caso de hacerlo solo el contenido que ha sido capaz de procesar. Esto por ejemplo puede ocurrir cuando se extrae información de una API pero no se ha completado. Ejemplo.
203 Non-Authoritative Information: Indica que la respuesta se ha obtenido de una fuente distinta a la original y puede no ser completa o precisa. Suele ocurrir con iframes u otro tipos de recursos de 3º a los que no se termina de tener acceso
204 No Content: Indica que la solicitud se ha completado correctamente, pero no hay contenido que devolver. Es posible que Google Search Console muestre esta información como un soft 404. También puede utilizarse este código de respuesta para hacer unaconfiguración de imágenes que puede mejorar el CTR en Google imágenes. Los vínculos intercalados de imágenes.
205 Reset Content: Indica que la solicitud se ha completado correctamente y que el navegador debe resetear la página actual para que el usuario pueda comenzar a escribir de nuevo.
206 Partial Content: Indica que la solicitud se ha completado correctamente y que se ha proporcionado solo una parte del contenido solicitado.
3xx (Redirección):
Los códigos de respuesta de esta categoría provocan que se realice una solicitud a otro documento distinto. Es decir lo que se conoce como una redirección. Es posible que un código 3XX apunte a otra dirección que arroje otro código 3XX, a esto se le conoce como cadena de redirecciones. Oficialmente Google no sigue más de 10 saltos de redirecciones (5 en el caso del robots.txt). Aunque no es recomendable tener ninguna cadena de redirecciones, evitarlas en la medida de lo posible y que no sean más de 3.
300 Multiple Choices: Indica que hay varias opciones disponibles para el recurso solicitado y que el usuario debe seleccionar una de ellas. Los navegadores modernos no lidian muy bien con este código de respuesta y de hecho cada uno de ellos lo interpreta de una forma distinta. La idea de este código de respuesta en un inicio era buena, pero al final ha quedado en un código de respuesta poco recomendado.
301 Moved Permanently: Indica que la página se ha movido a una nueva dirección permanentemente. El navegador debe redirigir a la nueva dirección para futuras solicitudes. Es la mejor forma de hacer una redirección permanente. Puedes saber el código que necesitas en el servidor para redireccionar un enlace con mi herramienta para redirecciones SEO.
302 Found: Indica que la página se ha movido temporalmente a una nueva dirección. El navegador debe redirigir a la nueva dirección para esta solicitud, pero no debe hacerlo para futuras solicitudes. Es ideal para redirecciones temporales en las que luego la URL original volverá a ser utilizada. Realmente para este propósito el código de respuesta que se inventó y el que debería ser adecuado es el 307, pero debido a la "mala" utilización del 302, se asentó costumbre y a día de hoy el 302 es perfectamente funcional para este propósito.
303 See Other: Indica que la página solicitada se encuentra en otra dirección y que el usuario debe ir a esa dirección para obtenerla. Funciona y actúa igual que el 302.
304 Not Modified: Indica que la página solicitada no ha sido modificada desde la última vez que se obtuvo y que el navegador puede utilizar la copia almacenada en caché. Puede ser muy útil para indicar a los rastreadores que el contenido al que acceden desde la última vez que se rastreador, pero puede ser contraproducente.
305 Use Proxy: Indica que la solicitud debe realizarse a través de un proxy especificado en la línea de cabecera Location.
307 Redirección Temporal: La verdadera y original forma de hacer una redirección temporal.
308 Moved Permanently: Un equivalente absoluto a un código de respuesta 301
Oficialmente según la documentación de Google, Googlebot trata los códigos de respuesta 3XX de la misma forma (aunque se pueden ver diferencias entre el 301 y 302, adjunto hilo de twitter). Se recomienda utilizar los códigos de respuesta correspondientes.
Problemas del 304
Según Gary Illyes puede ocurrir este proceso:
El rastreador accede a la URL
El servidor tiene algún tipo de error y muestra una página vacía con un código de respuesta 200
El rastreador/crawler lo considera como algún tipo de error leve y temporal y reagenda un rastreo para verificarlo
Puesto que el contenido (que no se mostró bien) no ha tenido ningún cambio, el servidor muestra nuestro aclamado 304 para esa URL y así evitando gasto de recursos y tirando de la optimización. Por lo que dicho 304 muestra dicha URL como la mostró la vez anterior, es decir, sin nada de contenido (aunque en realidad exista y fuera un error transitorio), que en realidad seguiría el estándar HTTP RFC 9110.
El rastreador entonces da por hecho que no es un error temporal, sino que el contenido es realmente así y que realmente dicho error es un error persistente que tiene que solucionar el webmaster. Y no vuelve a rastrearlo, o en el caso de Google lo hará en alguna ocasión, pero a saber cuando.
Esto no quiere decir que vaya a ocurrir, pero que es una posibilidad que se debe tener en cuenta y es un paso extra de auditoría si realmente la decisión de la empresa es utilizar este tipo de implementación por optimización. Ya que detectar y depurar este tipo de fallos suele ser bastante engorroso.
Un arreglo para este tipo de situaciones sería que si el tamaño de la página que se sirve son 0bytes con un código de respuesta, se emita un código de respuesta 500. Como en el ejemplo de este código.
Advertencia: Este código en apache no es perfecto y necesita un pulido, tiene ciertos fallos, es solo una ejemplificación.
Los códigos de respuesta 4xx se refieren a errores de cliente. Estos errores indican que la solicitud del cliente no puede ser procesada debido a un problema con la solicitud.
Deben evitarse todos los enlaces que lleven a documentos que arrojen un código de respuesta 4XX en la medida de lo posible. Las URLs que estaban indexadas y arrojan uno de estos códigos de respuesta desaparecen del listado y a su vez no se pueden indexar páginas con estos códigos de respuesta.
Algunos ejemplos comunes de códigos de respuesta 4xx incluyen:
400 Bad Request: Indica que la solicitud del cliente no es válida. Se suele deber a una mala conexión a internet, pero pueden ser otros motivos.
401 Unauthorized: Indica que el cliente no tiene autorización para acceder al recurso solicitado. Es un código de respuesta perfecto para prevenir la indexación y el rastreo (sí el rastreo) ya que si el user-agent no ve el contenido, tampoco puede seguir los enlaces. por lo que es una práctica muy recomendada para entornos de desarrollo o testing online. De esta forma ningún usuario sin acceso podrá entrar. Google tampoco y además se podrá auditar la web con toda la configuración técnica bien desarrollada. (Un día añado un tutorial de cómo realizar esta práctica, y también se puede aprender paso a paso en mi máster de SEO Técnico). Se puede ver esta implementación en mi web de prueba: test-carlos.sanchezdonate.com
402 Payment Required: Este código aún no está definido en la especificación HTTP.
403 Forbidden: Indica que para el cliente está prohibido de acceder al recurso solicitado. Este código de respuesta es ideal para bloquear el rastreo de determinados user-agents que pueden consumir excesivos recursos en una página web. Por ejemplo en mi web tengo bloqueado a Oncrawl, SemRush o Xenu ya que no los estoy utilizando actualmente y no quiero que me consuman excesivos recursos en la página, de una forma mucho más efectiva que con un Disallow del robots.txt. Esto se puede probar cambiando el user-agent en la consola de tu navegador. También se puede utilizar para bloquear ciertos países por cuestiones legales. Aunque hay que tener cuidado con esta práctica ya que no es la más adecuada para SEO internacional y hay otras vías mejores para realizarlo.
405 Method Not Allowed: Indica que el método de solicitud utilizado (por ejemplo, GET, POST, etc.) no está permitido para el recurso solicitado.
406 Not Acceptable: Indica que el servidor no puede proporcionar una respuesta que cumpla con los encabezados de aceptación enviados por el cliente.
407 Proxy Authentication Required: Indica que el cliente debe autenticarse con un proxy antes de que la solicitud pueda ser procesada.
408 Request Timeout: Indica que el servidor no recibió una respuesta completa de la solicitud del cliente dentro del tiempo de espera especificado.
409 Conflict: Indica que la solicitud del cliente no puede ser procesada debido a un conflicto con el estado actual del recurso.
410 Gone: Indica que el recurso solicitado ya no está disponible y no se espera que vuelva a estar disponible en el futuro. Esto es ideal para tiendas de productos o páginas de medios o vídeos donde generen contenido y alguno haya dejado de existir.
411 Length Required: Indica que el servidor exige que se incluya la longitud de la entidad en la solicitud.
412 Precondition Failed: Indica que una o más condiciones precalificadas en la solicitud del cliente no se cumplen.
413 Payload Too Large: Indica que la solicitud del cliente es demasiado grande para que el servidor la procese.
414 URI Too Long: Indica que la URI de la solicitud del cliente es demasiado larga para que el servidor la procese.
415 Unsupported Media Type: Indica que el servidor no puede procesar la solicitud del cliente debido al tipo de medio incluido en la solicitud.
416 Range Not Satisfiable: Indica que el servidor no puede proporcionar el rango solicitado en la respuesta.
417 Expectation Failed: Indica que la expectativa incluida en la solicitud del cliente no pudo ser cumplida por el servidor.
418 I'm a teapot: Este código se utiliza en broma en respuesta a una solicitud que pide una tetera (teapot) que no puede ser satisfecha.
421 Misdirected Request: Este código se utiliza para indicar que la solicitud fue dirigida a un servidor que no puede producir una respuesta autorizada en la URI de destino.
422 Unprocessable Content: Indica que el servidor entiende la petición, pero que no es capaz de procesarla. Por ejemplo si un archivo XML como un sitemap tiene un XML con instrucciones semánticas incorrectas.
429 Too many requests: Indica que el usuario ha enviado demasiadas peticiones en un corto periodo de tiempo (pudiendo afectar al servidor). Google toma este código de respuesta como un código de respuesta infiltrado y que debería pertenecer a la categoría 5XX. Realmente puede ser error de un usuario e incluso un intento de ataque DOS o DDOS, pero es una respuesta del servidor precisamente para protegerse de una posible saturación.
Podemos observar como Google se contradice en dos líneas seguidas en cuanto a los efectos que producen los códigos de respuesta 4XX. En mi experiencia y comprobando los logs Google tiende a bajar la frecuencia de rastreo, aunque no es el sistema más efectivo.
Estos códigos de respuesta pueden afectar negativamente el SEO de un sitio web de varias maneras. Por ejemplo, si un motor de búsqueda encuentra muchas páginas con códigos de respuesta 4xx en un sitio web, puede interpretarlo como una señal de que el sitio no es de confianza o que no está actualizado. Esto puede llevar a una disminución en el ranking del sitio en los resultados de búsqueda. Además, si un usuario intenta acceder a una página con un código de respuesta 4xx y se encuentra con un mensaje de error, es posible que decida abandonar el sitio y no volver a visitarlo, lo que también puede afectar negativamente el tráfico y el SEO del sitio. Por lo tanto, es importante asegurarse de que todas las páginas de un sitio web estén funcionando correctamente y de que los códigos de respuesta sean los adecuados para evitar problemas de SEO.
A excepción del 429, los errores 4XX no se deben utilizar para tareas como mantenimiento o limitar la frecuencia de rastreo. Es decir, si esa URL se pretende indexar posteriormente, se debe utilizar un 5XX.
5xx (Errores del Servidor):
Los códigos de respuesta 5xx se utilizan para indicar que ha habido un error en el servidor mientras se procesaba la solicitud del cliente. Estos códigos incluyen:
500 Internal Server Error: indica que ha habido un error en el servidor y no se ha podido procesar la solicitud.
501 Not Implemented: indica que el servidor no soporta la acción solicitada por el cliente.
502 Bad Gateway: indica que el servidor está actuando como un gateway o proxy y ha recibido una respuesta inválida del otro servidor.
503 Service Unavailable: indica que el servidor no está disponible temporalmente debido a sobrecarga o mantenimiento. Esta se suele utilizar bastante a la hora de hacer un deploy
504 Gateway Timeout: indica que el servidor está actuando como un gateway o proxy y no ha recibido una respuesta a tiempo del otro servidor.
505 HTTP Version Not Supported: indica que el servidor no soporta la versión de HTTP que se ha utilizado en la solicitud.
506 Variant Also Negotiates: se utiliza en conjunción con el encabezado "Content-Location" para indicar que la respuesta se ha basado en una negociación de contenido que ha fallado.
507 Insufficient Storage: indica que el servidor no tiene suficiente espacio para almacenar los recursos necesarios para completar la solicitud.
508 Loop Detected: indica que el servidor ha detectado un bucle infinito mientras procesaba la solicitud.
510 Not Extended: indica que el servidor no puede proporcionar la información solicitada debido a que no se han cumplido los requisitos de extensión.
511 Network Authentication Required: indica que el cliente necesita autenticarse para acceder al recurso solicitado.
Estos códigos de error del servidor (incluyendo el 429) nos pueden servir para solicitar a Google que ralentice el rastreo. Ya que si bien es verdad que a lo largo del tiempo retirará esas URL del índice de búsqueda, no es un efecto inmediato y podemos realizar tareas de mantenimiento sin perder posicionamiento si es una tarea a corto plazo. Por ejemplo de cara a una migración, para minimizar el impacto de los posibles errores.
Códigos de error 5xx y el robots.txt
En cuanto al robots.txt tiene una característica peculiar, en el caso de que tenga un código de respuesta 5XX, según Google Developers y su documentación utilizará la última copia almacenada en caché en caso de haberla, si no la hay, no habrá restricción de rastreo. Sin embargo, en Gary Illyes afirma rotundamente que puede acabar con una desindexación en la página. Entramos en una gran contradicción. En cualquiera de los casos, lo ideal es que el robots.txt no arroje este tipo de error.
Cómo utilizar los Response CODES de HTTP a nuestro favor
Es importante asegurarse de que su sitio web esté devolviendo los códigos de respuesta adecuados para garantizar que los motores de búsqueda puedan indexar y rastrear su sitio de manera efectiva. Si tiene problemas para determinar qué códigos de respuesta está devolviendo su sitio, puede utilizar herramientas como Google Search Console, la consola de Chrome o Screaming Frog para ayudarlo a identificar y solucionar cualquier problema. Es importante ser conscientes de que podemos forzar y generar nosotros mismos esos códigos de respuesta en cualquier URL de una página sobre la que tengamos control.