El error 401 Unauthorized significa que el servidor no sabe quién eres — la autenticación es obligatoria o ha fallado. El error 403 Forbidden significa que el servidor sí sabe quién eres, pero no tienes permiso para acceder al recurso. Son dos problemas distintos con causas distintas y soluciones distintas. Confundirlos puede hacerte perder horas buscando en el lugar equivocado.

 

1. ¿Qué es el error 401 Unauthorized? Definición y causas

El error HTTP 401 Unauthorized es una respuesta del servidor que indica que la solicitud no ha sido completada porque requiere autenticación. A pesar de su nombre —"Unauthorized"— el RFC 9110 (el estándar oficial de HTTP) deja claro que el significado real es "Unauthenticated": el servidor no puede identificar al cliente.

Dato clave del RFC 9110: "The 401 (Unauthorized) status code indicates that the request has not been applied because it lacks valid authentication credentials for the target resource." El nombre "Unauthorized" es un error histórico que lleva confundiendo a desarrolladores desde HTTP/1.0.

Características técnicas del 401

•       Cabecera obligatoria: WWW-Authenticate (indica el esquema de autenticación requerido: Basic, Bearer, Digest, etc.)

•       Efecto en el navegador: muestra cuadro de diálogo de login (en implementaciones Basic) o redirige al formulario de autenticación

•       Reversible: autenticarse correctamente resuelve el problema

•       Cacheable: no (por defecto)

 

Causas más frecuentes del error 401

•       Token JWT caducado o inválido: la sesión expiró y el cliente no renovó el token

•       Cookie de sesión expirada: el usuario estaba autenticado pero la sesión cerró en el servidor

•       Credenciales incorrectas: usuario o contraseña equivocados

•       Cabecera Authorization ausente: la API espera un Bearer token y no se envió

•       API key revocada o inválida: la clave fue eliminada o tiene formato incorrecto

•       CORS bloqueando la petición autenticada: el navegador no envió las credenciales cross-origin 

Ejemplo real de respuesta 401

HTTP/1.1 401 Unauthorized WWW-Authenticate: Bearer realm="api.ejemplo.com" Content-Type: application/json  {"error": "invalid_token", "message": "Token expirado o inválido"}

2. ¿Qué es el error 403 Forbidden? Definición y causas

El error HTTP 403 Forbidden indica que el servidor entendió la solicitud y sabe quién hace la petición, pero se niega a procesarla. A diferencia del 401, aquí la autenticación no es la solución: el usuario puede estar perfectamente autenticado y aun así recibir un 403.

Clave conceptual: el 403 no es un problema de identidad. Es un problema de autorización. Tienes el DNI (estás autenticado), pero no tienes el carnet del club (no estás autorizado).

Características técnicas del 403

•       Cabecera WWW-Authenticate: no aplica (el problema no es de autenticación)

•       Reversible: no mediante autenticación, sino mediante cambio de permisos

•       El servidor puede revelar la existencia del recurso: a diferencia del 404, el 403 confirma que el recurso existe

•       Cacheable: sí (puede cachearse)

Causas más frecuentes del error 403

•       Permisos de archivo incorrectos en Linux: chmod inadecuado (p.ej., archivo con permisos 700 siendo accedido por el servidor web)

•       Directiva Deny en .htaccess o Nginx: regla explícita que bloquea el acceso

•       IP bloqueada: firewall, fail2ban, Cloudflare WAF, o plugin de seguridad

•       Directorio sin índice y Options -Indexes activo: el servidor no tiene index.php/index.html y está configurado para no listar el contenido

•       Rol insuficiente en aplicación web: el usuario existe y está autenticado, pero no tiene el rol necesario (p.ej., accede a panel de admin siendo usuario estándar)

•       Georestrición: el servidor bloquea peticiones por país de origen

•       Plugin de seguridad en WordPress: reglas de Wordfence, iThemes Security, etc. 

Ejemplo real de respuesta 403

HTTP/1.1 403 Forbidden Content-Type: text/html Server: nginx/1.24.0  <html> <head><title>403 Forbidden</title></head> <body>Access to this resource is denied.</body> </html> 

3. La diferencia fundamental entre 401 y 403

La forma más clara de entender la diferencia es con una analogía concreta:

