LIONFIN
SSL Sertifikaları

Mixed Content Hatası Çözümü: HTTPS’te Karışık İçerik

5 dk okuma Güncelleme: 8 görüntülenme
Mixed Content Hatası Çözümü: HTTPS’te Karışık İçerik

SSL sertifikanız kurulu, adres çubuğunda HTTPS var; ama kilit simgesi yerine bir uyarı üçgeni görünüyor ya da tarayıcı konsolu “This page contains mixed content” diyor. Mixed content hatası, HTTPS ile yüklenen bir sayfanın içinde hâlâ şifresiz (http) adresten çekilen görsel, betik, stil dosyası ya da iframe bulunması durumunda ortaya çıkar.

Bu rehberde hatanın türlerini, kaynağı tarayıcı araçlarıyla dakikalar içinde bulmayı, WordPress ve statik sitelerde kalıcı düzeltmeyi, cPanel ve Plesk’te HTTPS zorlamayı ve CSP başlığıyla otomatik yükseltmeyi anlatıyoruz. Sertifika türleri ve kurulum hakkında temel bilgi için SSL sertifikaları sayfası ve SSL sertifikası nedir rehberi iyi bir başlangıçtır.

Mixed content hatası nedir, neden önemlidir?

Tarayıcı, HTTPS sayfasında şifresiz bir kaynak gördüğünde bağlantının bütünlüğünü garanti edemez: bu kaynak yolda değiştirilebilir ve sayfaya zararlı kod sokabilir. Bu yüzden tarayıcılar karışık içeriği iki sınıfa ayırıp farklı tepki verir:

TürKaynaklarTarayıcı davranışı
Pasif (görüntüleme)Görsel, ses, videoGenellikle yükler ama kilit simgesini kaldırır ya da uyarı gösterir; yeni sürümler otomatik olarak HTTPS’e yükseltmeyi dener
Aktif (yürütülebilir)JavaScript, CSS, iframe, XHR/fetch, fontVarsayılan olarak engeller; sayfa bozuk görünür, konsolda “blocked” hatası çıkar

Pratik sonuçları: kilit simgesi kaybolur, ziyaretçi güvensizlik hisseder, engellenen betikler yüzünden slider, form ya da ödeme adımı çalışmaz ve arama motorları sayfayı tam HTTPS saymaz. Sorun sertifikada değil, sayfanın içindeki adreslerdedir; bu yüzden yeni bir sertifika almak çözüm getirmez.

Kaynağı bulma: tarayıcı konsolu ve kaynak kodu

Hangi dosyanın soruna yol açtığını bulmak için tarayıcının geliştirici araçları yeterlidir:

  1. Sayfayı Chrome ya da Edge’de açın, F12 tuşuna basıp Console sekmesine geçin.
  2. Sayfayı yenileyin. Mixed Content: The page was loaded over HTTPS, but requested an insecure … ile başlayan satırlar, sorunlu kaynağın tam adresini gösterir.
  3. Network sekmesinde filtre kutusuna mixed-content:displayed ya da mixed-content:blocked yazarak yalnızca bu istekleri listeleyin.
  4. Kaynağın nereden geldiğini anlamak için sayfa kaynağını açın (Ctrl+U) ve src="http: ya da href="http: ifadelerini arayın.

Adres tema dosyalarından geliyorsa kod düzeltmesi, veritabanında saklanan içerikten (yazı gövdesi, widget, slider ayarı) geliyorsa toplu değiştirme gerekir. Dış servislerden (harita, video, sosyal medya gömme kodu) gelen kaynaklarda ise gömme kodunu servisin HTTPS sürümüyle yenilemek yeterlidir.

WordPress’te kalıcı çözüm

