HSTS: HTTP Strict Transport Security para SEO

Qué hace realmente HSTS, la sintaxis de la cabecera Strict-Transport-Security (max-age, includeSubDomains, preload), la redirección interna que solo ocurre en el navegador y que los rastreadores nunca ven, por qué no sustituye a sus redirecciones permanentes y cómo preload puede dejarle atrapado — por Patrick Stox.

Publicado por primera vez: 3 jul 2026 · Última actualización: 22 ago 2026 · Avanzado
Idiomas
1 señal de evidencia en esta página

HSTS (HTTP Strict Transport Security) es una cabecera de respuesta Strict-Transport-Security —que solo se respeta cuando llega por una conexión segura— que indica al navegador que use siempre HTTPS para su dominio de ahí en adelante, cerrando la brecha insegura que la primera petición de un visitante nuevo sigue haciendo por HTTP antes de que se dispare su 301. Es una política de la capa del navegador y por cliente que se suma a sus redirecciones del lado del servidor, no las sustituye: el RFC 6797 hace que el navegador reescriba el URI a HTTPS internamente antes de que salga ninguna petición (a menudo se muestra como una redirección interna de estilo 307, aunque el RFC no obliga a un código de estado concreto), de modo que ningún servidor ve nunca la forma HTTP y los rastreadores siguen necesitando su 301 real para entender el cambio y transmitir el link equity. La cabecera tiene tres directivas: max-age (obligatoria), includeSubDomains y preload. Preload integra su dominio en el propio navegador a través de hstspreload.org (requiere un max-age de al menos un año, includeSubDomains y el indicador preload) y es casi irreversible: la eliminación es un envío aparte que tarda meses en llegar a los usuarios. HSTS también es deliberadamente implacable: un navegador que le conoce como host HSTS fallará en duro, sin posibilidad de continuar con un clic, si su certificado llega a romperse. Así que actívelo solo cuando HTTPS sea realmente sólido en todos los subdominios, y trate preload como una puerta de un solo sentido.

TL;DR — HSTS es la cabecera de respuesta Strict-Transport-Security, que solo se respeta cuando un navegador la recibe por una conexión segura y que se almacena por cliente como política futura para ese host. Cierra el «problema de la primera petición» que una 301 por sí sola deja abierto: la petición HTTP inicial de un visitante nuevo es insegura hasta que se dispara la redirección, y esa es la ventana que busca un atacante que practique SSL stripping. Tres directivas: max-age (obligatoria, en segundos), includeSubDomains y preload. Cuando un navegador aplica HSTS, reescribe el URI a HTTPS internamente, antes de que ninguna petición llegue a un servidor —el RFC 6797 no obliga a un código de estado concreto para esa reescritura, aunque las herramientas suelen mostrarla como un 307—, de modo que sus 301 del lado del servidor siguen siendo obligatorias para los motores de búsqueda y para la autoridad de enlaces (link equity); HSTS se suma a ellas, no las sustituye. Preload integra su dominio en el navegador a través de hstspreload.org (requiere max-age ≥ 31536000, includeSubDomains y preload) y es casi irreversible: la eliminación es un envío aparte que tarda meses en llegar a los usuarios. Y HSTS está diseñado para fallar en duro ante cualquier error de certificado, así que actívelo solo cuando HTTPS sea robusto en todos los subdominios.

El hub de HTTPS presenta HSTS como una protección de la capa del navegador que se apoya sobre sus 301. Esta página es el análisis a fondo: la sintaxis exacta de la cabecera, la redirección interna que confunde a los SEO, la casi irreversibilidad de la lista preload y las formas reales en que HSTS deja a la gente fuera.

El problema que HSTS resuelve realmente: la primera petición

Imagine un sitio migrado correctamente. Todas las URL http:// redirigen con un 301 a su gemela https://, el certificado es válido, las canónicas apuntan a HTTPS. Parece hermético. No lo es del todo.

Cuando un visitante completamente nuevo escribe yoursite.com (sin esquema) o hace clic en un enlace antiguo http://yoursite.com, la primera petición del navegador sale por HTTP sin cifrar. Su servidor responde con la 301 y todas las peticiones posteriores son seguras. Pero ese primer viaje de ida y vuelta ocurrió en claro, y esa es exactamente la ventana que busca un atacante que practique SSL stripping en la misma red. Intercepta la petición HTTP, mantiene a la víctima en HTTP mientras hace de proxy en HTTPS hacia su servidor, y lee o reescribe todo.

