{"id":3742,"date":"2026-08-02T11:42:05","date_gmt":"2026-08-02T09:42:05","guid":{"rendered":"https:\/\/mantenimientoweb.pro\/blog\/como-forzar-la-carga-mediante-el-protocolo-https-en-un-sitio-html-puro\/"},"modified":"2026-08-02T11:42:06","modified_gmt":"2026-08-02T09:42:06","slug":"como-forzar-la-carga-mediante-el-protocolo-https-en-un-sitio-html-puro","status":"publish","type":"post","link":"https:\/\/mantenimientoweb.pro\/blog\/como-forzar-la-carga-mediante-el-protocolo-https-en-un-sitio-html-puro\/","title":{"rendered":"\u00bfC\u00f3mo forzar la carga mediante el protocolo HTTPS en un sitio HTML puro?"},"content":{"rendered":"<header>\n<p>      \u00bfC\u00f3mo forzar la carga mediante el protocolo HTTPS en un sitio HTML puro?<\/p>\n<p>\n        Un sitio puede estar hecho con tres archivos sobrios \u2014<code>index.html<\/code>, <code>styles.css<\/code> y poco m\u00e1s\u2014 y aun as\u00ed necesitar la misma disciplina de seguridad que una plataforma enorme. La web, ya se sabe, tiene estas peque\u00f1as iron\u00edas: a veces el sitio m\u00e1s simple deja abierta la puerta m\u00e1s elegante.\n      <\/p>\n<\/header>\n<article>\n<p>\n      Forzar HTTPS en un sitio HTML puro no consiste en a\u00f1adir una etiqueta m\u00e1gica dentro del documento, ni en rociar unas l\u00edneas de JavaScript como quien echa sal sobre la mesa para espantar malos esp\u00edritus. HTTPS se decide antes de que el navegador lea tu HTML. Ocurre en la frontera: en el servidor, en el CDN, en el proxy inverso, en la configuraci\u00f3n del hosting. El archivo HTML llega tarde a esa conversaci\u00f3n.\n    <\/p>\n<p>\n      Y, sin embargo, conviene entenderlo bien. Porque pasar de HTTP a HTTPS no es solo \u201cponer el candadito\u201d \ud83d\udd12. Es proteger credenciales, formularios, cookies, sesiones, anal\u00edtica, reputaci\u00f3n, SEO y confianza. Es cambiar una carretera sin vigilancia por un t\u00fanel cifrado; no invisible, no perfecto, pero mucho menos vulnerable al fisg\u00f3n de la mesa de al lado en una cafeter\u00eda con Wi-Fi gratuito. Hace a\u00f1os vi a un administrador llamar \u201ctemporal\u201d a un certificado caducado durante seis meses. Lo temporal, en inform\u00e1tica, a veces envejece como una mancha de humedad.\n    <\/p>\n<nav>\n      <strong>Contenido de la gu\u00eda<\/strong><br \/>\n      <a href=\"#que-significa\">Qu\u00e9 significa forzar HTTPS<\/a><br \/>\n      <a href=\"#requisitos\">Requisitos previos<\/a><br \/>\n      <a href=\"#apache\">Apache y .htaccess<\/a><br \/>\n      <a href=\"#nginx\">Nginx<\/a><br \/>\n      <a href=\"#iis\">IIS<\/a><br \/>\n      <a href=\"#hosting-estatico\">Hosting est\u00e1tico y CDN<\/a><br \/>\n      <a href=\"#hsts\">HSTS<\/a><br \/>\n      <a href=\"#contenido-mixto\">Contenido mixto<\/a><br \/>\n      <a href=\"#seo\">SEO t\u00e9cnico<\/a><br \/>\n      <a href=\"#pruebas\">Pruebas<\/a><br \/>\n      <a href=\"#errores\">Errores frecuentes<\/a><br \/>\n    <\/nav>\n<h2 id=\"que-significa\"><span>\ud83e\udded<\/span>Qu\u00e9 significa realmente \u201cforzar HTTPS\u201d<\/h2>\n<p>\n      Forzar HTTPS significa redirigir autom\u00e1ticamente cualquier solicitud realizada a <code>http:\/\/tudominio.com<\/code> hacia <code>https:\/\/tudominio.com<\/code>. Lo habitual es usar una redirecci\u00f3n permanente <strong>301<\/strong>, que informa a navegadores y motores de b\u00fasqueda de que la versi\u00f3n correcta y preferente del sitio es la segura.\n    <\/p>\n<p>\n      La ant\u00edtesis es clara: HTTP transmite la informaci\u00f3n sin cifrado; HTTPS a\u00f1ade una capa de seguridad mediante TLS. En HTTP, los datos viajan como una postal. En HTTPS, viajan como una carta sellada dentro de una caja fuerte razonablemente moderna. No impide que el cartero sepa el destino, pero s\u00ed evita que lea el mensaje.\n    <\/p>\n<p>\n      En un sitio HTML puro \u2014tambi\u00e9n llamado sitio est\u00e1tico\u2014 no hay WordPress, Laravel, Node.js ni PHP ejecut\u00e1ndose necesariamente en cada petici\u00f3n. Eso simplifica muchas cosas, s\u00ed. Pero la redirecci\u00f3n no depende del HTML. Depende de alguno de estos puntos:\n    <\/p>\n<ul>\n<li>El servidor web: Apache, Nginx, LiteSpeed, IIS.<\/li>\n<li>El panel de hosting: cPanel, Plesk u otro administrador.<\/li>\n<li>Un CDN o proxy: Cloudflare, Bunny CDN, Fastly, Akamai.<\/li>\n<li>Una plataforma de hosting est\u00e1tico: Netlify, Vercel, GitHub Pages, Cloudflare Pages, Firebase Hosting.<\/li>\n<li>Reglas de infraestructura: balanceadores de carga, reverse proxies o contenedores.<\/li>\n<\/ul>\n<p>      <strong>Idea clave:<\/strong> no se fuerza HTTPS desde el contenido, sino desde la entrega. El navegador pide una URL; el servidor responde: \u201cpor aqu\u00ed no, por la puerta segura\u201d. Y lo hace antes de servir el HTML.<\/p>\n<h2 id=\"requisitos\"><span>\ud83e\uddf1<\/span>Requisitos antes de redirigir HTTP a HTTPS<\/h2>\n<p>\n      Antes de activar una redirecci\u00f3n global, hay que preparar el terreno. De lo contrario, podr\u00edas convertir un sitio funcional en una vitrina cerrada con luces bonitas: muy segura, desde luego, porque nadie puede entrar.\n    <\/p>\n<h3>1. Tener un certificado SSL\/TLS v\u00e1lido<\/h3>\n<p>\n      El certificado permite que el navegador verifique la identidad del dominio y establezca una conexi\u00f3n cifrada. Hoy lo m\u00e1s com\u00fan es usar certificados gratuitos de <strong>Let\u2019s Encrypt<\/strong>, ampliamente aceptados y renovables de forma autom\u00e1tica. Muchos proveedores de hosting ya los activan desde el panel con un clic.\n    <\/p>\n<p>\n      Un certificado debe cubrir exactamente el dominio que vas a usar:\n    <\/p>\n<ul>\n<li><code>tudominio.com<\/code><\/li>\n<li><code>www.tudominio.com<\/code>, si tambi\u00e9n usas la versi\u00f3n con www<\/li>\n<li>Subdominios como <code>blog.tudominio.com<\/code>, si corresponde<\/li>\n<\/ul>\n<p>\n      Si el certificado solo cubre <code>www.tudominio.com<\/code> y rediriges a <code>https:\/\/tudominio.com<\/code>, tendr\u00e1s problemas. La seguridad, caprichosa como gato reci\u00e9n mudado, no perdona esos detalles.\n    <\/p>\n<h3>2. Elegir una versi\u00f3n can\u00f3nica del dominio<\/h3>\n<p>\n      No basta con decidir entre HTTP y HTTPS. Tambi\u00e9n conviene escoger entre <code>www<\/code> y sin <code>www<\/code>. Desde el punto de vista t\u00e9cnico, ambas variantes pueden funcionar; desde el punto de vista SEO, conviene una sola versi\u00f3n principal para evitar duplicidades.\n    <\/p>\n<table>\n<thead>\n<tr>\n<th>Decisi\u00f3n<\/th>\n<th>Ejemplo recomendado<\/th>\n<th>Motivo<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Forzar HTTPS<\/td>\n<td><code>https:\/\/tudominio.com<\/code><\/td>\n<td>Seguridad, confianza, compatibilidad con funciones modernas del navegador.<\/td>\n<\/tr>\n<tr>\n<td>Elegir con o sin www<\/td>\n<td><code>https:\/\/www.tudominio.com<\/code> o <code>https:\/\/tudominio.com<\/code><\/td>\n<td>Evitar contenido duplicado y consolidar se\u00f1ales SEO.<\/td>\n<\/tr>\n<tr>\n<td>Usar redirecci\u00f3n 301<\/td>\n<td><code>http:\/\/<\/code> \u2192 <code>https:\/\/<\/code><\/td>\n<td>Indicar cambio permanente a buscadores y navegadores.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>3. Revisar recursos internos<\/h3>\n<p>\n      Si tus im\u00e1genes, hojas CSS o scripts est\u00e1n enlazados con <code>http:\/\/<\/code>, al activar HTTPS puedes provocar alertas de contenido mixto. La p\u00e1gina principal ir\u00e1 segura, pero cargar\u00e1 elementos inseguros. Es como cerrar la puerta principal con cerrojo y dejar la ventana de la cocina abierta con una nota que dice \u201cpor aqu\u00ed\u201d.\n    <\/p>\n<p>\n      Antes de redirigir, revisa:\n    <\/p>\n<ul>\n<li>Im\u00e1genes: <code>&lt;img src=\"http:\/\/...\"&gt;<\/code><\/li>\n<li>CSS: <code>&lt;link rel=\"stylesheet\" href=\"http:\/\/...\"&gt;<\/code><\/li>\n<li>JavaScript: <code>&lt;script src=\"http:\/\/...\"&gt;<\/code><\/li>\n<li>Fuentes externas.<\/li>\n<li>iframes, mapas, v\u00eddeos incrustados y widgets.<\/li>\n<li>URLs absolutas dentro de archivos CSS, por ejemplo <code>background-image<\/code>.<\/li>\n<\/ul>\n<h2 id=\"apache\"><span>\ud83d\udee0\ufe0f<\/span>Forzar HTTPS en Apache con .htaccess<\/h2>\n<p>\n      En servidores Apache, especialmente en hostings compartidos, lo m\u00e1s habitual es usar un archivo <code>.htaccess<\/code> ubicado en la ra\u00edz del sitio. Si tu sitio HTML puro est\u00e1 en <code>public_html<\/code>, all\u00ed suele ir.\n    <\/p>\n<p>\n      La regla cl\u00e1sica para redirigir todo el tr\u00e1fico HTTP hacia HTTPS es:\n    <\/p>\n<pre><code>RewriteEngine On\n\nRewriteCond %{HTTPS} off\nRewriteRule ^(.*)$ https:\/\/%{HTTP_HOST}%{REQUEST_URI} [L,R=301]<\/code><\/pre>\n<p>\n      Esta configuraci\u00f3n conserva el dominio y la ruta solicitada. Es decir:\n    <\/p>\n<ul>\n<li><code>http:\/\/tudominio.com\/<\/code> redirige a <code>https:\/\/tudominio.com\/<\/code><\/li>\n<li><code>http:\/\/tudominio.com\/contacto.html<\/code> redirige a <code>https:\/\/tudominio.com\/contacto.html<\/code><\/li>\n<li><code>http:\/\/tudominio.com\/carpeta\/archivo.html?x=1<\/code> conserva la ruta y los par\u00e1metros.<\/li>\n<\/ul>\n<h3>Redirigir adem\u00e1s de sin www a www<\/h3>\n<p>\n      Si quieres que todo termine en <code>https:\/\/www.tudominio.com<\/code>, usa una regla m\u00e1s expl\u00edcita:\n    <\/p>\n<pre><code>RewriteEngine On\n\nRewriteCond %{HTTPS} off [OR]\nRewriteCond %{HTTP_HOST} !^www\\.tudominio\\.com$ [NC]\nRewriteRule ^(.*)$ https:\/\/www.tudominio.com%{REQUEST_URI} [L,R=301]<\/code><\/pre>\n<h3>Redirigir de www a sin www<\/h3>\n<p>\n      Si prefieres una URL m\u00e1s breve, como <code>https:\/\/tudominio.com<\/code>, la regla ser\u00eda:\n    <\/p>\n<pre><code>RewriteEngine On\n\nRewriteCond %{HTTPS} off [OR]\nRewriteCond %{HTTP_HOST} ^www\\.tudominio\\.com$ [NC]\nRewriteRule ^(.*)$ https:\/\/tudominio.com%{REQUEST_URI} [L,R=301]<\/code><\/pre>\n<p>      <strong>Atenci\u00f3n:<\/strong> sustituye <code>tudominio.com<\/code> por tu dominio real. Parece obvio, pero pocas cosas son tan democr\u00e1ticas como los errores de copiar y pegar: visitan por igual a principiantes y veteranos.<\/p>\n<h3>Si est\u00e1s detr\u00e1s de Cloudflare, proxy o balanceador<\/h3>\n<p>\n      En algunos entornos, Apache recibe la petici\u00f3n desde un proxy que ya se conecta al visitante mediante HTTPS. En ese caso, la variable <code>%{HTTPS}<\/code> puede aparecer como <code>off<\/code> aunque el usuario est\u00e9 navegando con HTTPS, provocando bucles de redirecci\u00f3n.\n    <\/p>\n<p>\n      Si tu proxy env\u00eda la cabecera <code>X-Forwarded-Proto<\/code>, puedes usar:\n    <\/p>\n<pre><code>RewriteEngine On\n\nRewriteCond %{HTTP:X-Forwarded-Proto} !https\nRewriteRule ^(.*)$ https:\/\/%{HTTP_HOST}%{REQUEST_URI} [L,R=301]<\/code><\/pre>\n<p>\n      Esta variante debe aplicarse con cuidado y solo si tu infraestructura realmente usa esa cabecera. En seguridad web, adivinar es una metodolog\u00eda encantadora hasta que deja de serlo.\n    <\/p>\n<h2 id=\"nginx\"><span>\u2699\ufe0f<\/span>Forzar HTTPS en Nginx<\/h2>\n<p>\n      En Nginx no se usa <code>.htaccess<\/code>. Las reglas se configuran en el bloque del servidor, normalmente dentro de archivos ubicados en <code>\/etc\/nginx\/sites-available\/<\/code>, <code>\/etc\/nginx\/conf.d\/<\/code> o una ruta definida por tu distribuci\u00f3n y despliegue.\n    <\/p>\n<p>\n      La forma recomendada es tener un bloque escuchando en el puerto 80 que redirija hacia HTTPS:\n    <\/p>\n<pre><code>server {\n    listen 80;\n    listen [::]:80;\n    server_name tudominio.com www.tudominio.com;\n\n    return 301 https:\/\/tudominio.com$request_uri;\n}<\/code><\/pre>\n<p>\n      Luego, el bloque HTTPS servir\u00eda el sitio:\n    <\/p>\n<pre><code>server {\n    listen 443 ssl http2;\n    listen [::]:443 ssl http2;\n    server_name tudominio.com;\n\n    root \/var\/www\/tudominio;\n    index index.html;\n\n    ssl_certificate \/etc\/letsencrypt\/live\/tudominio.com\/fullchain.pem;\n    ssl_certificate_key \/etc\/letsencrypt\/live\/tudominio.com\/privkey.pem;\n\n    location \/ {\n        try_files $uri $uri\/ =404;\n    }\n}<\/code><\/pre>\n<p>\n      Si quieres usar <code>www<\/code> como versi\u00f3n principal:\n    <\/p>\n<pre><code>server {\n    listen 80;\n    listen [::]:80;\n    server_name tudominio.com www.tudominio.com;\n\n    return 301 https:\/\/www.tudominio.com$request_uri;\n}<\/code><\/pre>\n<p>\n      Despu\u00e9s de modificar la configuraci\u00f3n, valida y recarga Nginx:\n    <\/p>\n<pre><code>sudo nginx -t\nsudo systemctl reload nginx<\/code><\/pre>\n<p>      <strong>Buenas pr\u00e1cticas:<\/strong> usa <code>return 301<\/code> en lugar de reescrituras complejas cuando solo necesitas redirigir. Es m\u00e1s claro, m\u00e1s r\u00e1pido y menos propenso a errores.<\/p>\n<h2 id=\"iis\"><span>\ud83e\ude9f<\/span>Forzar HTTPS en IIS con web.config<\/h2>\n<p>\n      En servidores Windows con IIS, se puede utilizar el m\u00f3dulo URL Rewrite. Para un sitio HTML puro alojado en IIS, el archivo <code>web.config<\/code> puede incluir una regla como esta:\n    <\/p>\n<pre><code>&lt;configuration&gt;\n  &lt;system.webServer&gt;\n    &lt;rewrite&gt;\n      &lt;rules&gt;\n        &lt;rule name=\"Redirigir a HTTPS\" stopProcessing=\"true\"&gt;\n          &lt;match url=\"(.*)\" \/&gt;\n          &lt;conditions&gt;\n            &lt;add input=\"{HTTPS}\" pattern=\"off\" ignoreCase=\"true\" \/&gt;\n          &lt;\/conditions&gt;\n          &lt;action type=\"Redirect\" url=\"https:\/\/{HTTP_HOST}\/{R:1}\" redirectType=\"Permanent\" \/&gt;\n        &lt;\/rule&gt;\n      &lt;\/rules&gt;\n    &lt;\/rewrite&gt;\n  &lt;\/system.webServer&gt;\n&lt;\/configuration&gt;<\/code><\/pre>\n<p>\n      Si el m\u00f3dulo URL Rewrite no est\u00e1 instalado, la regla no funcionar\u00e1. IIS no es dif\u00edcil, exactamente; solo tiene esa manera suya de exigir que uno encuentre la puerta correcta en un pasillo con muchas puertas id\u00e9nticas.\n    <\/p>\n<h2 id=\"hosting-estatico\"><span>\ud83c\udf10<\/span>Forzar HTTPS en plataformas de hosting est\u00e1tico y CDN<\/h2>\n<p>\n      Muchos sitios HTML puros ya no viven en un servidor tradicional. Se publican desde Git, se distribuyen por CDN y se despliegan con una facilidad que a veces parece brujer\u00eda civilizada. En esos casos, la redirecci\u00f3n HTTPS suele configurarse desde el panel de la plataforma.\n    <\/p>\n<table>\n<thead>\n<tr>\n<th>Plataforma<\/th>\n<th>C\u00f3mo se fuerza HTTPS<\/th>\n<th>Notas importantes<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Netlify<\/td>\n<td>Desde Domain management \u2192 HTTPS, con certificado autom\u00e1tico. Tambi\u00e9n permite reglas en <code>_redirects<\/code>.<\/td>\n<td>Netlify suele forzar HTTPS autom\u00e1ticamente cuando el certificado est\u00e1 activo.<\/td>\n<\/tr>\n<tr>\n<td>Vercel<\/td>\n<td>Certificados autom\u00e1ticos para dominios configurados. Redirecciones mediante <code>vercel.json<\/code> si hace falta.<\/td>\n<td>Conviene definir dominio principal para evitar duplicidad entre www y no-www.<\/td>\n<\/tr>\n<tr>\n<td>GitHub Pages<\/td>\n<td>Settings \u2192 Pages \u2192 Enforce HTTPS.<\/td>\n<td>Disponible cuando el DNS y el certificado est\u00e1n correctamente configurados.<\/td>\n<\/tr>\n<tr>\n<td>Cloudflare Pages<\/td>\n<td>HTTPS se gestiona desde Cloudflare; se puede complementar con Redirect Rules.<\/td>\n<td>Revisar el modo SSL\/TLS para evitar bucles.<\/td>\n<\/tr>\n<tr>\n<td>Firebase Hosting<\/td>\n<td>HTTPS autom\u00e1tico y redirecciones en <code>firebase.json<\/code>.<\/td>\n<td>Ideal para sitios est\u00e1ticos con rutas limpias.<\/td>\n<\/tr>\n<tr>\n<td>Amazon S3 + CloudFront<\/td>\n<td>CloudFront con certificado de AWS Certificate Manager y redirecci\u00f3n HTTP a HTTPS en Viewer Protocol Policy.<\/td>\n<td>S3 por s\u00ed solo no siempre resuelve todos los casos de dominio personalizado con HTTPS.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Cloudflare: cuidado con los modos SSL\/TLS<\/h3>\n<p>\n      Cloudflare puede ser un gran aliado, pero tambi\u00e9n una f\u00e1brica de bucles si se configura sin mirar. Sus modos m\u00e1s comunes son:\n    <\/p>\n<ul>\n<li><strong>Flexible:<\/strong> el visitante conecta por HTTPS a Cloudflare, pero Cloudflare conecta por HTTP a tu servidor. Puede causar problemas y no cifra el tramo completo.<\/li>\n<li><strong>Full:<\/strong> cifra el tramo visitante \u2192 Cloudflare y Cloudflare \u2192 servidor, aunque no exige certificado v\u00e1lido en origen.<\/li>\n<li><strong>Full strict:<\/strong> cifra ambos tramos y exige certificado v\u00e1lido en el servidor de origen. Es la opci\u00f3n m\u00e1s recomendable cuando est\u00e1 bien configurada.<\/li>\n<\/ul>\n<p>\n      Si puedes, usa <strong>Full strict<\/strong>. La seguridad a medias tiene ese encanto de paraguas con agujeros: tranquiliza hasta que llueve.\n    <\/p>\n<h2 id=\"hsts\"><span>\ud83e\udde8<\/span>HSTS: cuando el navegador recuerda que tu sitio debe ir por HTTPS<\/h2>\n<p>\n      HSTS significa <strong>HTTP Strict Transport Security<\/strong>. Es una cabecera que le dice al navegador: \u201cdurante un tiempo determinado, accede siempre a este dominio mediante HTTPS, aunque el usuario escriba HTTP\u201d.\n    <\/p>\n<p>\n      Esta cabecera reduce el riesgo de ataques de degradaci\u00f3n de protocolo y evita que el navegador intente primero una conexi\u00f3n insegura. Es potente. Y como toda herramienta potente, no debe activarse con ligereza.\n    <\/p>\n<p>\n      En Apache puedes a\u00f1adir:\n    <\/p>\n<pre><code>&lt;IfModule mod_headers.c&gt;\n  Header always set Strict-Transport-Security \"max-age=31536000; includeSubDomains; preload\"\n&lt;\/IfModule&gt;<\/code><\/pre>\n<p>\n      En Nginx:\n    <\/p>\n<pre><code>add_header Strict-Transport-Security \"max-age=31536000; includeSubDomains; preload\" always;<\/code><\/pre>\n<p>\n      La directiva anterior indica:\n    <\/p>\n<ul>\n<li><code>max-age=31536000<\/code>: el navegador recordar\u00e1 la pol\u00edtica durante un a\u00f1o.<\/li>\n<li><code>includeSubDomains<\/code>: tambi\u00e9n se aplicar\u00e1 a todos los subdominios.<\/li>\n<li><code>preload<\/code>: permite solicitar la inclusi\u00f3n del dominio en listas de precarga HSTS mantenidas por navegadores.<\/li>\n<\/ul>\n<p>      <strong>Importante:<\/strong> no uses <code>includeSubDomains<\/code> ni <code>preload<\/code> si no est\u00e1s completamente seguro de que todos tus subdominios funcionan correctamente con HTTPS. HSTS puede bloquear accesos durante meses. Es una promesa escrita en piedra, no una nota adhesiva.<\/p>\n<p>\n      Una estrategia prudente consiste en empezar con un tiempo menor:\n    <\/p>\n<pre><code>Strict-Transport-Security: max-age=300<\/code><\/pre>\n<p>\n      Luego aumentar gradualmente:\n    <\/p>\n<pre><code>Strict-Transport-Security: max-age=86400<\/code><\/pre>\n<p>\n      Y finalmente pasar a un a\u00f1o si todo est\u00e1 estable:\n    <\/p>\n<pre><code>Strict-Transport-Security: max-age=31536000<\/code><\/pre>\n<h2 id=\"contenido-mixto\"><span>\ud83e\udde9<\/span>Contenido mixto: el enemigo discreto despu\u00e9s de activar HTTPS<\/h2>\n<p>\n      Una vez que el sitio carga por HTTPS, el navegador espera que todos sus recursos tambi\u00e9n lo hagan. Si una p\u00e1gina segura intenta cargar una imagen, un script o una hoja de estilos desde HTTP, aparece el temido contenido mixto.\n    <\/p>\n<p>\n      Hay dos tipos principales:\n    <\/p>\n<ul>\n<li><strong>Contenido mixto pasivo:<\/strong> im\u00e1genes, v\u00eddeos o audios cargados por HTTP. Algunos navegadores pueden permitirlo, aunque lo marcan como inseguro.<\/li>\n<li><strong>Contenido mixto activo:<\/strong> scripts, iframes, CSS o recursos que pueden modificar la p\u00e1gina. Normalmente se bloquean.<\/li>\n<\/ul>\n<p>\n      Para corregirlo, cambia URLs absolutas con HTTP:\n    <\/p>\n<pre><code>&lt;img src=\"http:\/\/tudominio.com\/img\/logo.png\" alt=\"Logo\"&gt;<\/code><\/pre>\n<p>\n      Por URLs HTTPS:\n    <\/p>\n<pre><code>&lt;img src=\"https:\/\/tudominio.com\/img\/logo.png\" alt=\"Logo\"&gt;<\/code><\/pre>\n<p>\n      O, mejor a\u00fan, por rutas relativas si el recurso pertenece al mismo sitio:\n    <\/p>\n<pre><code>&lt;img src=\"\/img\/logo.png\" alt=\"Logo\"&gt;<\/code><\/pre>\n<p>\n      Las rutas relativas son limpias y portables. Funcionan como senderos internos: no necesitan repetir el nombre del pa\u00eds cada vez que quieres ir a la cocina.\n    <\/p>\n<h3>Cabecera \u00fatil: upgrade-insecure-requests<\/h3>\n<p>\n      Puedes a\u00f1adir una pol\u00edtica de seguridad de contenido para pedir al navegador que actualice recursos HTTP a HTTPS cuando sea posible:\n    <\/p>\n<pre><code>Content-Security-Policy: upgrade-insecure-requests;<\/code><\/pre>\n<p>\n      En Apache:\n    <\/p>\n<pre><code>&lt;IfModule mod_headers.c&gt;\n  Header always set Content-Security-Policy \"upgrade-insecure-requests\"\n&lt;\/IfModule&gt;<\/code><\/pre>\n<p>\n      En Nginx:\n    <\/p>\n<pre><code>add_header Content-Security-Policy \"upgrade-insecure-requests\" always;<\/code><\/pre>\n<p>\n      Esto ayuda, pero no sustituye una revisi\u00f3n real. Si el recurso externo no existe en HTTPS, no hay milagro. Internet tiene muchos, pero no tantos.\n    <\/p>\n<h2 id=\"seo\"><span>\ud83d\udcc8<\/span>Impacto SEO de forzar HTTPS en un sitio HTML puro<\/h2>\n<p>\n      Google confirm\u00f3 hace a\u00f1os que HTTPS es una se\u00f1al de ranking ligera, y con el tiempo los navegadores han reforzado la percepci\u00f3n de que HTTP es una tecnolog\u00eda vieja para usos p\u00fablicos. No significa que migrar a HTTPS te pondr\u00e1 autom\u00e1ticamente en primera posici\u00f3n. Ojal\u00e1 el SEO fuera tan obediente. Pero s\u00ed evita se\u00f1ales negativas, mejora confianza y alinea el sitio con los est\u00e1ndares actuales.\n    <\/p>\n<p>\n      Para una migraci\u00f3n correcta desde HTTP a HTTPS, revisa estos puntos:\n    <\/p>\n<ul>\n<li><strong>Usa redirecciones 301<\/strong>, no 302, salvo que realmente sea temporal.<\/li>\n<li><strong>Actualiza las etiquetas canonical<\/strong> para que apunten a la versi\u00f3n HTTPS.<\/li>\n<li><strong>Actualiza el sitemap XML<\/strong> con URLs HTTPS.<\/li>\n<li><strong>Actualiza enlaces internos absolutos<\/strong> que sigan usando HTTP.<\/li>\n<li><strong>Registra la propiedad HTTPS<\/strong> en Google Search Console si a\u00fan usas propiedades por prefijo de URL.<\/li>\n<li><strong>Revisa robots.txt<\/strong> y aseg\u00farate de que no bloquee recursos importantes.<\/li>\n<li><strong>Actualiza enlaces en campa\u00f1as, perfiles sociales y herramientas externas<\/strong> cuando sea posible.<\/li>\n<li><strong>Evita cadenas de redirecci\u00f3n<\/strong>, por ejemplo HTTP \u2192 HTTPS con www \u2192 HTTPS sin www. Mejor una sola redirecci\u00f3n directa.<\/li>\n<\/ul>\n<p>\n      Una cadena de redirecciones innecesaria es como hacer pasar al usuario por tres recepciones para llegar a una habitaci\u00f3n que estaba al lado. Funciona, s\u00ed. Pero nadie lo agradece.\n    <\/p>\n<h3>Ejemplo de canonical correcto<\/h3>\n<p>\n      En un archivo HTML est\u00e1tico, la etiqueta canonical deber\u00eda apuntar a la versi\u00f3n final segura:\n    <\/p>\n<pre><code>&lt;link rel=\"canonical\" href=\"https:\/\/tudominio.com\/pagina.html\"&gt;<\/code><\/pre>\n<h3>Ejemplo de sitemap con HTTPS<\/h3>\n<pre><code>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\n&lt;urlset xmlns=\"http:\/\/www.sitemaps.org\/schemas\/sitemap\/0.9\"&gt;\n  &lt;url&gt;\n    &lt;loc&gt;https:\/\/tudominio.com\/&lt;\/loc&gt;\n  &lt;\/url&gt;\n  &lt;url&gt;\n    &lt;loc&gt;https:\/\/tudominio.com\/contacto.html&lt;\/loc&gt;\n  &lt;\/url&gt;\n&lt;\/urlset&gt;<\/code><\/pre>\n<h2 id=\"pruebas\"><span>\ud83d\udd0d<\/span>C\u00f3mo comprobar que HTTPS est\u00e1 correctamente forzado<\/h2>\n<p>\n      No des por hecho que funciona porque \u201ca m\u00ed me abre bien\u201d. El navegador recuerda redirecciones, almacena cach\u00e9 y a veces nos miente con una serenidad admirable. Conviene probar con herramientas limpias.\n    <\/p>\n<h3>1. Probar con curl<\/h3>\n<p>\n      Desde terminal:\n    <\/p>\n<pre><code>curl -I http:\/\/tudominio.com<\/code><\/pre>\n<p>\n      Deber\u00edas ver algo parecido a:\n    <\/p>\n<pre><code>HTTP\/1.1 301 Moved Permanently\nLocation: https:\/\/tudominio.com\/<\/code><\/pre>\n<p>\n      Despu\u00e9s prueba:\n    <\/p>\n<pre><code>curl -I https:\/\/tudominio.com<\/code><\/pre>\n<p>\n      La respuesta ideal ser\u00e1 <code>200 OK<\/code>, <code>304 Not Modified<\/code> u otro estado v\u00e1lido seg\u00fan tu configuraci\u00f3n, pero no una nueva redirecci\u00f3n innecesaria.\n    <\/p>\n<h3>2. Verificar variantes del dominio<\/h3>\n<p>\n      Comprueba todas las combinaciones:\n    <\/p>\n<ul>\n<li><code>http:\/\/tudominio.com<\/code><\/li>\n<li><code>http:\/\/www.tudominio.com<\/code><\/li>\n<li><code>https:\/\/tudominio.com<\/code><\/li>\n<li><code>https:\/\/www.tudominio.com<\/code><\/li>\n<\/ul>\n<p>\n      Todas deben terminar en una \u00fanica versi\u00f3n can\u00f3nica. Sin rodeos, sin bucles, sin esa coreograf\u00eda absurda de URLs que saltan de una a otra como polillas alrededor de una l\u00e1mpara.\n    <\/p>\n<h3>3. Revisar el certificado SSL\/TLS<\/h3>\n<p>\n      Puedes usar herramientas como:\n    <\/p>\n<ul>\n<li>SSL Labs Server Test.<\/li>\n<li>Why No Padlock.<\/li>\n<li>Security Headers.<\/li>\n<li>La pesta\u00f1a Security o Network de DevTools en Chrome, Firefox o Edge.<\/li>\n<\/ul>\n<p>\n      Revisa especialmente:\n    <\/p>\n<ul>\n<li>Fecha de expiraci\u00f3n del certificado.<\/li>\n<li>Nombre com\u00fan y nombres alternativos del certificado.<\/li>\n<li>Cadena de certificaci\u00f3n completa.<\/li>\n<li>Protocolos TLS habilitados.<\/li>\n<li>Existencia de contenido mixto.<\/li>\n<\/ul>\n<h2 id=\"errores\"><span>\ud83d\udea7<\/span>Errores frecuentes al forzar HTTPS<\/h2>\n<h3>1. Activar la redirecci\u00f3n antes de instalar el certificado<\/h3>\n<p>\n      Es el cl\u00e1sico tropiezo. El visitante llega por HTTP, el servidor lo env\u00eda a HTTPS y el navegador se encuentra con un certificado inexistente, caducado o inv\u00e1lido. Resultado: advertencia roja, susto, abandono. La confianza se rompe r\u00e1pido; reconstruirla cuesta m\u00e1s.\n    <\/p>\n<h3>2. Crear bucles de redirecci\u00f3n<\/h3>\n<p>\n      Un bucle ocurre cuando una regla manda de A a B y otra manda de B a A. Tambi\u00e9n puede suceder con proxies mal configurados. El navegador acaba mostrando errores como <code>ERR_TOO_MANY_REDIRECTS<\/code>.\n    <\/p>\n<p>\n      Causas habituales:\n    <\/p>\n<ul>\n<li>Cloudflare en modo Flexible y servidor forzando HTTPS.<\/li>\n<li>Reglas duplicadas en <code>.htaccess<\/code> y panel del hosting.<\/li>\n<li>Redirecciones contradictorias entre www y sin www.<\/li>\n<li>Aplicaciones o proxies que no reconocen correctamente el protocolo original.<\/li>\n<\/ul>\n<h3>3. Usar JavaScript para redirigir<\/h3>\n<p>\n      Puede parecer tentador:\n    <\/p>\n<pre><code>&lt;script&gt;\nif (location.protocol !== \"https:\") {\n  location.href = \"https:\/\/\" + location.host + location.pathname;\n}\n&lt;\/script&gt;<\/code><\/pre>\n<p>\n      Pero no es una soluci\u00f3n adecuada. El navegador ya tuvo que cargar la p\u00e1gina por HTTP para ejecutar ese script. Adem\u00e1s, no ofrece una se\u00f1al SEO tan limpia como una redirecci\u00f3n 301 del servidor y puede fallar si JavaScript est\u00e1 bloqueado. Es cerrar la caja fuerte despu\u00e9s de haber dejado el dinero sobre el mostrador.\n    <\/p>\n<h3>4. Usar meta refresh<\/h3>\n<p>\n      Algo como esto tampoco es recomendable:\n    <\/p>\n<pre><code>&lt;meta http-equiv=\"refresh\" content=\"0; url=https:\/\/tudominio.com\"&gt;<\/code><\/pre>\n<p>\n      Sirve como parche desesperado en escenarios muy limitados, pero no deber\u00eda ser la estrategia principal. Si tienes acceso a servidor, hosting o CDN, usa redirecciones reales.\n    <\/p>\n<h3>5. Olvidar recursos externos<\/h3>\n<p>\n      A veces el HTML est\u00e1 perfecto, el CSS tambi\u00e9n, el certificado reluce, y entonces un viejo script de estad\u00edsticas cargado por HTTP arruina la fiesta. Revisa integraciones antiguas: chat, mapas, reproductores, p\u00edxeles de marketing, fuentes, banners. La web est\u00e1 hecha de capas; algunas son geol\u00f3gicas.\n    <\/p>\n<h2><span>\ud83d\udccc<\/span>Checklist profesional para una migraci\u00f3n HTTPS limpia<\/h2>\n<ol>\n<li>Instala un certificado SSL\/TLS v\u00e1lido para todas las variantes necesarias del dominio.<\/li>\n<li>Define la versi\u00f3n can\u00f3nica: con www o sin www.<\/li>\n<li>Configura redirecci\u00f3n 301 desde HTTP hacia HTTPS.<\/li>\n<li>Evita cadenas de redirecci\u00f3n: apunta directamente a la URL final.<\/li>\n<li>Actualiza enlaces internos absolutos a HTTPS o usa rutas relativas.<\/li>\n<li>Corrige im\u00e1genes, scripts, CSS, fuentes e iframes con HTTP.<\/li>\n<li>Actualiza canonical, sitemap XML y referencias en robots.txt si aplica.<\/li>\n<li>Comprueba el sitio con <code>curl -I<\/code> y herramientas de auditor\u00eda SSL.<\/li>\n<li>Activa HSTS solo cuando todo est\u00e9 probado y estable.<\/li>\n<li>Monitorea Google Search Console, logs del servidor y errores 404 tras el cambio.<\/li>\n<\/ol>\n<h2><span>\ud83e\uddea<\/span>Configuraciones recomendadas seg\u00fan tu caso<\/h2>\n<table>\n<thead>\n<tr>\n<th>Escenario<\/th>\n<th>Soluci\u00f3n recomendada<\/th>\n<th>Evitar<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Hosting compartido con Apache<\/td>\n<td><code>.htaccess<\/code> con <code>RewriteRule<\/code> y certificado activo en el panel.<\/td>\n<td>Duplicar reglas en cPanel y <code>.htaccess<\/code> sin comprobar el resultado.<\/td>\n<\/tr>\n<tr>\n<td>Servidor VPS con Nginx<\/td>\n<td>Bloque <code>server<\/code> en puerto 80 con <code>return 301<\/code>.<\/td>\n<td>Usar reglas complejas si una redirecci\u00f3n simple basta.<\/td>\n<\/tr>\n<tr>\n<td>Sitio en Cloudflare<\/td>\n<td>Modo SSL\/TLS <strong>Full strict<\/strong> y regla Always Use HTTPS si procede.<\/td>\n<td>Modo Flexible con redirecci\u00f3n HTTPS en origen.<\/td>\n<\/tr>\n<tr>\n<td>GitHub Pages<\/td>\n<td>Activar <strong>Enforce HTTPS<\/strong> en la configuraci\u00f3n del repositorio.<\/td>\n<td>Intentar usar <code>.htaccess<\/code>, porque GitHub Pages no lo interpreta.<\/td>\n<\/tr>\n<tr>\n<td>Netlify o Vercel<\/td>\n<td>Certificado autom\u00e1tico y dominio principal bien definido.<\/td>\n<td>Crear redirecciones contradictorias en archivos de configuraci\u00f3n.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2><span>\ud83d\udd10<\/span>HTTPS no lo arregla todo, pero arregla algo esencial<\/h2>\n<p>\n      Conviene no convertir HTTPS en un amuleto. Un sitio puede cargar por HTTPS y aun as\u00ed tener formularios vulnerables, dependencias antiguas, cabeceras pobres o archivos expuestos. HTTPS no valida tu c\u00f3digo, no optimiza tus im\u00e1genes, no corrige un dise\u00f1o roto en m\u00f3vil. No es medicina universal.\n    <\/p>\n<p>\n      Pero s\u00ed resuelve una pieza fundamental: cifra la comunicaci\u00f3n entre el navegador y el servidor, autentica el dominio y elimina esa advertencia de \u201cNo seguro\u201d que hoy suena menos a detalle t\u00e9cnico y m\u00e1s a cartel de peligro en una puerta oxidada.\n    <\/p>\n<p>\n      En un sitio HTML puro, forzar HTTPS es una intervenci\u00f3n peque\u00f1a con efectos grandes. No requiere reescribir el sitio. No exige instalar un CMS. No pide ceremonias. Solo necesita una configuraci\u00f3n correcta, una mirada atenta y esa rara virtud t\u00e9cnica que consiste en no tocar veinte cosas cuando basta con tocar una.\n    <\/p>\n<p>\n      La web moderna avanza entre dos fuerzas opuestas: la simplicidad del documento est\u00e1tico y la complejidad de la infraestructura que lo entrega. Un archivo HTML puede ser tan ligero como una hoja al viento; el camino que recorre hasta el navegador, en cambio, pasa por certificados, DNS, proxies, cabeceras y reglas de servidor. Ah\u00ed est\u00e1 la paradoja. Y tambi\u00e9n la belleza.\n    <\/p>\n<p>\n      As\u00ed que s\u00ed: fuerza HTTPS. Hazlo desde el servidor, CDN o plataforma adecuada. Comprueba cada variante. Revisa el contenido mixto. Cuida el SEO. Activa HSTS cuando est\u00e9s preparado. Y deja que el candado aparezca no como adorno, sino como se\u00f1al de una casa bien cerrada. \ud83d\udee1\ufe0f\n    <\/p>\n<p>\n      Consejo final de mantenimiento: revisa la renovaci\u00f3n autom\u00e1tica del certificado y configura alertas de expiraci\u00f3n. Un certificado vencido no rompe el sitio con estruendo; lo hace con una pantalla de advertencia, que es una forma muy moderna de cerrar la persiana en horario comercial.\n    <\/p>\n<\/article>\n","protected":false},"excerpt":{"rendered":"<p>\u00bfC\u00f3mo forzar la carga mediante el protocolo HTTPS en un sitio HTML puro? Un sitio<\/p>\n","protected":false},"author":1,"featured_media":3741,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_seopress_titles_title":"","_seopress_titles_desc":"","_seopress_robots_index":"","_seopress_robots_follow":"","_seopress_robots_imageindex":"","_seopress_robots_snippet":"","_seopress_robots_primary_cat":"","_seopress_robots_breadcrumbs":"","_seopress_robots_freeze_modified_date":"","_seopress_robots_custom_modified_date":"","_seopress_robots_canonical":"","_seopress_social_fb_title":"","_seopress_social_fb_desc":"","_seopress_social_fb_img":"","_seopress_social_fb_img_attachment_id":0,"_seopress_social_fb_img_width":0,"_seopress_social_fb_img_height":0,"_seopress_social_twitter_title":"","_seopress_social_twitter_desc":"","_seopress_social_twitter_img":"","_seopress_social_twitter_img_attachment_id":0,"_seopress_social_twitter_img_width":0,"_seopress_social_twitter_img_height":0,"_seopress_redirections_value":"","_seopress_redirections_enabled":"","_seopress_redirections_enabled_regex":"","_seopress_redirections_logged_status":"","_seopress_redirections_param":"","_seopress_redirections_type":0,"_seopress_analysis_target_kw":"","_seopress_news_disabled":"","_seopress_video_disabled":"","_seopress_video":[],"_seopress_pro_schemas_manual":[],"_seopress_pro_rich_snippets_disable_all":"","_seopress_pro_rich_snippets_disable":[],"_seopress_pro_schemas":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-3742","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-mantenimiento"],"_links":{"self":[{"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/posts\/3742","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/comments?post=3742"}],"version-history":[{"count":1,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/posts\/3742\/revisions"}],"predecessor-version":[{"id":3743,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/posts\/3742\/revisions\/3743"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/media\/3741"}],"wp:attachment":[{"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/media?parent=3742"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/categories?post=3742"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/tags?post=3742"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}