WordPress sitelerinde karışık içeriğin dört tipik kaynağı vardır ve her biri için doğru araç farklıdır:

  1. Site adresi ayarı: Ayarlar → Genel altındaki WordPress Adresi ve Site Adresi alanlarının https ile başladığından emin olun. Bu alanlar http kaldığı sürece WordPress tüm bağlantıları şifresiz üretir.
  2. Veritabanındaki eski adresler: Yazı içeriklerine ve seçeneklere gömülü http adreslerini toplu değiştirin. WP-CLI erişiminiz varsa önce deneme çalıştırması yapın:
    wp search-replace "ESKI_ADRES" "YENI_ADRES" --dry-run
    wp search-replace "ESKI_ADRES" "YENI_ADRES" --precise --all-tables
    Burada ESKI_ADRES sitenizin http ile başlayan, YENI_ADRES ise https ile başlayan tam adresidir. WP-CLI yoksa Better Search Replace gibi bir eklenti aynı işi panelden yapar; serileştirilmiş verileri bozmadan değiştirdiği için düz SQL sorgusundan güvenlidir.
  3. Tema ve eklenti dosyaları: Tema klasöründe sabit yazılmış adresleri bulun; cPanel Terminal ya da SSH’den grep -rl "http:" wp-content/themes/temaniz komutu dosyaları listeler. Adresleri https yapın ya da protokolsüz (// ile başlayan) biçime çevirin.
  4. Önbellek: Değişikliklerden sonra LiteSpeed Cache, WP Rocket gibi eklentilerin ve varsa CDN’in önbelleğini temizleyin; eski HTML önbellekte kaldığı sürece hata devam eder.
Dikkat: Veritabanında toplu değiştirme yapmadan önce mutlaka yedek alın; hatalı bir arama ifadesi tüm bağlantıları bozabilir.

Statik siteler ve özel yazılımlar

WordPress dışındaki sitelerde adresler doğrudan HTML, CSS ve JavaScript dosyalarının içindedir. Dosya Yöneticisi ya da bir kod düzenleyicisiyle proje klasöründe http: ifadesini aratın; en sık rastlanan yerler şunlardır:

  • HTML şablonlarındaki <img src>, <script src>, <link href> ve <iframe src> öznitelikleri.
  • CSS dosyalarındaki url(...) ile çağrılan arka plan görselleri ve fontlar.
  • JavaScript içindeki AJAX/fetch adresleri; bu istekler HTTPS sayfada tamamen engellenir.
  • Yapılandırma dosyalarında (örneğin config.php) tanımlanan BASE_URL gibi sabitler.

Kaynak kendi sunucunuzdaysa en temiz yol göreli adres kullanmaktır: /assets/logo.png hem HTTP hem HTTPS altında çalışır. Dış kaynaklar için servisin HTTPS adresini kullanın; HTTPS sunmayan bir dış servisi sayfaya gömmenin güvenli bir yolu yoktur, dosyayı kendi sunucunuza kopyalamanız gerekir.

HTTPS zorlama ve CSP ile otomatik yükseltme

Sayfadaki adresleri düzelttikten sonra iki ek önlem, gözden kaçan kaynakları ve gelecekte eklenecek içeriği de güvence altına alır.

HTTPS’e yönlendirme

Ziyaretçi http ile gelse bile HTTPS sürümüne 301 ile yönlendirilmelidir. cPanel’de Domains listesindeki Force HTTPS Redirect anahtarını açmanız yeterlidir; Plesk’te Websites & Domains → Hosting Settings altındaki Permanent SEO-safe 301 redirect from HTTP to HTTPS kutusunu işaretleyin. Elle kural yazmak isterseniz cPanel yönlendirme ayarları rehberinde .htaccess örneği bulunur.

upgrade-insecure-requests başlığı

Content Security Policy’nin bu yönergesi, tarayıcıya sayfadaki tüm http kaynaklarını otomatik olarak https ile istemesini söyler. Apache/LiteSpeed sunucularda site kökündeki .htaccess dosyasına ekleyin:

<IfModule mod_headers.c>
    Header always set Content-Security-Policy "upgrade-insecure-requests"
</IfModule>

Bu başlık yalnızca kaynağın HTTPS sürümü mevcutsa işe yarar; HTTPS sunmayan bir kaynağı yükleyemez. Bu yüzden başlığı kalıcı çözümün yerine değil, tamamlayıcısı olarak düşünün.

Mixed content hatası kontrol listesi ve sık yapılan hatalar

  1. Konsolda sıfır Mixed Content satırı kalana kadar sayfaları (ana sayfa, ürün, sepet, iletişim) tek tek yenileyin.
  2. Gizli pencerede test edin; eklenti ve tarayıcı önbelleği eski sonucu gösterebilir.
  3. Sitemap ve canonical etiketlerinin HTTPS adresleri işaret ettiğini doğrulayın.
  4. Search Console’a HTTPS mülkünü ekleyin; dizin geçişi için SSL ve SEO ilişkisi yazısındaki adımları uygulayın.

Sık yapılan hatalar:

  • CDN ya da proxy arkasında SSL modu yanlış: Sunucu HTTP, CDN HTTPS konuşuyorsa WordPress kendini http sanır ve bağlantıları şifresiz üretir; CDN’de tam (full) SSL modunu seçin.
  • Yalnızca ana sayfa düzeltildi: İç sayfalardaki eski görseller unutulur; toplu değiştirme tüm tabloları kapsamalıdır.
  • Sertifika süresi dolmuş: Karışık içerik değil, geçersiz sertifika uyarısı alıyorsanız çözüm SSL yenileme yazısındadır.

Yönetilen bir altyapı istiyorsanız LIONFIN WordPress hosting paketlerinde HTTPS zorlama ve sertifika yenileme hazır gelir.

Sık Sorulan Sorular

Mixed content hatası sitemin güvenliğini gerçekten tehlikeye atar mı?

Aktif karışık içerik (betik, stil, iframe) sayfanın tamamını riske atar: şifresiz yüklenen bir betik ağ üzerinde değiştirilerek sayfaya zararlı kod eklenebilir. Bu yüzden tarayıcılar aktif içeriği engeller. Pasif içerik daha düşük riskli olsa da kilit simgesini kaldırır ve ziyaretçi güvenini düşürür; her ikisini de düzeltmek gerekir.

Sertifikayı yeniledim ama hata devam ediyor, neden?

Karışık içerik sertifikayla ilgili değildir; sayfanın HTML’inde http ile başlayan kaynak adresleri bulunduğu sürece uyarı devam eder. Konsoldaki Mixed Content satırlarında hangi dosyanın şifresiz istendiğini görüp o adresi https ya da göreli biçime çevirmeniz gerekir.

Tüm adresleri elle düzeltmek yerine bir eklenti kullanabilir miyim?

Evet; Really Simple SSL benzeri eklentiler HTML çıktısını her istekte anında filtreleyip http adreslerini https yapar. Hızlı bir çözümdür ancak her sayfa yüklemesinde ek işlem yapar ve altta yatan veriyi düzeltmez. Kalıcı yol, veritabanı ve tema dosyalarındaki adresleri bir kez düzeltip eklentiye ihtiyaç bırakmamaktır.

Dış bir servis yalnızca http üzerinden içerik veriyorsa ne yapmalıyım?

HTTPS sayfada şifresiz aktif kaynak yüklemenin güvenli bir yolu yoktur; tarayıcı bunu engeller. Servisin HTTPS destekleyen bir sürümü ya da alternatifi olup olmadığını kontrol edin. Görsel gibi statik bir dosyaysa dosyayı kendi sunucunuza kopyalayıp oradan yayınlayın; betik ya da iframe ise servisi değiştirmeniz gerekir.

Bu makale yardımcı oldu mu?

Geri bildiriminiz için teşekkürler!

kişi faydalı buldu

Paylaş

X LinkedIn WhatsApp

Sorunuz mu var? Destek ekibimize yazın.