Passou o site para HTTPS, mas o cadeado não aparece, faltam imagens ou o browser mostra "Não seguro"? O mais provável é ter conteúdo misto (mixed content). Este guia explica o que é e como o resolver.

O que é o conteúdo misto

Conteúdo misto acontece quando uma página carregada por HTTPS vai buscar alguns ficheiros (imagens, scripts, folhas de estilo, fontes) por HTTP. A ligação deixa de ser totalmente segura e os browsers reagem de duas formas:

  • Bloqueiam os recursos mais críticos, como scripts, folhas de estilo e iframes. O site pode ficar sem formatação ou com funcionalidades partidas.
  • Avisam nos recursos menos críticos, como imagens: o cadeado desaparece ou surge um aviso de "Não seguro".

É muito comum depois de instalar um certificado SSL ou de migrar um site de HTTP para HTTPS, porque o conteúdo antigo continua a apontar para endereços http://.

1. Encontre o problema

No browser, abra as ferramentas de programador (tecla F12) e vá ao separador Consola. Cada recurso problemático aparece com uma mensagem do tipo "Mixed Content: The page was loaded over HTTPS, but requested an insecure resource...", com o endereço exato do ficheiro.

Depois de identificar o padrão (normalmente o próprio domínio em http://), já sabe o que procurar e substituir.

2. Corrija

Se for só uma imagem ou um ficheiro

Edite a página ou o artigo e altere o link diretamente para https://.

Se forem muitos: procurar e substituir na base de dados

Faça sempre uma cópia de segurança da base de dados antes. Tem duas opções:

  • Plugin. O Better Search Replace procura todas as referências a http://o-seu-dominio.pt e substitui-as por https://o-seu-dominio.pt. Use primeiro a opção "Executar em modo de teste" para ver quantas alterações vai fazer.
  • WP-CLI. Mais rápido e sem plugins. Veja antes o resultado com --dry-run:
wp search-replace 'http://o-seu-dominio.pt' 'https://o-seu-dominio.pt' --all-tables --dry-run
wp search-replace 'http://o-seu-dominio.pt' 'https://o-seu-dominio.pt' --all-tables

Ambas as opções tratam corretamente os dados serializados do WordPress, o que uma substituição direta em SQL não garante. Consulte também o nosso guia de utilização do WP-CLI.

Confirme os endereços do site

Em Definições → Geral, verifique que o "Endereço do WordPress" e o "Endereço do site" começam por https://.

3. Se o problema continuar

Se depois disto ainda aparecerem avisos, procure a origem noutros locais:

  • Tema ou plugins com endereços http:// escritos no código (logótipos, fontes, scripts). Atualize-os ou peça correção ao autor.
  • Recursos externos (imagens, scripts, iframes de outros sites) que só existem em HTTP. Procure a versão em HTTPS, aloje o ficheiro no seu site ou remova-o.
  • CSS gerado por construtores visuais (Brizy, Elementor, etc.) e cache. Depois de corrigir, regenere os ficheiros CSS do construtor e limpe as caches do site, do plugin de cache e da CDN.
  • Redirecionamento de HTTP para HTTPS em falta. Confirme que quem entra por http:// é redirecionado para https://.

Solução provisória

É possível pedir ao browser para tentar carregar por HTTPS tudo o que esteja em HTTP, com o cabeçalho Content-Security-Policy: upgrade-insecure-requests. Serve para reduzir o problema enquanto corrige a origem, mas não o resolve: se o recurso não existir em HTTPS, continua a falhar.

4. Verifique o resultado

Volte a abrir o site, limpe a cache do browser (ou use uma janela anónima) e confirme que o cadeado está ativo e que a consola já não mostra avisos. Teste várias páginas, sobretudo as mais antigas, porque é aí que o conteúdo antigo costuma estar.

Precisa de ajuda com o HTTPS do seu site? Fale connosco.