Imagina un edificio de oficinas con control de acceso:  • El error 401 es llegar sin DNI ni tarjeta de empleado. El vigilante no sabe quién eres. La solución: identificarte.  • El error 403 es llegar con tu tarjeta de empleado, pasarla por el lector, y que el sistema la rechace porque no tienes acceso a esa planta. El vigilante sabe exactamente quién eres. La solución: que alguien con más autoridad te dé acceso.

En términos técnicos: el 401 es un fallo en la fase de autenticación (¿quién eres?). El 403 es un fallo en la fase de autorización (¿qué puedes hacer?). Son dos capas distintas del modelo de seguridad, y tratarlas como si fueran lo mismo es el error más frecuente que vemos en diagnóstico.

Por qué confundirlos cuesta tiempo

•       Si recibes un 403 y lo tratas como un 401, pasarás tiempo intentando autenticarte de diferentes formas sin conseguir nada, porque el problema no es la autenticación.

•       Si recibes un 401 y lo tratas como un 403, irás a revisar permisos de archivos y configuración de servidor cuando el problema real es que el token expiró o no se envía la cabecera correcta.

•       En APIs REST, la distinción es crítica: devolver 403 cuando debería ser 401 es una mala práctica que confunde a los consumidores de la API y puede revelar información de seguridad. 

4. Tabla comparativa completa: 401 vs 403

Esta tabla resume todas las diferencias relevantes para diagnóstico rápido: 

Característica

Error 401 Unauthorized

Error 403 Forbidden

Pregunta clave

¿Quién eres?

¿Tienes permiso?

Autenticación requerida

No (ya se conoce al usuario)

Reintento tras autenticarse

Puede resolver el problema

No resuelve el problema

Cabecera WWW-Authenticate

Obligatoria (RFC 9110)

No aplica

Causa más frecuente

Token caducado, sesión cerrada, credenciales incorrectas

Permisos de archivo, ACL, IP bloqueada, rol insuficiente

Impacto SEO si aparece en URLs indexadas

Moderado

Alto si bloquea recursos clave

Registro en logs del servidor

401 con realm

403 con ruta denegada

Analogía

Puerta con candado: no tienes llave

Puerta sin candado: no eres bienvenido

  

5. Cómo diagnosticar si tienes un 401 o un 403

Antes de revisar configuraciones, el primer paso siempre es confirmar cuál de los dos errores tienes realmente. A veces el navegador o la aplicación muestran un mensaje genérico que no refleja el código HTTP real.

Paso 1: Confirmar el código HTTP real

Abre las DevTools del navegador (F12 → pestaña Network), reproduce el error y busca la respuesta en la lista de peticiones. El campo Status debe mostrar 401 o 403 —no el mensaje de la página.

# Desde terminal con curl: curl -I https://tudominio.com/ruta-con-error  # Resultado esperado: HTTP/2 403  ← aquí está el código real

Paso 2: Revisar los logs del servidor

Los logs son la fuente de verdad. El mensaje que acompaña al código te dice exactamente qué ocurrió:

# Nginx - ver errores recientes tail -100 /var/log/nginx/error.log | grep '403\|401'  # Apache tail -100 /var/log/apache2/error.log | grep '403\|401'  # Si usas Plesk o cPanel, los logs están en: # /var/www/vhosts/tudominio.com/logs/error_log

Árbol de decisión rápido

 

Pregunta de diagnóstico

Interpretación

Siguiente paso

¿Existe formulario de login?

Sí → probablemente 401 No → probablemente 403

Buscar formulario de login o endpoint de autenticación

¿El usuario está autenticado?

No autenticado → 401 Autenticado → 403

Comprobar token de sesión o cookie

¿Qué dice el log del servidor?

"Authorization required" → 401 "Access denied" o "Permission denied" → 403

Ver logs: /var/log/nginx/error.log o /var/log/apache2/error.log

¿Hay cabecera WWW-Authenticate?

Presente → 401 Ausente → 403

Inspeccionar cabeceras de respuesta con curl -I

¿Autenticarse resuelve el problema?

Sí → era 401 No → era 403 (problema de permisos)

Probar login → si el error persiste, revisar permisos

6. Cómo resolver un error 401 paso a paso

En aplicaciones web