HSTS elimina esa ventana para cualquiera que haya visitado el sitio antes. web.dev es directo sobre el mecanismo: “use Strict Transport Security to tell clients they should always connect to your server using HTTPS, even when following an http:// reference. This defeats attacks like SSL Stripping, and avoids the round-trip cost of the 301 redirect.” (traducción) «utilice Strict Transport Security para indicar a los clientes que siempre deben conectarse a su servidor mediante HTTPS, incluso al seguir una referencia http://. Esto neutraliza ataques como el SSL Stripping y evita el costo del viaje de ida y vuelta de la redirección 301.» (web.dev). Esa última cláusula también importa para el rendimiento: un navegador que vuelve se salta por completo el viaje de ida y vuelta HTTP→HTTPS. Evidence for this claim After receiving HSTS, a browser upgrades future HTTP attempts to HTTPS before sending the request. Scope: MDN documents user-agent enforcement after the header has been learned; first-visit protection requires preload or a prior secure visit. Confidence: high · Verified: MDN: Strict-Transport-Security header

Dos condiciones límite que conviene precisar. Primero, HSTS es una política almacenada y por cliente: vive en el estado propio de ese navegador concreto para ese host, aprendida de una cabecera entregada por una conexión segura; la misma cabecera enviada en una respuesta HTTP se ignora directamente (un atacante capaz de inyectar o eliminar cabeceras en HTTP sin cifrar podría, de otro modo, neutralizarla), y un cliente que nunca la ha recibido —una instalación nueva, otro navegador, un rastreador— no tiene ninguna política que aplicar. Segundo, la reescritura tiene en cuenta el esquema y el puerto: una petición con puerto 80 implícito pasa a ser una petición con puerto 443 implícito, pero si el URI original nombraba un puerto explícito no predeterminado, el navegador conserva ese mismo número de puerto y simplemente lo contacta por HTTPS.

La sintaxis de la cabecera

HSTS es una única cabecera de respuesta con hasta tres directivas. Según MDN, las formas son:

Strict-Transport-Security: max-age=31536000
Strict-Transport-Security: max-age=31536000; includeSubDomains
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
  • max-age=<seconds> — obligatoria. “The time, in seconds, that the browser should remember that a host is only to be accessed using HTTPS” (traducción) «El tiempo, en segundos, que el navegador debe recordar que solo se puede acceder a un host mediante HTTPS» (MDN). 31536000 es un año; 63072000, dos. El contador se reinicia con cada respuesta que lleve la cabecera, de modo que un sitio activo renueva su política de forma continua. Se trata de un estado relativo y por cliente: eliminar la cabecera sin más no la borra de inmediato; un navegador que ya aprendió la política sigue aplicándola hasta que se agota el max-age almacenado. Para desactivar HSTS en los clientes que ya la aprendieron, hay que servir activamente max-age=0 en una respuesta segura; el navegador olvidará entonces la política en su siguiente visita segura. (max-age=0 borra únicamente una política aprendida: no elimina un dominio de la lista preload, que es aparte.)
  • includeSubDomains — opcional. “If this directive is specified, the HSTS policy applies to all subdomains of the host’s domain as well” (traducción) «Si se especifica esta directiva, la política HSTS se aplica también a todos los subdominios del dominio del host» (MDN). Potente y peligrosa a partes iguales: vea los escenarios de bloqueo más abajo.
  • preload — opcional. Un indicador que señala su intención de estar en la lista preload del navegador. Por sí solo no hace nada; es un requisito previo para enviar la solicitud a hstspreload.org. Evidence for this claim HSTS preload requires at least a one-year max-age, includeSubDomains, and preload; removal can take months to reach users. Scope: The Chromium preload service documents submission and removal behavior; requirements can change and should be rechecked before submission. Confidence: high · Verified: Chromium: HSTS Preload List Submission

