Guía de solución

Como anadir la cabecera HSTS en WordPress

8 de febrero de 2026 Actualizado el 19 abr 2026

La cabecera HSTS (HTTP Strict Transport Security) indica a los navegadores que se conecten a tu sitio WordPress unicamente a traves de HTTPS. Sin ella, los visitantes podrian acabar accidentalmente en una version HTTP no segura de tu pagina, quedando expuestos a ataques man-in-the-middle. Una vez activada la cabecera, los navegadores recuerdan tu preferencia y actualizan automaticamente cada peticion a HTTPS durante el tiempo que especifiques.

Que hace realmente la cabecera HSTS?

Cuando un navegador recibe la cabecera Strict-Transport-Security, almacena esa informacion localmente. En cada visita futura dentro de la ventana max-age especificada, el navegador se negara a conectar mediante HTTP plano. Ni siquiera intentara primero una conexion HTTP; ira directamente a HTTPS. Esto elimina el breve momento en el que un atacante podria interceptar la peticion HTTP inicial y redirigir al usuario a una pagina maliciosa.

La cabecera tiene tres parametros principales:

  • max-age: cuanto tiempo (en segundos) debe recordar el navegador que tiene que forzar HTTPS. Un valor de 31536000 equivale a un ano.
  • includeSubDomains: aplica la regla tambien a todos los subdominios (p. ej., blog.example.com, shop.example.com).
  • preload: indica que quieres que tu dominio se incluya en la lista de precarga HSTS integrada del navegador, de modo que la primera visita tambien quede protegida.

Antes de empezar: asegurate de que HTTPS funciona en todas partes

Este paso es critico. Una vez activo HSTS, los navegadores no permitiran que los visitantes vuelvan a HTTP. Si tu certificado SSL ha caducado, esta mal configurado o falta en algun subdominio, esas paginas seran completamente inaccesibles durante toda la duracion de tu max-age. Antes de habilitar nada, verifica lo siguiente:

  • Tu certificado SSL es valido y no esta cerca de caducar.
  • Todas las paginas de tu sitio cargan correctamente por https://.
  • No aparecen avisos de contenido mixto en la consola del navegador (recursos HTTP cargados en paginas HTTPS).
  • Si planeas usar includeSubDomains, todos los subdominios deben tener un certificado valido y servir contenido por HTTPS.
  • La URL del sitio y la direccion de WordPress (en Ajustes > Generales) usan ambas https://.

Anadir HSTS mediante .htaccess en Apache

Si tu sitio WordPress se ejecuta en Apache (la mayoria de los proveedores de hosting compartido usan Apache), puedes anadir la cabecera directamente en el archivo .htaccess ubicado en la raiz de WordPress. Abre el archivo con un editor de texto o con el gestor de archivos de tu hosting y anade el siguiente bloque antes de la seccion # BEGIN WordPress:

<IfModule mod_headers.c>
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</IfModule>

El envoltorio IfModule garantiza que Apache solo procese esta directiva si mod_headers esta habilitado. En la mayoria de hosters esta habilitado por defecto, pero el envoltorio evita un error 500 en servidores donde no este disponible.

Anadir HSTS mediante Nginx

Para hosting basado en Nginx (habitual en hosters WordPress gestionados como Kinsta, Cloudways o SpinupWP), anade la cabecera dentro de tu bloque server. El archivo de configuracion suele estar en /etc/nginx/sites-available/yourdomain.com o dentro de un directorio include personalizado de Nginx que te proporcione tu hoster:

server {
    listen 443 ssl;
    server_name example.com;

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

    # ... resto de la configuracion del server
}

La palabra clave always al final es importante. Sin ella, Nginx solo envia la cabecera en respuestas correctas (2xx). Con always, se incluye tambien en paginas de error (4xx, 5xx), que es el comportamiento correcto para cabeceras de seguridad.

Despues de editar la configuracion, prueba y recarga Nginx:

sudo nginx -t
sudo systemctl reload nginx

Anadir HSTS mediante PHP en functions.php

Si no tienes acceso a los archivos de configuracion del servidor (algunos hosters gestionados lo restringen), puedes enviar la cabecera desde PHP. Anade lo siguiente al archivo functions.php de tu tema activo o, mejor aun, a un plugin especifico del sitio para que sobreviva a las actualizaciones del tema:

function iwp_add_hsts_header() {
    if ( ! is_admin() ) {
        header( 'Strict-Transport-Security: max-age=31536000; includeSubDomains; preload' );
    }
}
add_action( 'send_headers', 'iwp_add_hsts_header' );

Ten en cuenta que las cabeceras enviadas desde PHP solo se aplican a paginas procesadas por WordPress. Los archivos estaticos (imagenes, CSS, JS) servidos directamente por Apache o Nginx no llevaran esta cabecera. Para una cobertura completa, el enfoque a nivel de servidor siempre es mejor.

Usar un plugin de WordPress para configurar HSTS