12.  Verificar que el usuario está enviando credenciales válidas

13.  Comprobar que el token de sesión no ha caducado (revisar TTL/expiración)

14.  Verificar que la cabecera Authorization se envía correctamente en cada petición

15.  En APIs con JWT: verificar la firma del token y la fecha de expiración

16.  Comprobar que el servidor valida correctamente las credenciales (revisar logs de autenticación) 

En APIs REST

# Comprobar que envías el token correctamente: curl -H "Authorization: Bearer TU_TOKEN" https://api.ejemplo.com/recurso  # Si el token está caducado, renovarlo: curl -X POST https://api.ejemplo.com/auth/refresh \   -d '{"refresh_token": "TU_REFRESH_TOKEN"}'

En Nginx — configurar autenticación Basic

# Crear archivo de contraseñas sudo htpasswd -c /etc/nginx/.htpasswd usuario  # En el bloque location de Nginx: location /zona-privada/ {     auth_basic "Área restringida";     auth_basic_user_file /etc/nginx/.htpasswd; }

 

7. Cómo resolver un error 403 paso a paso

Verificar permisos de archivos y directorios

Los permisos correctos en un servidor web Linux son: 755 para directorios y 644 para archivos. Los permisos 777 son un riesgo de seguridad y en algunos servidores generan un 403 por política de seguridad.

# Ver permisos actuales ls -la /var/www/html/ruta-con-error  # Corregir permisos de directorios find /var/www/html -type d -exec chmod 755 {} \;  # Corregir permisos de archivos find /var/www/html -type f -exec chmod 644 {} \;  # Corregir propietario (sustituir www-data por el usuario del servidor web) chown -R www-data:www-data /var/www/html

Revisar directivas en .htaccess (Apache)

# Buscar reglas de denegación en .htaccess grep -n 'Deny\|deny\|Require\|Order' /var/www/html/.htaccess  # Ejemplo de regla que causa 403: Order deny,allow Deny from all    ← esto bloquea todo el tráfico  # Solución: verificar que Allow from está presente y correcto: Order deny,allow Deny from all Allow from all   ← permite todo (ajustar según necesidad)

Revisar configuración de Nginx

# Buscar directivas deny en la configuración de Nginx grep -rn 'deny\|return 403' /etc/nginx/sites-enabled/  # Ejemplo de bloque que genera 403: location /admin/ {     deny all;    ← bloquea todos }  # Para permitir solo ciertas IPs: location /admin/ {     allow 192.168.1.0/24;     deny all; }

Error 403 por directorio sin índice

# Nginx: habilitar listado de directorios (solo en entornos controlados) location /carpeta/ {     autoindex on; }  # O crear un archivo index.html vacío como solución alternativa: touch /var/www/html/carpeta/index.html

 

8. Error 401 y 403 en WordPress: casos específicos

403 por plugin de seguridad

Wordfence, iThemes Security y Solid Security bloquean con 403 cuando detectan comportamiento sospechoso, georestriciones activas, o cuando una IP ha superado el umbral de intentos de login fallidos. Para diagnosticarlo:

# Verificar si Wordfence está bloqueando tu IP: # WordPress Admin → Wordfence → Blocking → IP Block List  # Comprobar logs de Wordfence: # WordPress Admin → Wordfence → Tools → Diagnostic → Scan Log

403 en WordPress por .htaccess roto

El .htaccess de WordPress tiene una estructura muy específica. Si se corrompe o tiene reglas mal configuradas, causa 403 en todo el sitio o en partes de él:

# Contenido correcto del .htaccess por defecto de WordPress: # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress  # Para regenerarlo desde WordPress: # Admin → Ajustes → Enlaces permanentes → Guardar cambios

401 en la API REST de WordPress

La API REST de WordPress usa autenticación por cookies de nonce o por Application Passwords (desde WP 5.6). Si recibes 401 en endpoints de la API:

•       Verificar que el nonce es válido y no ha expirado

•       Si usas Application Passwords: comprobar que el usuario y password de aplicación son correctos

•       Algunos plugins de seguridad deshabilitan la API REST para usuarios no autenticados — verificar si este es el caso

 

9. Impacto en SEO: cuándo preocuparse y cuándo no

El error 401 y el SEO

