Os avisos de conteúdo misto são um dos problemas mais comuns enfrentados pelos proprietários de sites WordPress após mudar de HTTP para HTTPS. Eles ocorrem quando seu site é carregado por uma conexão HTTPS segura, mas alguns recursos da página (imagens, scripts, folhas de estilo, iframes) ainda são solicitados via HTTP simples. Os navegadores tratam isso como um risco de segurança, e com razão. A boa notícia é que o conteúdo misto é fácil de corrigir uma vez que você entenda de onde vem.
Como os avisos de conteúdo misto aparecem no seu navegador
Quando uma página tem conteúdo misto, os navegadores reagem de maneiras diferentes dependendo do tipo de recurso. Para conteúdo misto "ativo" (scripts, iframes, folhas de estilo), a maioria dos navegadores bloqueia o recurso por completo e mostra um aviso no console do desenvolvedor. Para conteúdo misto "passivo" (imagens, áudio, vídeo), o recurso ainda pode ser carregado, mas o ícone do cadeado na barra de endereço pode desaparecer ou exibir um triângulo de aviso.
No Chrome, você verá mensagens como "Mixed Content: The page at 'https://example.com' was loaded over HTTPS, but requested an insecure resource" no console. O Firefox exibe um cadeado cinza com um triângulo de aviso. O Safari pode bloquear silenciosamente alguns recursos sem feedback visual evidente, o que dificulta o diagnóstico.
O resultado prático é que seu site parece quebrado para os visitantes. As imagens podem não carregar, os estilos podem estar ausentes e os scripts podem falhar ao serem executados. Pior, o Google considera o HTTPS um sinal de classificação, então problemas de conteúdo misto podem prejudicar indiretamente seu SEO.
Como encontrar todas as fontes de conteúdo misto em seu site
Antes de corrigir qualquer coisa, você precisa de uma lista completa dos recursos HTTP que estão sendo carregados. Há várias maneiras confiáveis de fazer isso:
- Varredura do InspectWP: Execute uma varredura no seu site. A seção HTML lista todas as URLs inseguras encontradas na página, fornecendo um inventário claro do que precisa ser corrigido.
- Console do DevTools do navegador: Abra as ferramentas de desenvolvedor do seu navegador (F12 ou Cmd+Shift+I no Mac), vá para a aba Console e recarregue a página. Cada aviso de conteúdo misto aparecerá ali com a URL exata do recurso problemático.
- Ferramenta Why No Padlock: Visite whynopadlock.com e insira sua URL. Ela rastreia a página e relata todos os recursos inseguros em uma lista simples.
- Teste do SSL Labs: Embora seja primariamente para verificar seu certificado SSL, o teste Qualys SSL Labs também pode sinalizar problemas de conteúdo misto.
Para sites com muitas páginas, talvez seja interessante verificar mais do que apenas a página inicial. Teste páginas de destino importantes, posts de blog (especialmente os mais antigos) e quaisquer páginas com mídia incorporada ou conteúdo de terceiros.
Causas comuns de conteúdo misto no WordPress
O conteúdo misto raramente vem de uma única fonte. Aqui estão os culpados mais frequentes:
- URLs HTTP fixas no conteúdo dos posts: Se você criou posts e páginas antes de mudar para HTTPS, todas as URLs de imagens, links e mídia incorporada no editor de conteúdo ainda usarão
http://. O WordPress armazena essas URLs como absolutas no banco de dados. - Arquivos de tema com URLs fixas: Alguns temas codificam caminhos de imagem ou URLs de recursos externos com
http://em vez de usar URLs relativas ao protocolo ou funções do WordPress. - Recursos de plugins: Plugins antigos ou mal mantidos podem enfileirar seus arquivos CSS e JavaScript usando URLs HTTP.
- Incorporações externas e iframes: Incorporações do Google Maps, vídeos do YouTube (códigos de incorporação antigos), widgets de redes sociais e scripts de publicidade às vezes usam HTTP.
- CSS personalizado ou conteúdo de widget: Imagens de fundo, importações de fontes ou outros recursos especificados em campos de CSS personalizados ou widgets de texto.
- Configuração de CDN: Se você usa um CDN, ele pode estar configurado para servir os ativos via HTTP em vez de HTTPS.
Passo 1: Atualizar as URLs do WordPress e do site
Antes de qualquer coisa, certifique-se de que as URLs principais do WordPress estejam corretas. Vá em Configurações, depois Geral e verifique se tanto o Endereço do WordPress (URL) quanto o Endereço do Site (URL) começam com https://. Se ainda exibirem http://, atualize-os e salve. Isso diz ao WordPress para gerar todos os links internos usando HTTPS.
Passo 2: Pesquisar e substituir URLs HTTP no banco de dados
A correção mais eficaz para a grande maioria dos conteúdos mistos é uma pesquisa e substituição em todo o banco de dados. Isso captura URLs fixas em posts, páginas, texto de widgets, campos personalizados, opções de tema e dados serializados.
Usando o WP-CLI (o método recomendado para quem se sente confortável com a linha de comando):
# Sempre execute uma simulação primeiro para ver o que será alterado
wp search-replace 'http://example.com' 'https://example.com' --all-tables --dry-run
# Verifique a saída cuidadosamente, depois execute de verdade
wp search-replace 'http://example.com' 'https://example.com' --all-tables
# Se seu site também usa o subdomínio www, execute as duas variações
wp search-replace 'http://www.example.com' 'https://www.example.com' --all-tablesO WP-CLI lida corretamente com dados serializados, o que é fundamental. Muitos plugins armazenam configurações como arrays serializados no banco de dados, e uma busca-e-substituição SQL ingênua quebraria o formato de serialização.
Corrigindo conteúdo misto com o plugin Better Search Replace
Se você não tem acesso à linha de comando, o plugin Better Search Replace oferece uma alternativa amigável:
- Instale e ative o Better Search Replace a partir do diretório de plugins do WordPress.
- Vá em Ferramentas, depois Better Search Replace.
- No campo "Search for", insira
http://example.com(seu domínio real). - No campo "Replace with", insira
https://example.com. - Selecione todas as tabelas na lista (Ctrl+A ou Cmd+A).
- Marque "Run as dry run" primeiro e clique em "Run Search/Replace".
- Revise os resultados. Se as substituições parecerem corretas, desmarque "Run as dry run" e execute novamente.
Após a substituição, limpe quaisquer plugins de cache e verifique seu site novamente.
Usando o Really Simple SSL como solução rápida
O plugin Really Simple SSL adota uma abordagem diferente. Em vez de corrigir as URLs no banco de dados, ele reescreve dinamicamente as URLs HTTP para HTTPS em tempo real, usando buffer de saída e filtros do WordPress. Instale-o, ative-o e ele cuida do resto automaticamente.
Funciona bem como solução imediata, mas adiciona uma pequena sobrecarga de processamento a cada carregamento de página. Para o melhor desempenho, é melhor corrigir as URLs na origem (no banco de dados) e, em seguida, desativar o plugin. Pense no Really Simple SSL como uma rede de segurança, e não como uma solução permanente.
Corrigindo arquivos de tema e plugin manualmente
Parte do conteúdo misto vem de URLs fixas em arquivos de tema ou plugin, e não do banco de dados. Pesquise no diretório do tema ativo por referências a http://:
# Pesquise por URLs HTTP fixas em seu tema
grep -r "http://" /path/to/wp-content/themes/your-theme/ --include="*.php" --include="*.css" --include="*.js"Substitua qualquer URL HTTP fixa por HTTPS, ou melhor ainda, use URLs relativas ao protocolo (//example.com/resource.js) ou funções do WordPress como esc_url() que respeitam a configuração de protocolo do site.
Para plugins de terceiros, não edite os arquivos do plugin diretamente (as atualizações sobrescreverão suas alterações). Em vez disso, entre em contato com o autor do plugin ou procure uma versão mais recente que suporte HTTPS. Se um plugin carrega ativos via HTTP de forma persistente, considere substituí-lo por uma alternativa melhor mantida.
Adicionando um redirecionamento de HTTP para HTTPS
Após corrigir todo o conteúdo misto no banco de dados e nos arquivos, configure um redirecionamento no nível do servidor para que quaisquer requisições HTTP restantes sejam encaminhadas automaticamente para HTTPS:
# Adicione ao .htaccess (Apache)
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]Para servidores Nginx, adicione isto ao seu bloco server:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}Forçar HTTPS em wp-config.php
Se o seu site estiver atrás de um proxy reverso ou balanceador de carga, o WordPress pode não detectar HTTPS corretamente. Adicione o seguinte ao seu arquivo wp-config.php:
define('FORCE_SSL_ADMIN', true);
// Se estiver atrás de um proxy reverso ou balanceador de carga
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
$_SERVER['HTTPS'] = 'on';
}Verificando suas correções e prevenindo conteúdo misto futuro
Após fazer todas as alterações, execute uma nova varredura no InspectWP. A lista de URLs inseguras na seção HTML deve estar vazia. Também abra o console do desenvolvedor do navegador e confirme que nenhum aviso de conteúdo misto aparece.
Para evitar que conteúdo misto retorne:
- Defina um cabeçalho Content-Security-Policy: Adicionar
Content-Security-Policy: upgrade-insecure-requestscomo cabeçalho de resposta diz aos navegadores para promoverem automaticamente requisições HTTP para HTTPS. É uma boa rede de segurança. - Use URLs relativas ou HTTPS: Ao incorporar imagens ou recursos manualmente, sempre use
https://ou URLs relativas ao protocolo. - Verifique incorporações de terceiros: Antes de colar códigos de incorporação de serviços externos, verifique se eles usam HTTPS.
- Audite regularmente: Configure relatórios automáticos do InspectWP para detectar qualquer conteúdo misto que apareça após atualizações de conteúdo ou alterações em plugins.