El primer dígito ya parte el problema: 4xx significa que la petición estaba mal; 5xx, que el servidor no supo responder a una petición razonable. Eso solo ya te dice de qué lado mirar.

Los 4xx con los que te vas a encontrar

  • 400: petición mal formada. Normalmente una cabecera o una cookie demasiado grande, no tu código.
  • 401: no autenticado. Inicia sesión.
  • 403: autenticado y aun así sin permiso, o el servidor no puede leer el archivo.
  • 404: no encontrado. Si debería existir, el sospechoso es la regla de reescritura, no el archivo.
  • 413: lo que subes es más grande de lo que el servidor acepta.
  • 429: límite de peticiones. Algo pregunta demasiado a menudo, a veces tu propio cron.

Los 5xx

  • 500: tu aplicación ha fallado. El mensaje está en el registro, no en la página.
  • 502: lo que hay detrás del servidor web dio una respuesta inservible, casi siempre PHP.
  • 503: no disponible a propósito, o sin capacidad.
  • 504: lo que hay detrás seguía trabajando cuando el servidor web se cansó de esperar.

Lee el código de verdad, no la página

curl -sI https://yourdomain.com/some/page | head -1
Una página de error bonita devuelta con un 200 es peor que el error: los buscadores la indexan como página real y la monitorización que comprueba el 200 no salta nunca. Una página de error debe devolver su propio código.

Los dos que importan para las búsquedas

Una página que se ha mudado devuelve 301 y traspasa su prestigio a la nueva dirección. Una página que ya no está devuelve 410 o 404. Redirigir en cambio cada página eliminada a la portada se lee como un 404 blando y no ayuda a nadie.

Un 200 con el cuerpo vacío es un fallo por derecho propio: casi siempre PHP muriendo sin escribir un error. Mira el registro en vez de la página.