{"id":3953,"date":"2026-11-06T00:46:13","date_gmt":"2026-11-05T23:46:13","guid":{"rendered":"https:\/\/mantenimientoweb.pro\/blog\/como-solucionar-problemas-de-contenido-mixto-http-https-que-asustan-a-tus-visitantes\/"},"modified":"2026-11-06T00:46:17","modified_gmt":"2026-11-05T23:46:17","slug":"como-solucionar-problemas-de-contenido-mixto-http-https-que-asustan-a-tus-visitantes","status":"publish","type":"post","link":"https:\/\/mantenimientoweb.pro\/blog\/como-solucionar-problemas-de-contenido-mixto-http-https-que-asustan-a-tus-visitantes\/","title":{"rendered":"\u00bfC\u00f3mo solucionar problemas de contenido mixto (HTTP\/HTTPS) que asustan a tus visitantes?"},"content":{"rendered":"<article>\n<section>\n    \u00bfC\u00f3mo solucionar problemas de contenido mixto HTTP\/HTTPS que asustan a tus visitantes? \ud83d\udd12<\/p>\n<p>El contenido mixto es ese detalle aparentemente menor que convierte un sitio \u201cseguro\u201d en una habitaci\u00f3n con una ventana abierta. El certificado SSL est\u00e1 instalado, el candado parece estar ah\u00ed, todo luce correcto\u2026 hasta que el navegador, siempre tan discreto como una sirena de ambulancia en una biblioteca, decide avisar al usuario: \u201cEste sitio no es completamente seguro\u201d.<\/p>\n<p>Y claro, el visitante no piensa en hojas de estilo, rutas absolutas ni recursos externos. Piensa en fraude, virus, tarjetas robadas y en cerrar la pesta\u00f1a. En internet, la confianza se rompe como una copa fina: no hace falta mucho ruido para que deje de servir.<\/p>\n<\/section>\n<nav aria-label=\"\u00cdndice del art\u00edculo\">\n    <strong>Contenido de esta gu\u00eda<\/strong><\/p>\n<ul>\n<li><a href=\"#que-es\">Qu\u00e9 es el contenido mixto<\/a><\/li>\n<li><a href=\"#por-que-importa\">Por qu\u00e9 afecta seguridad, SEO y conversiones<\/a><\/li>\n<li><a href=\"#tipos\">Tipos de contenido mixto<\/a><\/li>\n<li><a href=\"#diagnostico\">C\u00f3mo detectarlo con precisi\u00f3n<\/a><\/li>\n<li><a href=\"#wordpress\">C\u00f3mo corregirlo en WordPress<\/a><\/li>\n<li><a href=\"#servidor\">Soluciones en servidor, CDN y cabeceras<\/a><\/li>\n<li><a href=\"#terceros\">Recursos externos y servicios de terceros<\/a><\/li>\n<li><a href=\"#prevencion\">C\u00f3mo evitar que vuelva<\/a><\/li>\n<li><a href=\"#checklist\">Checklist final de revisi\u00f3n<\/a><\/li>\n<\/ul>\n<\/nav>\n<section id=\"que-es\">\n<h2>Qu\u00e9 es el contenido mixto HTTP\/HTTPS y por qu\u00e9 aparece \ud83e\udde9<\/h2>\n<p>Un problema de <strong>contenido mixto<\/strong> ocurre cuando una p\u00e1gina cargada mediante <code>HTTPS<\/code> solicita alg\u00fan recurso mediante <code>HTTP<\/code>. Dicho de forma sencilla: la puerta principal tiene cerradura blindada, pero el repartidor entra por el s\u00f3tano.<\/p>\n<p>Una p\u00e1gina segura no es solo la URL del navegador. Es tambi\u00e9n el conjunto de im\u00e1genes, scripts, hojas CSS, fuentes, iframes, v\u00eddeos, llamadas AJAX, archivos JSON y recursos que construyen esa p\u00e1gina. Si uno de ellos se carga por HTTP, la integridad de la experiencia se debilita.<\/p>\n<p>La diferencia es crucial:<\/p>\n<ul>\n<li><strong>HTTP<\/strong> transmite datos sin cifrado. Un tercero en la red puede interceptar o alterar la informaci\u00f3n.<\/li>\n<li><strong>HTTPS<\/strong> usa TLS para cifrar la conexi\u00f3n, autenticar el servidor y reducir el riesgo de manipulaci\u00f3n en tr\u00e1nsito.<\/li>\n<\/ul>\n<p>El contenido mixto suele aparecer despu\u00e9s de una migraci\u00f3n a HTTPS, un cambio de dominio, una restauraci\u00f3n desde una copia antigua, una importaci\u00f3n de contenido, la instalaci\u00f3n de un tema mal construido o el uso de plugins que todav\u00eda guardan rutas absolutas con <code>http:\/\/<\/code>. Tambi\u00e9n nace de cosas m\u00e1s humanas: alguien peg\u00f3 una imagen antigua, insert\u00f3 un mapa de hace a\u00f1os o copi\u00f3 un script de una plataforma que a\u00fan parec\u00eda vivir feliz en 2009.<\/p>\n<p>      <strong>Idea clave:<\/strong> tener un certificado SSL instalado no garantiza que todo el sitio sea seguro. El certificado es el pasaporte; los recursos cargados por HTTPS son el viaje completo. Sin ambos, el navegador levanta la ceja.<\/p>\n<\/section>\n<section id=\"por-que-importa\">\n<h2>Por qu\u00e9 el contenido mixto da\u00f1a seguridad, SEO y ventas \ud83d\udcc9<\/h2>\n<p>Durante a\u00f1os se trat\u00f3 como un fastidio visual: \u201csolo es un aviso\u201d. Hermosa frase, casi po\u00e9tica, si no fuera porque en comercio electr\u00f3nico un aviso de seguridad puede ser la diferencia entre pagar y huir. La web moderna no perdona estos descuidos, y hace bien.<\/p>\n<h3>1. Rompe la confianza del usuario<\/h3>\n<p>Cuando un navegador muestra \u201cNo seguro\u201d, \u201cLa conexi\u00f3n no es privada\u201d o bloquea partes de la p\u00e1gina, el usuario no distingue entre un icono HTTP mal enlazado y una amenaza real. Para \u00e9l, todo huele a peligro. Y en internet, la sospecha se propaga como humedad en una pared vieja: primero una mancha, luego toda la habitaci\u00f3n.<\/p>\n<h3>2. Puede bloquear funciones cr\u00edticas<\/h3>\n<p>Los navegadores modernos bloquean autom\u00e1ticamente ciertos tipos de contenido mixto, sobre todo los recursos activos: JavaScript, iframes, hojas de estilo, solicitudes <code>fetch<\/code> o <code>XMLHttpRequest<\/code>. Si tu carrito, formulario de contacto, pasarela de pago o panel interactivo depende de uno de esos recursos, la p\u00e1gina no solo se ver\u00e1 mal: puede dejar de funcionar.<\/p>\n<h3>3. Afecta la percepci\u00f3n de marca<\/h3>\n<p>Una marca puede invertir en dise\u00f1o, copywriting, fotograf\u00eda, campa\u00f1as de pago y v\u00eddeos con drones. Luego llega una URL <code>http:\/\/<\/code> olvidada en una imagen de fondo y le pone una bufanda de \u201csitio sospechoso\u201d a todo el escaparate. La iron\u00eda tiene a veces una punter\u00eda cruel.<\/p>\n<h3>4. Influye en SEO t\u00e9cnico<\/h3>\n<p>Google usa HTTPS como se\u00f1al de posicionamiento desde 2014, aunque no sea el factor m\u00e1s pesado. M\u00e1s importante a\u00fan: un sitio con errores de seguridad, recursos bloqueados, redirecciones confusas o mala experiencia de usuario puede empeorar su rastreo, indexaci\u00f3n y conversi\u00f3n org\u00e1nica. El SEO no vive solo de palabras clave; tambi\u00e9n vive de que la p\u00e1gina cargue, funcione y no d\u00e9 miedo.<\/p>\n<h3>5. Puede degradar el rendimiento<\/h3>\n<p>El contenido mixto suele venir acompa\u00f1ado de redirecciones innecesarias: un recurso se solicita por HTTP, el servidor lo manda a HTTPS, el navegador espera, el usuario tambi\u00e9n. Milisegundos aqu\u00ed, milisegundos all\u00e1, y la web acaba caminando como si llevara piedras en los bolsillos.<\/p>\n<\/section>\n<section id=\"tipos\">\n<h2>Tipos de contenido mixto: no todos asustan igual, pero todos importan \ud83d\udd75\ufe0f<\/h2>\n<p>Conviene distinguir entre tipos de recursos porque no todos tienen el mismo riesgo ni reciben el mismo trato del navegador.<\/p>\n<table>\n<thead>\n<tr>\n<th>Tipo<\/th>\n<th>Ejemplos<\/th>\n<th>Riesgo<\/th>\n<th>Comportamiento habitual del navegador<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Contenido mixto activo<\/strong><\/td>\n<td>JavaScript, CSS, iframes, llamadas AJAX, m\u00f3dulos, workers<\/td>\n<td>Alto. Puede modificar el comportamiento de la p\u00e1gina.<\/td>\n<td>Normalmente se bloquea.<\/td>\n<\/tr>\n<tr>\n<td><strong>Contenido mixto pasivo o visual<\/strong><\/td>\n<td>Im\u00e1genes, audio, v\u00eddeo<\/td>\n<td>Medio. Puede filtrar informaci\u00f3n o alterar lo que ve el usuario.<\/td>\n<td>Muchos navegadores intentan actualizarlo autom\u00e1ticamente a HTTPS; si falla, pueden bloquearlo.<\/td>\n<\/tr>\n<tr>\n<td><strong>Descargas mixtas<\/strong><\/td>\n<td>PDF, ZIP, ejecutables, documentos descargados por HTTP desde una p\u00e1gina HTTPS<\/td>\n<td>Variable, pero especialmente delicado en archivos ejecutables.<\/td>\n<td>Cada vez m\u00e1s restringido o advertido por navegadores modernos.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>El contenido activo es el m\u00e1s peligroso porque no solo se muestra: act\u00faa. Un script cargado por HTTP podr\u00eda ser interceptado y alterado por un atacante en una red insegura. Es la diferencia entre una grieta en la pintura y alguien cambiando los planos de la casa mientras duermes.<\/p>\n<p>      <strong>Importante:<\/strong> aunque algunos navegadores intenten convertir autom\u00e1ticamente recursos <code>http:\/\/<\/code> a <code>https:\/\/<\/code>, no debes confiar tu seguridad a ese gesto. Es un cintur\u00f3n de seguridad, no una licencia para conducir contra una pared.<\/p>\n<\/section>\n<section id=\"diagnostico\">\n<h2>C\u00f3mo detectar contenido mixto sin perder la paciencia \ud83d\udd0d<\/h2>\n<p>Antes de corregir, hay que encontrar. Y encontrar bien. Porque el contenido mixto rara vez vive donde uno espera. Puede estar en una imagen destacada, en un widget olvidado, en un archivo CSS minificado, en una opci\u00f3n serializada de WordPress o en un constructor visual que guarda URLs como quien guarda cartas de un antiguo amor.<\/p>\n<h3>1. Usa la consola del navegador<\/h3>\n<p>Abre la p\u00e1gina afectada en Chrome, Edge, Firefox o Safari. Luego entra en las herramientas de desarrollo:<\/p>\n<ul>\n<li>Windows\/Linux: <span>F12<\/span> o <span>Ctrl<\/span> + <span>Shift<\/span> + <span>I<\/span><\/li>\n<li>macOS: <span>Cmd<\/span> + <span>Option<\/span> + <span>I<\/span><\/li>\n<\/ul>\n<p>Ve a la pesta\u00f1a <strong>Console<\/strong>. Los errores suelen aparecer con mensajes como:<\/p>\n<pre><code>Mixed Content: The page at 'https:\/\/tudominio.com\/' was loaded over HTTPS, \nbut requested an insecure script 'http:\/\/tudominio.com\/script.js'. \nThis request has been blocked; the content must be served over HTTPS.<\/code><\/pre>\n<p>Tambi\u00e9n revisa la pesta\u00f1a <strong>Network<\/strong>. Filtra por <code>http:\/\/<\/code> o busca solicitudes bloqueadas. Esta vista permite saber exactamente qu\u00e9 archivo se carga mal y desde qu\u00e9 documento se invoca.<\/p>\n<h3>2. Rastrea el sitio completo<\/h3>\n<p>Un error puede no aparecer en la home, sino en una entrada antigua, una landing de campa\u00f1a o una p\u00e1gina de producto que nadie miraba desde la \u00faltima mudanza de oficina. Para auditor\u00edas profesionales conviene usar herramientas de rastreo:<\/p>\n<ul>\n<li><strong>Screaming Frog SEO Spider<\/strong>: permite rastrear URLs internas y detectar contenido inseguro.<\/li>\n<li><strong>Sitebulb<\/strong>: \u00fatil para auditor\u00edas visuales y t\u00e9cnicas.<\/li>\n<li><strong>Ahrefs Site Audit, Semrush Site Audit o similares<\/strong>: detectan problemas HTTPS en auditor\u00edas recurrentes.<\/li>\n<li><strong>Why No Padlock?<\/strong>: pr\u00e1ctico para comprobaciones r\u00e1pidas de una URL concreta.<\/li>\n<li><strong>Chrome DevTools Lighthouse<\/strong>: aporta pistas sobre seguridad y mejores pr\u00e1cticas.<\/li>\n<\/ul>\n<h3>3. Busca en la base de datos<\/h3>\n<p>En WordPress, Joomla, Drupal o sitios a medida, muchas rutas quedan guardadas en la base de datos. Puedes buscar cadenas como:<\/p>\n<pre><code>http:\/\/tudominio.com\nhttp:\/\/www.tudominio.com\nsrc=\"http:\/\/\nhref=\"http:\/\/\nurl(http:\/\/<\/code><\/pre>\n<p>Pero cuidado: en WordPress algunos datos est\u00e1n serializados. Cambiar texto a mano con un editor SQL puede romper longitudes serializadas y dejar opciones corruptas. Es una de esas soluciones r\u00e1pidas que luego piden disculpas con factura.<\/p>\n<h3>4. Revisa archivos del tema y plugins<\/h3>\n<p>Busca <code>http:\/\/<\/code> en:<\/p>\n<ul>\n<li>Archivos del tema: <code>header.php<\/code>, <code>footer.php<\/code>, <code>functions.php<\/code>, plantillas personalizadas.<\/li>\n<li>Hojas CSS: especialmente fondos con <code>background-image: url(http:\/\/...)<\/code>.<\/li>\n<li>JavaScript: llamadas a APIs antiguas o bibliotecas externas.<\/li>\n<li>Constructores visuales: Elementor, WPBakery, Divi, Beaver Builder, Oxygen, Bricks.<\/li>\n<li>Widgets, men\u00fas, sliders y bloques reutilizables.<\/li>\n<\/ul>\n<p>      <strong>Consejo de campo:<\/strong> si el error aparece solo al pasar el rat\u00f3n, abrir un modal o desplegar un men\u00fa, probablemente el recurso se carga de forma condicional mediante JavaScript. No basta con mirar la carga inicial.<\/p>\n<\/section>\n<section id=\"wordpress\">\n<h2>C\u00f3mo solucionar contenido mixto en WordPress paso a paso \u2699\ufe0f<\/h2>\n<p>WordPress no es el culpable universal, aunque a veces se esfuerce en parecerlo. Es flexible, popular y extensible; precisamente por eso puede acumular rutas antiguas en m\u00e1s rincones que una casa familiar antes de una mudanza.<\/p>\n<h3>1. Haz una copia de seguridad antes de tocar nada<\/h3>\n<p>Antes de cambiar URLs en base de datos, configuraci\u00f3n del servidor o plugins de cach\u00e9, crea una copia completa:<\/p>\n<ul>\n<li>Archivos del sitio.<\/li>\n<li>Base de datos.<\/li>\n<li>Configuraci\u00f3n del servidor si tienes acceso.<\/li>\n<li>Reglas de CDN o firewall.<\/li>\n<\/ul>\n<p>Idealmente trabaja primero en un entorno de staging. Arreglar HTTPS directamente en producci\u00f3n puede salir bien. Tambi\u00e9n puede convertirse en una tarde larga con caf\u00e9 fr\u00edo, pesta\u00f1as abiertas y una mirada fija al infinito. Lo he visto; no era bonito. Me record\u00f3 a una vez que intent\u00e9 arreglar una cafetera \u201csolo apretando una pieza\u201d y termin\u00e9 aprendiendo m\u00e1s sobre juntas de goma de lo que cualquier ciudadano decente deber\u00eda saber.<\/p>\n<h3>2. Verifica las URLs de WordPress<\/h3>\n<p>En el panel de administraci\u00f3n ve a <strong>Ajustes &gt; Generales<\/strong> y confirma que estas dos direcciones usan HTTPS:<\/p>\n<ul>\n<li><strong>Direcci\u00f3n de WordPress (URL)<\/strong><\/li>\n<li><strong>Direcci\u00f3n del sitio (URL)<\/strong><\/li>\n<\/ul>\n<p>Deben verse as\u00ed:<\/p>\n<pre><code>https:\/\/tudominio.com\nhttps:\/\/www.tudominio.com<\/code><\/pre>\n<p>Si no puedes acceder al panel, revisa <code>wp-config.php<\/code>. En algunos sitios se definen ah\u00ed:<\/p>\n<pre><code>define('WP_HOME', 'https:\/\/tudominio.com');\ndefine('WP_SITEURL', 'https:\/\/tudominio.com');<\/code><\/pre>\n<h3>3. Fuerza HTTPS en el \u00e1rea de administraci\u00f3n<\/h3>\n<p>Para asegurar que el panel de WordPress use SSL, puedes a\u00f1adir en <code>wp-config.php<\/code>:<\/p>\n<pre><code>define('FORCE_SSL_ADMIN', true);<\/code><\/pre>\n<p>Esto no corrige por s\u00ed solo todo el contenido mixto del front-end, pero evita que la administraci\u00f3n viaje por caminos inseguros.<\/p>\n<h3>4. Sustituye URLs antiguas en la base de datos<\/h3>\n<p>La soluci\u00f3n m\u00e1s com\u00fan consiste en reemplazar referencias internas <code>http:\/\/tudominio.com<\/code> por <code>https:\/\/tudominio.com<\/code>. Puedes hacerlo con herramientas seguras para datos serializados:<\/p>\n<ul>\n<li><strong>Better Search Replace<\/strong>: plugin popular para reemplazos controlados.<\/li>\n<li><strong>WP-CLI search-replace<\/strong>: opci\u00f3n excelente para desarrolladores.<\/li>\n<li><strong>Interconnect\/it Search Replace DB<\/strong>: herramienta cl\u00e1sica, potente, que debe eliminarse del servidor al terminar.<\/li>\n<\/ul>\n<p>Con WP-CLI, el comando ser\u00eda algo como:<\/p>\n<pre><code>wp search-replace 'http:\/\/tudominio.com' 'https:\/\/tudominio.com' --all-tables --precise --dry-run<\/code><\/pre>\n<p>Primero usa <code>--dry-run<\/code> para simular. Si el resultado tiene sentido:<\/p>\n<pre><code>wp search-replace 'http:\/\/tudominio.com' 'https:\/\/tudominio.com' --all-tables --precise<\/code><\/pre>\n<p>      <strong>No reemplaces a ciegas todas las apariciones de <code>http:\/\/<\/code>.<\/strong> Algunas pueden apuntar a sitios externos que no tienen HTTPS o a APIs que requieren revisi\u00f3n individual. Cambia primero tu dominio y luego audita terceros.<\/p>\n<h3>5. Actualiza medios, widgets y constructores visuales<\/h3>\n<p>Muchos errores sobreviven al reemplazo general porque est\u00e1n en configuraciones especiales. Revisa:<\/p>\n<ul>\n<li>Biblioteca de medios y URLs insertadas manualmente.<\/li>\n<li>Widgets HTML personalizados.<\/li>\n<li>Cabeceras y pies creados con constructores.<\/li>\n<li>Plantillas globales de Elementor, Divi, WPBakery u otros builders.<\/li>\n<li>Sliders, galer\u00edas y m\u00f3dulos de testimonios.<\/li>\n<li>Popups, banners de cookies, barras promocionales y formularios embebidos.<\/li>\n<\/ul>\n<p>En Elementor, por ejemplo, existe una herramienta \u00fatil en <strong>Elementor &gt; Herramientas &gt; Reemplazar URL<\/strong>. Tambi\u00e9n conviene regenerar CSS desde esa misma secci\u00f3n si los estilos quedaron con rutas antiguas.<\/p>\n<h3>6. Vac\u00eda todas las cach\u00e9s<\/h3>\n<p>Despu\u00e9s de corregir URLs, limpia:<\/p>\n<ul>\n<li>Cach\u00e9 del plugin: WP Rocket, LiteSpeed Cache, W3 Total Cache, WP Super Cache, etc.<\/li>\n<li>Cach\u00e9 del servidor.<\/li>\n<li>Cach\u00e9 de CDN: Cloudflare, Bunny CDN, Fastly, Akamai.<\/li>\n<li>Cach\u00e9 del navegador al probar.<\/li>\n<li>CSS y JavaScript generados por constructores visuales.<\/li>\n<\/ul>\n<p>He visto sitios \u201carreglados\u201d durante dos horas que segu\u00edan fallando solo porque Cloudflare serv\u00eda una versi\u00f3n vieja. La cach\u00e9 es maravillosa cuando acelera y un peque\u00f1o fantasma burocr\u00e1tico cuando no se purga.<\/p>\n<h3>7. Usa un plugin de SSL solo como apoyo, no como muleta eterna<\/h3>\n<p>Plugins como <strong>Really Simple SSL<\/strong> pueden ayudar a detectar y mitigar contenido mixto. Algunos aplican filtros para convertir URLs en tiempo de ejecuci\u00f3n. Es pr\u00e1ctico, sobre todo en migraciones r\u00e1pidas.<\/p>\n<p>Pero en un sitio profesional, lo ideal es corregir la fuente del problema: base de datos, tema, plugins, CDN o plantilla. Un plugin que maquilla URLs en cada carga puede a\u00f1adir complejidad y ocultar errores reales. La web debe estar sana, no solo bien iluminada.<\/p>\n<\/section>\n<section id=\"servidor\">\n<h2>Soluciones en servidor: redirecciones, cabeceras y configuraci\u00f3n robusta \ud83d\udee1\ufe0f<\/h2>\n<p>Una vez corregidos los enlaces internos, hay que asegurarse de que el servidor empuje todo hacia HTTPS con disciplina. Sin fanatismo, pero sin ambig\u00fcedad.<\/p>\n<h3>Redirecci\u00f3n 301 de HTTP a HTTPS en Apache<\/h3>\n<p>En un servidor Apache, puedes usar reglas en <code>.htaccess<\/code>:<\/p>\n<pre><code>&lt;IfModule mod_rewrite.c&gt;\nRewriteEngine On\nRewriteCond %{HTTPS} !=on\nRewriteRule ^ https:\/\/%{HTTP_HOST}%{REQUEST_URI} [L,R=301]\n&lt;\/IfModule&gt;<\/code><\/pre>\n<p>Si usas WordPress, coloca la regla con cuidado para no romper las reglas generadas por el propio CMS. Y evita cadenas de redirecciones: de <code>http:\/\/<\/code> a <code>https:\/\/<\/code>, de sin www a con www, de una barra a otra\u2026 Cada salto es una peque\u00f1a p\u00e9rdida de tiempo.<\/p>\n<h3>Redirecci\u00f3n en Nginx<\/h3>\n<p>En Nginx, la configuraci\u00f3n suele hacerse con un bloque de servidor:<\/p>\n<pre><code>server {\n    listen 80;\n    server_name tudominio.com www.tudominio.com;\n    return 301 https:\/\/tudominio.com$request_uri;\n}<\/code><\/pre>\n<p>Luego el bloque HTTPS debe servir el sitio con certificado v\u00e1lido:<\/p>\n<pre><code>server {\n    listen 443 ssl http2;\n    server_name tudominio.com;\n\n    ssl_certificate \/ruta\/al\/certificado.crt;\n    ssl_certificate_key \/ruta\/a\/la\/clave.key;\n\n    root \/ruta\/a\/tu\/sitio;\n    index index.php index.html;\n}<\/code><\/pre>\n<h3>Cabecera Content-Security-Policy: upgrade-insecure-requests<\/h3>\n<p>Una medida \u00fatil es a\u00f1adir la directiva <code>upgrade-insecure-requests<\/code> mediante Content Security Policy. Indica al navegador que intente convertir solicitudes HTTP a HTTPS autom\u00e1ticamente.<\/p>\n<pre><code>Content-Security-Policy: upgrade-insecure-requests;<\/code><\/pre>\n<p>En Apache:<\/p>\n<pre><code>&lt;IfModule mod_headers.c&gt;\nHeader always set Content-Security-Policy \"upgrade-insecure-requests\"\n&lt;\/IfModule&gt;<\/code><\/pre>\n<p>En Nginx:<\/p>\n<pre><code>add_header Content-Security-Policy \"upgrade-insecure-requests\" always;<\/code><\/pre>\n<p>      <strong>Matiz importante:<\/strong> esta cabecera ayuda, pero no sustituye una auditor\u00eda. Si un recurso externo no existe en HTTPS, fallar\u00e1. Es mejor que falle a que viaje inseguro, s\u00ed, pero conviene saberlo antes de que lo descubra el cliente.<\/p>\n<h3>HSTS: poderoso, pero no lo actives a ciegas<\/h3>\n<p><strong>HTTP Strict Transport Security<\/strong> o <strong>HSTS<\/strong> obliga al navegador a conectarse siempre por HTTPS durante un periodo determinado. Es una gran capa de seguridad cuando el sitio est\u00e1 correctamente configurado.<\/p>\n<pre><code>Strict-Transport-Security: max-age=31536000; includeSubDomains; preload<\/code><\/pre>\n<p>Pero cuidado. HSTS no es un ambientador para tapar malos olores. Si tienes subdominios sin HTTPS, aplicaciones antiguas o recursos mal configurados, puedes bloquear accesos leg\u00edtimos. Antes de usar <code>includeSubDomains<\/code> o solicitar inclusi\u00f3n en la lista <code>preload<\/code>, verifica absolutamente todo: dominio principal, subdominios, CDN, APIs, paneles, entornos de cliente y servicios heredados.<\/p>\n<h3>Configuraci\u00f3n correcta del CDN<\/h3>\n<p>Si usas Cloudflare u otro CDN, revisa:<\/p>\n<ul>\n<li>Modo SSL\/TLS. En Cloudflare, lo recomendable suele ser <strong>Full (strict)<\/strong>, no <strong>Flexible<\/strong>.<\/li>\n<li>Redirecci\u00f3n autom\u00e1tica a HTTPS.<\/li>\n<li>Reglas de transformaci\u00f3n de URL.<\/li>\n<li>Cach\u00e9 de recursos antiguos.<\/li>\n<li>Certificados en el origen y en el borde.<\/li>\n<\/ul>\n<p>El modo \u201cFlexible\u201d puede parecer c\u00f3modo porque cifra entre visitante y CDN, pero no necesariamente entre CDN y servidor de origen. Es una especie de paraguas elegante con un agujero justo encima de la cabeza. Para un sitio serio, usa certificado v\u00e1lido en el origen y conexi\u00f3n cifrada completa.<\/p>\n<\/section>\n<section id=\"terceros\">\n<h2>Recursos externos: el enemigo amable que viene con logo conocido \ud83c\udf10<\/h2>\n<p>No todo contenido mixto nace dentro de tu web. A veces llega desde servicios externos: fuentes, mapas, v\u00eddeos, p\u00edxeles de seguimiento, chatbots, sistemas de reservas, pasarelas antiguas, widgets meteorol\u00f3gicos \u2014s\u00ed, todav\u00eda existen\u2014 o scripts de afiliaci\u00f3n.<\/p>\n<h3>Qu\u00e9 revisar en servicios de terceros<\/h3>\n<ul>\n<li><strong>Google Fonts:<\/strong> usa siempre URLs HTTPS o, mejor a\u00fan, considera alojar fuentes localmente si encaja con tu estrategia de rendimiento y privacidad.<\/li>\n<li><strong>Google Maps:<\/strong> actualiza c\u00f3digos embed antiguos.<\/li>\n<li><strong>YouTube\/Vimeo:<\/strong> revisa iframes insertados hace a\u00f1os.<\/li>\n<li><strong>Herramientas de chat:<\/strong> algunos snippets antiguos cargan scripts por HTTP.<\/li>\n<li><strong>Pasarelas de pago:<\/strong> nunca aceptes recursos HTTP en procesos de checkout.<\/li>\n<li><strong>Scripts de anal\u00edtica:<\/strong> actualiza etiquetas antiguas de Google Analytics, Tag Manager, Meta Pixel u otras plataformas.<\/li>\n<li><strong>CDNs de librer\u00edas:<\/strong> jQuery, Bootstrap, Font Awesome o similares deben cargarse por HTTPS y preferiblemente con versiones controladas.<\/li>\n<\/ul>\n<h3>\u00bfY si el proveedor no ofrece HTTPS?<\/h3>\n<p>Entonces tienes tres opciones:<\/p>\n<ol>\n<li>Eliminar ese recurso.<\/li>\n<li>Buscar un proveedor alternativo.<\/li>\n<li>Alojar localmente el archivo si la licencia lo permite y si no rompe actualizaciones o t\u00e9rminos de servicio.<\/li>\n<\/ol>\n<p>Lo que no deber\u00edas hacer es mantener un recurso HTTP porque \u201csiempre ha funcionado\u201d. Tambi\u00e9n funcionaban los m\u00f3dems de 56k, y nadie sensato quiere volver a escuchar ese canto met\u00e1lico salvo por nostalgia arqueol\u00f3gica.<\/p>\n<\/section>\n<section>\n<h2>Casos habituales y soluciones r\u00e1pidas \ud83e\uddf0<\/h2>\n<h3>Im\u00e1genes con HTTP \ud83d\uddbc\ufe0f<\/h3>\n<p><strong>S\u00edntoma:<\/strong> el candado no aparece o la consola muestra im\u00e1genes inseguras.<\/p>\n<p><strong>Soluci\u00f3n:<\/strong> reemplaza URLs en la base de datos, actualiza la biblioteca de medios, revisa CSS con fondos y limpia cach\u00e9.<\/p>\n<h3>CSS bloqueado \ud83c\udfa8<\/h3>\n<p><strong>S\u00edntoma:<\/strong> la p\u00e1gina carga sin estilos o rota visualmente.<\/p>\n<p><strong>Soluci\u00f3n:<\/strong> corrige enlaces a hojas de estilo, regenera CSS del constructor visual y revisa rutas en el tema.<\/p>\n<h3>JavaScript bloqueado \u26a1<\/h3>\n<p><strong>S\u00edntoma:<\/strong> men\u00fas, sliders, formularios o carritos dejan de funcionar.<\/p>\n<p><strong>Soluci\u00f3n:<\/strong> cambia scripts a HTTPS, actualiza plugins y elimina librer\u00edas externas antiguas.<\/p>\n<h3>Fuentes que no cargan \ud83d\udd24<\/h3>\n<p><strong>S\u00edntoma:<\/strong> tipograf\u00edas sustituidas o errores CORS junto a contenido mixto.<\/p>\n<p><strong>Soluci\u00f3n:<\/strong> usa HTTPS, revisa cabeceras CORS si alojas fuentes en CDN y purga cach\u00e9.<\/p>\n<h3>Checkout con aviso de seguridad \ud83d\udcb3<\/h3>\n<p><strong>S\u00edntoma:<\/strong> el usuario abandona antes de pagar.<\/p>\n<p><strong>Soluci\u00f3n:<\/strong> audita toda la p\u00e1gina de pago, scripts de pasarela, sellos de confianza, p\u00edxeles y recursos de terceros.<\/p>\n<h3>Solo falla en m\u00f3vil \ud83d\udcf1<\/h3>\n<p><strong>S\u00edntoma:<\/strong> el error aparece en versi\u00f3n responsive o AMP.<\/p>\n<p><strong>Soluci\u00f3n:<\/strong> revisa plantillas m\u00f3viles, plugins AMP, banners espec\u00edficos y carga condicional por dispositivo.<\/p>\n<\/section>\n<section>\n<h2>C\u00f3mo comprobar que el problema qued\u00f3 resuelto \u2705<\/h2>\n<p>Despu\u00e9s de aplicar cambios, no basta con mirar la p\u00e1gina principal y sonre\u00edr con moderado optimismo. Hay que verificar de forma met\u00f3dica.<\/p>\n<ol>\n<li><strong>Abre la consola del navegador<\/strong> y confirma que no haya errores de mixed content.<\/li>\n<li><strong>Prueba varias p\u00e1ginas:<\/strong> home, entradas, categor\u00edas, productos, checkout, formularios, landings y p\u00e1ginas antiguas con tr\u00e1fico.<\/li>\n<li><strong>Ejecuta un rastreo completo<\/strong> con una herramienta SEO t\u00e9cnica.<\/li>\n<li><strong>Revisa el certificado SSL<\/strong> con herramientas como SSL Labs para detectar problemas de cadena, protocolos obsoletos o configuraci\u00f3n d\u00e9bil.<\/li>\n<li><strong>Comprueba redirecciones<\/strong> para evitar saltos innecesarios.<\/li>\n<li><strong>Vac\u00eda cach\u00e9<\/strong> y prueba en ventana privada o con perfiles limpios.<\/li>\n<li><strong>Monitoriza Search Console<\/strong> y anal\u00edtica para detectar ca\u00eddas an\u00f3malas.<\/li>\n<\/ol>\n<p>Una buena prueba consiste en buscar directamente en el c\u00f3digo fuente renderizado y en la base de datos cadenas <code>http:\/\/tudominio.com<\/code>. Si aparecen, no siempre ser\u00e1n un problema \u2014pueden estar en texto plano, comentarios o referencias hist\u00f3ricas\u2014, pero merecen revisi\u00f3n.<\/p>\n<\/section>\n<section id=\"prevencion\">\n<h2>C\u00f3mo evitar que el contenido mixto vuelva como una mala costumbre \ud83e\uddf1<\/h2>\n<p>Arreglar contenido mixto una vez est\u00e1 bien. Evitar que regrese es mejor. La diferencia entre apagar incendios y construir con materiales ign\u00edfugos es, en el fondo, la diferencia entre mantenimiento reactivo y gesti\u00f3n profesional.<\/p>\n<h3>1. Usa URLs relativas o funciones nativas del CMS<\/h3>\n<p>En temas de WordPress, evita escribir rutas absolutas manuales cuando puedas usar funciones como:<\/p>\n<pre><code>echo esc_url( get_template_directory_uri() . '\/assets\/img\/logo.svg' );<\/code><\/pre>\n<p>WordPress generar\u00e1 la URL correcta seg\u00fan la configuraci\u00f3n del sitio. Menos texto duro, menos futuros dolores.<\/p>\n<h3>2. Establece un flujo de publicaci\u00f3n seguro<\/h3>\n<p>Si varios editores publican contenido, crea una regla simple: no insertar recursos que empiecen por <code>http:\/\/<\/code>. Puede parecer obvio, pero muchas tragedias t\u00e9cnicas empiezan con frases obvias que nadie escribi\u00f3.<\/p>\n<h3>3. Automatiza auditor\u00edas<\/h3>\n<p>Programa revisiones peri\u00f3dicas con herramientas de rastreo o monitores de seguridad. Para sitios de alto tr\u00e1fico, ecommerce o membres\u00edas, conviene auditar despu\u00e9s de:<\/p>\n<ul>\n<li>Cambios de tema.<\/li>\n<li>Actualizaciones grandes de plugins.<\/li>\n<li>Migraciones de hosting.<\/li>\n<li>Activaci\u00f3n de CDN.<\/li>\n<li>Redise\u00f1os o nuevas landings.<\/li>\n<li>Importaciones masivas de contenido.<\/li>\n<\/ul>\n<h3>4. Mant\u00e9n plugins y temas actualizados<\/h3>\n<p>Los plugins antiguos pueden cargar librer\u00edas inseguras o depender de endpoints HTTP. Actualizar no es solo una cuesti\u00f3n de nuevas funciones; a menudo es una cuesti\u00f3n de higiene. Como lavarse las manos, pero con menos espuma y m\u00e1s changelogs.<\/p>\n<h3>5. Documenta la configuraci\u00f3n HTTPS<\/h3>\n<p>Guarda un peque\u00f1o documento t\u00e9cnico con:<\/p>\n<ul>\n<li>Proveedor del certificado SSL.<\/li>\n<li>Fecha de renovaci\u00f3n autom\u00e1tica.<\/li>\n<li>Reglas de redirecci\u00f3n.<\/li>\n<li>Configuraci\u00f3n del CDN.<\/li>\n<li>Cabeceras de seguridad activas.<\/li>\n<li>Procedimiento para purgar cach\u00e9.<\/li>\n<li>Herramientas de auditor\u00eda usadas.<\/li>\n<\/ul>\n<p>La documentaci\u00f3n suele parecer innecesaria hasta que alguien la necesita un viernes por la tarde. Entonces se vuelve literatura sagrada.<\/p>\n<\/section>\n<section>\n<h2>Cabeceras de seguridad recomendadas junto con HTTPS \ud83e\udded<\/h2>\n<p>Resolver contenido mixto es parte de una estrategia mayor de seguridad web. Sin convertir esto en una enciclopedia de cabeceras HTTP, estas son algunas que suelen acompa\u00f1ar bien a un sitio HTTPS moderno:<\/p>\n<table>\n<thead>\n<tr>\n<th>Cabecera<\/th>\n<th>Funci\u00f3n<\/th>\n<th>Precauci\u00f3n<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>Strict-Transport-Security<\/code><\/td>\n<td>Obliga a usar HTTPS durante un periodo definido.<\/td>\n<td>Act\u00edvala solo cuando todo el sitio y subdominios est\u00e9n listos.<\/td>\n<\/tr>\n<tr>\n<td><code>Content-Security-Policy<\/code><\/td>\n<td>Controla qu\u00e9 recursos puede cargar la p\u00e1gina.<\/td>\n<td>Una pol\u00edtica demasiado estricta puede romper scripts leg\u00edtimos.<\/td>\n<\/tr>\n<tr>\n<td><code>X-Content-Type-Options<\/code><\/td>\n<td>Reduce riesgos de interpretaci\u00f3n incorrecta de tipos MIME.<\/td>\n<td>Generalmente segura con valor <code>nosniff<\/code>.<\/td>\n<\/tr>\n<tr>\n<td><code>Referrer-Policy<\/code><\/td>\n<td>Controla cu\u00e1nta informaci\u00f3n de referencia se env\u00eda a otros sitios.<\/td>\n<td>Elige una pol\u00edtica compatible con anal\u00edtica y privacidad.<\/td>\n<\/tr>\n<tr>\n<td><code>Permissions-Policy<\/code><\/td>\n<td>Limita acceso a funciones del navegador como c\u00e1mara, micr\u00f3fono o geolocalizaci\u00f3n.<\/td>\n<td>Debe configurarse seg\u00fan las necesidades reales del sitio.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Una pol\u00edtica CSP m\u00e1s completa puede ayudarte a impedir cargas inseguras y controlar or\u00edgenes permitidos. Por ejemplo:<\/p>\n<pre><code>Content-Security-Policy: \n  default-src 'self'; \n  img-src 'self' https: data:; \n  script-src 'self' https:\/\/www.googletagmanager.com; \n  style-src 'self' 'unsafe-inline' https:; \n  upgrade-insecure-requests;<\/code><\/pre>\n<p>No copies una CSP compleja sin probar. Primero usa el modo de reporte si es posible:<\/p>\n<pre><code>Content-Security-Policy-Report-Only: upgrade-insecure-requests; report-uri https:\/\/tudominio.com\/csp-report<\/code><\/pre>\n<p>As\u00ed puedes observar qu\u00e9 se romper\u00eda antes de imponer la norma. Es una manera civilizada de discutir con el navegador antes de darle autoridad absoluta.<\/p>\n<\/section>\n<section id=\"checklist\">\n<h2>Checklist final para eliminar contenido mixto HTTP\/HTTPS \ud83d\udcdd<\/h2>\n<p>Si quieres una ruta clara, aqu\u00ed va una lista directa. Sin incienso t\u00e9cnico.<\/p>\n<ul>\n<li>Instalar y verificar un certificado SSL v\u00e1lido.<\/li>\n<li>Configurar WordPress y el sitio para usar <code>https:\/\/<\/code> en todas sus URLs principales.<\/li>\n<li>Redirigir todo el tr\u00e1fico HTTP a HTTPS con redirecciones 301.<\/li>\n<li>Buscar y reemplazar URLs internas antiguas en la base de datos con una herramienta segura.<\/li>\n<li>Revisar im\u00e1genes, CSS, JavaScript, iframes, fuentes y archivos descargables.<\/li>\n<li>Actualizar c\u00f3digos embed antiguos de mapas, v\u00eddeos, chats y formularios externos.<\/li>\n<li>Corregir rutas en temas, plugins, widgets y constructores visuales.<\/li>\n<li>Regenerar CSS y archivos est\u00e1ticos si usas Elementor, Divi u otro builder.<\/li>\n<li>Limpiar cach\u00e9s de WordPress, servidor, CDN y navegador.<\/li>\n<li>Auditar la web completa con consola del navegador y herramientas de rastreo.<\/li>\n<li>Activar <code>upgrade-insecure-requests<\/code> si encaja con tu configuraci\u00f3n.<\/li>\n<li>Considerar HSTS solo despu\u00e9s de verificar dominio y subdominios.<\/li>\n<li>Documentar la configuraci\u00f3n para futuras migraciones o actualizaciones.<\/li>\n<\/ul>\n<p>      Un sitio HTTPS con contenido mixto no es exactamente inseguro en todos sus rincones, pero tampoco es plenamente confiable. Vive en esa zona inc\u00f3moda entre la promesa y la sospecha, donde los navegadores ponen se\u00f1ales amarillas y los usuarios pisan el freno.<\/p>\n<h2>Una web segura tambi\u00e9n se siente segura \ud83c\udf3f<\/h2>\n<p>Solucionar problemas de contenido mixto no consiste solo en recuperar el candado del navegador. Consiste en alinear la parte visible y la invisible de tu sitio: lo que el usuario percibe y lo que el servidor entrega; la belleza del dise\u00f1o y la sobriedad de la infraestructura; el escaparate y los cimientos.<\/p>\n<p>La web actual exige esa doble lealtad. Debe ser r\u00e1pida y cuidadosa, elegante y verificable, persuasiva y t\u00e9cnicamente honesta. En ese contraste \u2014lo humano y lo criptogr\u00e1fico, la confianza emocional y el cifrado matem\u00e1tico\u2014 se decide buena parte de la experiencia digital.<\/p>\n<p>Si tu sitio muestra avisos de contenido mixto, no lo dejes para \u201ccuando haya tiempo\u201d. El tiempo, en seguridad web, suele llegar disfrazado de incidente. Revisa, corrige, purga, prueba y documenta. Tus visitantes quiz\u00e1 nunca sepan que lo hiciste. Ese es precisamente el mejor resultado: que naveguen tranquilos, compren sin sobresaltos y sientan que tu web es una casa con las luces encendidas y las puertas bien cerradas. \ud83d\udd10<\/p>\n<\/section>\n<\/article>\n","protected":false},"excerpt":{"rendered":"<p>\u00bfC\u00f3mo solucionar problemas de contenido mixto HTTP\/HTTPS que asustan a tus visitantes? \ud83d\udd12 El contenido<\/p>\n","protected":false},"author":1,"featured_media":3952,"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-3953","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\/3953","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=3953"}],"version-history":[{"count":1,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/posts\/3953\/revisions"}],"predecessor-version":[{"id":3954,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/posts\/3953\/revisions\/3954"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/media\/3952"}],"wp:attachment":[{"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/media?parent=3953"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/categories?post=3953"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mantenimientoweb.pro\/blog\/wp-json\/wp\/v2\/tags?post=3953"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}