Si prefieres un enfoque sin codigo, varios plugins pueden gestionar HSTS por ti:

  • Really Simple SSL (Pro): la version Pro incluye un modulo de cabeceras de seguridad donde puedes activar HSTS y configurar max-age e includeSubDomains desde el panel.
  • HTTP Headers: un plugin gratuito que te ofrece una interfaz para configurar varias cabeceras de seguridad, incluida Strict-Transport-Security.
  • Headers Security Advanced & HSTS WP: creado especificamente para cabeceras de seguridad con un interruptor sencillo para HSTS y preload.

Los plugins son comodos, pero anaden una dependencia adicional. Si el plugin se desactiva o se elimina, tus cabeceras tambien desaparecen. Para algo tan fundamental como HSTS, la configuracion a nivel de servidor es mas fiable.

Estrategia de despliegue segura: empieza pequeno y aumenta

Saltar directamente a un max-age de un ano es arriesgado si no lo has probado todo. Si algo va mal, los navegadores seguiran forzando HTTPS durante un ano entero, y no hay forma de "deshacer" la cabecera desde el servidor una vez que un navegador la ha cacheado. Sigue este enfoque gradual:

  1. 5 minutos: configura max-age=300 y navega por tu sitio. Comprueba que cada pagina carga, que los formularios se envian correctamente y que no aparecen avisos de contenido mixto.
  2. 1 dia: aumenta a max-age=86400. Dejalo correr uno o dos dias mientras monitorizas tu sitio.
  3. 1 semana: sube a max-age=604800. Llegado este punto, deberias estar seguro de que HTTPS funciona en todas partes.
  4. 1 ano: establece el valor final de max-age=31536000. Es el minimo requerido para enviar a la lista de precarga HSTS.
  5. Anade includeSubDomains: hazlo solo cuando hayas confirmado que todos los subdominios funcionan por HTTPS.
  6. Anade preload: anade el flag preload y envia tu dominio en hstspreload.org.

Enviar tu sitio a la lista de precarga HSTS

La lista de precarga HSTS es un directorio de dominios con HSTS aplicado por defecto en los navegadores. Esto significa que incluso la primera visita a tu sitio sera por HTTPS, antes de que el navegador haya visto siquiera tu cabecera. Para cumplir los requisitos, tu sitio debe:

  • Servir un certificado SSL valido.
  • Redirigir todo el trafico HTTP a HTTPS en el mismo host.
  • Enviar la cabecera Strict-Transport-Security con un max-age de al menos 31536000 (un ano).
  • Incluir la directiva includeSubDomains.
  • Incluir la directiva preload.

Visita hstspreload.org, introduce tu dominio y envialo. Ten en cuenta que la eliminacion de la lista de precarga lleva meses y requiere un ciclo de actualizacion del navegador, asi que envialo solo cuando estes plenamente comprometido con HTTPS.

Como verificar tu cabecera HSTS con las DevTools del navegador

Despues de anadir la cabecera, puedes confirmar rapidamente que funciona:

  1. Abre tu sitio en Chrome o Firefox.
  2. Pulsa F12 para abrir las DevTools.
  3. Ve a la pestana Red y recarga la pagina.
  4. Haz clic en la peticion del documento principal (normalmente la primera).
  5. Desplazate hasta Cabeceras de respuesta.
  6. Busca Strict-Transport-Security. Deberias ver el valor que has configurado.

Tambien puedes comprobarlo desde la linea de comandos:

curl -sI https://example.com | grep -i strict-transport

Si la cabecera no aparece, verifica que estas visitando la version HTTPS (no HTTP) y que los cambios en la configuracion del servidor se han guardado y recargado.

Errores comunes con HSTS y como evitarlos

  • Configurar HSTS en respuestas HTTP: la cabecera la ignoran los navegadores cuando se sirve por HTTP plano. Solo tiene efecto en respuestas HTTPS.
  • Olvidarse de los archivos estaticos: si configuras HSTS via PHP, los archivos estaticos saltan WordPress y no llevaran la cabecera. Usa configuracion a nivel de servidor para una cobertura completa.
  • Usar includeSubDomains sin revisar los subdominios: si tienes un subdominio que no soporta HTTPS (p. ej., un servidor de staging antiguo), quedara inaccesible.
  • Saltar a un max-age largo demasiado rapido: empieza siempre con una duracion corta y ve subiendo.
  • Olvidarse de renovar tu certificado SSL: con HSTS activo y un certificado caducado, tu sitio sera completamente inaccesible. Configura la renovacion automatica con Let's Encrypt o tu proveedor de certificados.

Verifica tu configuracion HSTS con InspectWP

Despues de anadir la cabecera, ejecuta un nuevo escaneo de InspectWP en tu sitio. La seccion de cabeceras de seguridad de tu informe mostrara el estado de la cabecera Strict-Transport-Security. Si todo esta correctamente configurado, aparecera en verde (presente). Si tambien has configurado otras cabeceras de seguridad, comprueba esas tambien para tener una vision completa de la postura de seguridad de tu sitio.

Analiza tu sitio de WordPress ahora

InspectWP analiza tu sitio de WordPress en busca de problemas de seguridad, SEO, cumplimiento del RGPD y rendimiento, gratis.

Analiza tu sitio gratis