Googlebot no está autenticado. Si Googlebot llega a una URL que devuelve 401, no puede acceder al contenido y no indexará esa página. Si el 401 es intencional (quieres proteger contenido), es el comportamiento correcto. Si el 401 aparece en URLs que deberían ser públicas, estás perdiendo indexación.

⚠️ Alerta SEO: si Google Search Console muestra errores 401 en páginas que deberían ser públicas, revisa urgentemente tu configuración de autenticación. Cada día que esas páginas no se indexan es autoridad y tráfico perdido.

El error 403 y el SEO

El 403 tiene implicaciones SEO más complejas:

•       403 en recursos de apoyo (CSS, JS, imágenes): Google puede penalizar páginas donde detecta que el renderizado del usuario es diferente al de Googlebot, lo que puede ocurrir si Googlebot no puede cargar estos recursos

•       403 en páginas indexadas: si Google tiene una URL en su índice y comienza a recibir 403, eventualmente la desindexará (proceso más lento que con un 410)

•       403 intencional en contenido protegido: aceptable si el contenido no debe indexarse, pero considera usar una directiva robots.txt o noindex en su lugar para mayor claridad

Recomendación práctica

Monitoriza regularmente Google Search Console → Cobertura. Si ves errores 401 o 403 en URLs que no deberían tener restricciones, actúa en menos de 48 horas. Cuanto más tiempo pase Google sin poder acceder a una página que antes indexaba, más autoridad se pierde.

 

10. Preguntas frecuentes (FAQ)

¿Un 401 puede convertirse en 403 al autenticarse?

Sí, y es más común de lo que parece. Si un recurso requiere autenticación (401) y además requiere un rol específico (403), el flujo será: petición sin autenticar → 401; petición autenticada con usuario sin permisos → 403. Este comportamiento es correcto y esperado en sistemas con control de acceso basado en roles (RBAC).

¿Por qué algunas APIs devuelven 403 cuando debería ser 401?

Por razones de seguridad: devolver un 401 revela que el endpoint existe y requiere autenticación. Algunas APIs prefieren devolver 403 para no dar información sobre si el recurso existe. Sin embargo, el RFC recomienda usar 401 cuando el problema es de autenticación, y reservar 403 para problemas de autorización.

¿Cuál es la diferencia entre 403 Forbidden y 404 Not Found en términos de seguridad?

Esta es una elección de diseño importante: el 403 confirma que el recurso existe (pero no tienes acceso), mientras que el 404 oculta esa información. En aplicaciones con contenido sensible, algunos servidores devuelven 404 en lugar de 403 para no revelar la existencia de rutas privadas. Esta práctica se llama "security through obscurity" y es aceptable como capa adicional, pero no como medida principal.

¿El error 401 aparece en cuentas de Google Analytics?

No directamente, pero si las páginas con 401 dejan de indexarse, verás una caída en el tráfico orgánico de esas URLs en Google Analytics. Para detectar errores 401 correctamente, usa Google Search Console (Cobertura → Excluidas) o herramientas de crawling como Screaming Frog.

¿Cómo devolver el código correcto en una API propia?

// Node.js/Express — ejemplo correcto: app.get('/api/admin', (req, res) => {   if (!req.headers.authorization) {     return res.status(401).json({ error: 'Autenticación requerida' });   }   if (!req.user.isAdmin) {     return res.status(403).json({ error: 'No tienes permisos de administrador' });   }   // ... respuesta normal });

 

Resumen ejecutivo

• 401 = no sé quién eres → problema de autenticación → solución: identificarte • 403 = sé quién eres, pero no puedes pasar → problema de autorización → solución: cambiar permisos • Siempre confirma el código HTTP real antes de diagnosticar • Revisa los logs del servidor: son la fuente de verdad • En WordPress, los plugins de seguridad y el .htaccess son las causas más frecuentes de 403 • Monitoriza Google Search Console para detectar impacto SEO en menos de 48 horas

  

¿Tienes errores 401 o 403 recurrentes en tu servidor?

En sys4net llevamos más de una década gestionando servidores Linux para empresas y agencias. Si un error aparece de forma recurrente en tu servidor, a menudo es un problema de configuración que se resuelve en minutos.

Escríbenos a soporte@sys4net.com · sys4net.com