El comportamiento, de nuevo según MDN: “Before loading an http URL, the browser checks the domain name against its HSTS hosts list. If the domain name is a case insensitive match for an HSTS host or is a subdomain of one that specified includeSubDomains, then the browser replaces the URL scheme with https.” (traducción) «Antes de cargar una URL http, el navegador coteja el nombre de dominio con su lista de hosts HSTS. Si el nombre de dominio coincide, sin distinguir mayúsculas y minúsculas, con un host HSTS o es un subdominio de uno que especificó includeSubDomains, el navegador sustituye el esquema de la URL por https

La actualización interna que los rastreadores nunca ven (aquí está el meollo para el SEO)

Esto es lo que peor se entiende de HSTS, y la razón por la que no puede sustituir a sus redirecciones.

Cuando un navegador actualiza una petición http:// bajo HSTS, reescribe el URI a HTTPS internamente, antes de realizar ninguna petición de red: el RFC 6797 exige la sustitución del esquema en sí, pero no obliga a un código de estado concreto para ella (RFC 6797 §8.3), de modo que un navegador o una herramienta de rastreo pueden representar ese paso interno como prefieran; muchos lo muestran como un 307 interno, pero eso es específico del cliente o la herramienta, no una garantía del protocolo. Lo que importa para el SEO es más simple y se cumple con independencia de la etiqueta: no se contacta con ningún servidor para la versión HTTP, así que ningún rastreador llega a verla. Googlebot y Bingbot no llevan consigo una política HSTS aprendida como sí hace el Chrome de un humano que vuelve: acceden a su servidor en frío, y lo que necesitan encontrar allí es una 301 real del lado del servidor. Evidence for this claim RFC 6797 requires the user agent to rewrite a known-HSTS-host HTTP URI to HTTPS internally, but does not mandate any specific redirect status code for that internal rewrite; how a given browser or crawling tool represents that step (e.g., as an internal 307) is a client/tool implementation detail, not a protocol requirement. Scope: RFC 6797 Section 8.3 ("URI Loading and Port Mapping") specifies the UA MUST replace the URI scheme with https; it does not prescribe an HTTP status code for that internal substitution, since no HTTP exchange occurs for it. Section 7.2's suggestion of status code 301 addresses ordinary server-side redirect behavior, not this internal client-side rewrite. Confidence: high · Verified: RFC 6797 §8.3 — URI Loading and Port Mapping

Así que la regla es tajante: HSTS no sustituye a sus 301 del lado del servidor. La 301 es lo que los motores de búsqueda usan para entender el cambio de protocolo y para consolidar señales (“301 and other permanent redirects don’t cause a loss in PageRank” (traducción) «las redirecciones 301 y otras redirecciones permanentes no provocan una pérdida de PageRank», según Google). La actualización interna que solo ocurre en el navegador es una capa de experiencia de usuario y seguridad por encima. Necesita ambas, haciendo trabajos distintos:

  • 301 (del lado del servidor): para rastreadores, indexación y link equity.
  • Actualización interna de estilo 307 (del lado del navegador, por HSTS): para humanos que vuelven y para la protección frente al SSL stripping; la representación exacta del estado varía según el cliente o la herramienta.

Cualquier guía que le diga que HSTS «se encarga de la redirección, así que puede eliminar su 301» está equivocada de una forma que le saldrá cara sin que se dé cuenta.

HSTS preload: la versión casi permanente

max-age protege a los visitantes que vuelven, pero tiene un problema de arranque: un visitante que llega por primera vez y nunca ha recibido su cabecera sigue expuesto en esa petición inicial. Preload lo resuelve codificando su dominio en el propio código fuente del navegador, de modo que el navegador sabe que usted es solo HTTPS antes incluso de haberse conectado nunca.

Puede darse de alta en hstspreload.org. Los requisitos son exactos:

  1. “Serve a valid certificate.” (traducción) «Sirva un certificado válido.»
  2. “Redirect from HTTP to HTTPS on the same host, if you are listening on port 80.” (traducción) «Redirija de HTTP a HTTPS en el mismo host, si está escuchando en el puerto 80.»
  3. “Serve all subdomains over HTTPS” (traducción) «Sirva todos los subdominios por HTTPS», incluido en particular el subdominio www si existe un registro DNS.
  4. En la respuesta HTTPS del dominio base, una cabecera HSTS donde “the max-age must be at least 31536000 seconds (1 year),” (traducción) «el max-age debe ser de al menos 31536000 segundos (1 año)», “the includeSubDomains directive must be specified,” (traducción) «debe especificarse la directiva includeSubDomains» y “the preload directive must be specified.” (traducción) «debe especificarse la directiva preload». (hstspreload.org)

Por eso el ejemplo de dos años de más arriba (max-age=63072000; includeSubDomains; preload) es la forma que la gente envía. Tenga en cuenta que estos son los requisitos exactos de envío tal y como los publica hstspreload.org: trátelos como el listón actual, no como una constante permanente, y vuelva a consultar la página en vivo antes de enviar su solicitud.

Conviene tener claros cuatro estados distintos, porque se confunden constantemente:

EstadoQué es cierto en realidad
Token presenteSu cabecera incluye preload. Esto es solo un indicador: por sí mismo no hace nada y no le incluye en ninguna lista.
ElegibleSu sitio cumple los cuatro requisitos de hstspreload.org anteriores (certificado, redirección, subdominios, forma de la cabecera). Todavía no está en la lista.
Enviado / pendienteHa enviado la solicitud en hstspreload.org y está en cola para incluirse en una próxima versión del navegador. Todavía no se aplica a usuarios reales.
Realmente listadoEl dominio está integrado en una compilación publicada de un navegador concreto. La aplicación solo existe para los usuarios de esa compilación: el despliegue no es instantáneo ni universal entre navegadores.

La eliminación recorre los mismos cuatro estados a la inversa, y con la misma lentitud: quitar la directiva preload de su cabecera le hace elegible para el formulario de eliminación, después el envío queda pendiente, y el dominio sigue aplicándose para cualquier usuario con una compilación del navegador que todavía lo incluya, hasta que esa compilación quede fuera de circulación.

Ahora, la parte que convierte preload en una puerta de un solo sentido. Del propio sitio de envío: “Be aware that inclusion in the preload list cannot easily be undone. Domains can be removed, but it takes months for a change to reach users with a Chrome update and we cannot make guarantees about other browsers.” (traducción) «Tenga en cuenta que la inclusión en la lista preload no se puede deshacer con facilidad. Los dominios se pueden eliminar, pero un cambio tarda meses en llegar a los usuarios con una actualización de Chrome y no podemos ofrecer garantías respecto a otros navegadores.» (hstspreload.org). Y su propio consejo: “Don’t request inclusion unless you’re sure that you can support HTTPS for your entire site and all its subdomains in the long term.” (traducción) «No solicite la inclusión a menos que esté seguro de que puede mantener HTTPS en todo su sitio y en todos sus subdominios a largo plazo.»

Traducción práctica: preload es una postura de seguridad realmente excelente, pero si alguna vez necesita servir cualquier cosa —un subdominio heredado, una marca adquirida, una herramienta interna— por HTTP sin cifrar de nuevo, se quedará esperando a que los ciclos de publicación de los navegadores lleguen a todos los usuarios. La guía de Kinsta expone la realidad operativa sin rodeos: puede ser un proceso difícil y lento conseguir que se elimine su dominio. Trate preload como algo permanente.

Por qué HSTS está diseñado para doler cuando algo se rompe

La rigidez de HSTS no es un fallo: es toda su garantía de seguridad. web.dev explica la contrapartida: “Clients that have listed your site as a known HSTS Host are likely to hard-fail if your site ever has an error in its TLS configuration, (such as an expired certificate). HSTS is explicitly designed this way to ensure that network attackers can’t trick clients into accessing the site without HTTPS.” (traducción) «Es probable que los clientes que han registrado su sitio como un host HSTS conocido fallen en duro si su sitio llega a tener un error en su configuración TLS (como un certificado caducado). HSTS está diseñado explícitamente así para garantizar que los atacantes de red no puedan engañar a los clientes para que accedan al sitio sin HTTPS.» (web.dev).

La conclusión que saca Google es la frase que le tatuaría a cualquiera que esté a punto de activar esto: “Don’t enable HSTS until you’re certain your site operation is robust enough to avoid ever deploying HTTPS with certificate validation errors.” (traducción) «No active HSTS hasta que esté seguro de que la operación de su sitio es lo bastante robusta como para no desplegar nunca HTTPS con errores de validación del certificado.» (web.dev).

«Fallar en duro» significa exactamente eso: ningún enlace de «continuar de todos modos», ningún clic para saltárselo. En una página HTTPS normal, un certificado caducado muestra un intersticial alarmante que un usuario decidido puede esquivar. En un host HSTS, el navegador se niega en redondo. Así que el modo de fallo de una renovación de certificado olvidada cambia de categoría: pasa de «el tráfico baja porque la gente se asusta» a «el sitio es inaccesible para todos los visitantes que ya habían estado antes».

Escenarios reales de bloqueo

Las formas en que HSTS muerde en la práctica casi siempre se remontan a que includeSubDomains o preload se adelantan a su cobertura real de HTTPS:

  • El subdominio olvidado. Activa includeSubDomains en example.com, pero legacy.example.com (una aplicación antigua, una página de estado, una herramienta de un proveedor) solo habla HTTP o tiene un certificado que no lo cubre. Todos los navegadores que vieron la cabecera se niegan ahora a cargar ese subdominio. En ese servidor no cambió nada: la política se extendió hacia abajo y lo rompió.
  • El hueco del certificado comodín. Un comodín *.example.com cubre foo.example.com pero no foo.bar.example.com (un comodín cubre una sola etiqueta DNS de profundidad). Si un subdominio más profundo depende de HTTP o de un certificado que no coincide, includeSubDomains lo deja bloqueado.
  • El certificado caducado en un host HSTS. La automatización de la renovación falla, el certificado vence y, en lugar de un aviso que se puede esquivar, tiene un sitio caído para todos aquellos cuyo navegador recuerde su política, hasta que recupere un certificado válido y se reconecten y reciban una respuesta segura nueva. No hay forma más rápida de anularlo.
  • El arrepentimiento por preload. Hizo preload y después una necesidad de negocio obliga a poner un servicio solo por HTTP bajo el dominio. Revertirlo son dos trabajos distintos y nada instantáneos, no uno: servir max-age=0 por HTTPS solo borra la política aprendida en los clientes que se reconecten antes de que su antiguo max-age hubiera expirado de todos modos, mientras que sacar el dominio de la lista preload es un envío aparte que aun así tarda ciclos de publicación de los navegadores —meses— en llegar a los usuarios, con independencia de lo que cambie en su servidor.
  • Colisiones con desarrollo local y staging. Hacer preload de example.com con includeSubDomains puede hacer que dev.example.com o un host interno de tipo localhost bajo el mismo apex rechacen HTTP, rompiendo flujos de trabajo locales de formas sorprendentes.

Nada de esto es motivo para evitar HSTS. Son motivos para desplegarlo por fases: primero un max-age corto, añadir includeSubDomains solo después de auditar todos los subdominios y reservar preload para cuando esté seguro.

HSTS no es una jugada de posicionamiento (y no decide la URL principal)

Para ser claros sobre el encuadre SEO: HSTS no es un factor de posicionamiento. HTTPS en sí mismo es uno deliberadamente diminuto —Google lo llamó una “very lightweight signal” (traducción) «señal muy ligera» que afecta a menos del 1 % de las consultas— y HSTS es una capa sobre HTTPS, no una entrada de posicionamiento aparte. Tampoco decide directamente la URL principal ni la indexación. Sin embargo, la propia documentación de Google es más específica que un simple «no importa»: Google prefiere HTTPS como URL principal frente a una página HTTP equivalente excepto cuando hay un certificado no válido, dependencias inseguras en la página, una página HTTPS que redirige a HTTP o una etiqueta rel="canonical" en HTTP (Google: consolidating duplicate URLs). HSTS no puede arreglar ni anular nada de eso. Es una política del lado del navegador sin ninguna influencia en la elección de Google: un certificado defectuoso o una cadena de redirecciones rota todavía pueden empujar a Google hacia una URL principal en HTTP, diga lo que diga su cabecera HSTS. Esa elección la impulsan sus redirecciones, su certificado, su rel="canonical" y sus enlaces internos. HSTS se gana su sitio por seguridad, confianza del usuario y por cerrar la brecha del SSL stripping: hágalo por esas razones, mantenga sus redirecciones y su certificado realmente sólidos, y de todos modos nunca verá HSTS en un informe de posiciones.

Si está haciendo el cambio general de HTTP→HTTPS, HSTS es lo último que activa, no lo primero: le corresponde después de que la migración se haya asentado, como parte de la disciplina más amplia de la migración web.

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.