Mixed Content w WordPress. Jak naprawić?

Mixed Content w WordPress to sytuacja, w której strona działa po HTTPS, ale część jej elementów nadal ładuje się przez nieszyfrowane HTTP. Certyfikat SSL jest ważny i poprawnie zainstalowany, a mimo to przeglądarka nie pokazuje kłódki, obrazki znikają albo szablon nagle wygląda na rozsypany.

Problem pojawia się najczęściej zaraz po włączeniu SSL na stronie, która wcześniej działała po HTTP. WordPress zapisuje w bazie danych pełne adresy obrazków i linków, więc stare odwołania http:// zostają w treści wpisów, ustawieniach motywu i page buildera. W tym artykule pokazujemy, jak znaleźć takie odwołania i naprawić je na stałe w bazie danych, zamiast maskować je wtyczką.

Co to jest Mixed Content?

Mixed Content (zawartość mieszana) to strona otwarta przez HTTPS, która pobiera część plików przez HTTP. Wystarczy jeden obrazek, skrypt albo arkusz stylów z adresem zaczynającym się od http://, żeby przeglądarka uznała połączenie za niepełnie zabezpieczone.

Dlaczego to problem? Plik pobrany przez HTTP nie jest szyfrowany. Ktoś, kto kontroluje sieć, na przykład publiczne Wi-Fi w kawiarni, może go podejrzeć albo podmienić w drodze między serwerem a przeglądarką. To tak zwany atak man-in-the-middle. Szyfrowanie całej reszty strony nie ma znaczenia, jeśli jeden skrypt da się po drodze zamienić na złośliwy.

Jak rozpoznać Mixed Content na stronie?

Typowe objawy to:

  • brak kłódki w pasku adresu albo komunikat, że połączenie nie jest w pełni bezpieczne,
  • brakujące obrazki, ikony lub czcionki,
  • rozsypany wygląd strony, gdy przeglądarka zablokowała arkusz stylów CSS,
  • niedziałające elementy: slider, formularz, mapa, osadzony film.

Jak sprawdzić Mixed Content w konsoli Chrome?

  1. Otwórz w Chrome podstronę, na której widzisz problem.
  2. Kliknij prawym przyciskiem myszy w dowolnym miejscu strony i wybierz Zbadaj (albo naciśnij F12 lub Ctrl+Shift+I, na Macu Cmd+Option+I).
  3. Przejdź do zakładki Konsola (Console).
  4. Odśwież stronę klawiszem F5 i poszukaj komunikatów zaczynających się od Mixed Content.

Przykładowy komunikat wygląda tak:

Mixed Content: The page at 'https://twojadomena.pl/oferta/' was loaded over HTTPS,
but requested an insecure image 'http://twojadomena.pl/wp-content/uploads/2023/05/baner.jpg'.
This content should also be served over HTTPS.

Z komunikatu odczytasz dwie rzeczy: na której podstronie jest problem i który dokładnie plik ładuje się przez HTTP.

Konsola pokazuje błędy tylko dla otwartej podstrony. Brak komunikatów na stronie głównej nie oznacza, że cały serwis jest czysty. Sprawdź też kilka wpisów, stronę kontaktową i kartę produktu, jeśli masz sklep.

Pasywny i aktywny Mixed Content

Przeglądarki dzielą zawartość mieszaną na dwa rodzaje, bo różnią się one poziomem ryzyka.

RodzajPrzykładyCo robi przeglądarkaRyzyko
Pasywnyobrazki, pliki audio i wideopróbuje pobrać plik przez HTTPS, a gdy się nie da, blokuje go albo wyświetla z ostrzeżeniemniskie: plik można podmienić, ale nie przejmie kontroli nad stroną
Aktywnyskrypty JS, arkusze CSS, ramki iframe, czcionkiblokuje plik bez pytaniawysokie: podmieniony skrypt może przekierować użytkownika, wykraść dane z formularza albo wstrzyknąć phishing

W praktyce aktywny Mixed Content jest zwykle łatwiejszy do zauważenia, bo strona przestaje działać lub wyglądać poprawnie. Pasywny często kończy się tylko brakiem kłódki, przez co bywa ignorowany miesiącami.

Skąd bierze się Mixed Content w WordPress?

Najczęstsze źródła to:

  • adres strony w ustawieniach nadal zaczyna się od http://,
  • obrazki wstawione do wpisów przed włączeniem SSL. WordPress zapisał je z pełnym adresem http:// w bazie danych,
  • page builder lub motyw (Elementor, Divi, ustawienia Customizera) przechowuje adresy teł, logo i przycisków we własnych polach,
  • zasoby z innych domen: stary kod licznika, widżet, czcionka lub skrypt osadzony przez http://,
  • adresy wpisane na sztywno w plikach motywu, na przykład w style.css albo header.php.

Jak naprawić Mixed Content w WordPress?

Zalecana metoda to jednorazowa zamiana wszystkich odwołań http:// na https:// w bazie danych. Po niej problem znika na stałe i nie obciąża strony przy każdym wyświetleniu.

Zanim zaczniesz, zrób kopię zapasową strony i bazy danych. Zamiana działa na całej bazie naraz. Literówka w adresie domeny może uszkodzić linki w setkach miejsc, a kopia pozwala cofnąć zmiany w kilka minut.

Upewnij się też, że certyfikat SSL jest aktywny, czyli strona otwiera się pod adresem https:// bez ostrzeżenia o certyfikacie.

Zmiana adresu strony w ustawieniach WordPress

  1. Zaloguj się do panelu WordPress
  2. Przejdź do Ustawienia i Ogólne.
  3. W polach Adres WordPressa (URL) i Adres witryny (URL) zmień http:// na https://.
  4. Kliknij Zapisz zmiany na dole strony. WordPress wyloguje Cię, zaloguj się ponownie.

Zamiana adresów w bazie danych wtyczką Better Search Replace

Better Search Replace to darmowa wtyczka, która wyszukuje tekst w całej bazie i zamienia go na inny. Ma jedną ważną przewagę nad ręczną zamianą w phpMyAdmin: poprawnie obsługuje dane serializowane, w których WordPress i wtyczki trzymają ustawienia. Zwykła zamiana tekstu w SQL potrafi je uszkodzić.

  1. W panelu WordPress przejdź do Wtyczki i Dodaj nową, wyszukaj Better Search Replace, a następnie kliknij Zainstaluj i Włącz.

  2. Otwórz Narzędzia i Better Search Replace.
  3. W polu Szukaj  wpisz adres strony z http://, na przykład http://twojadomena.pl.
  4. W polu Zamień na wpisz ten sam adres z https://, na przykład https://twojadomena.pl.
  5. W sekcji Wybierz tabele  zaznacz wszystkie tabele (kliknij pierwszą, przytrzymaj Shift i kliknij ostatnią).
  6. Zostaw zaznaczoną opcję Uruchomić na sucho? i kliknij Uruchom Wyszukiwanie/Zamianę. To przebieg próbny: wtyczka tylko policzy, ile odwołań znalazła, niczego nie zmieniając.
  7. Jeśli liczba znalezionych pozycji wygląda sensownie, odznacz Uruchomić na sucho? i uruchom zamianę ponownie. Tym razem zmiany zostaną zapisane.

Wpisz adres dokładnie tak, jak wygląda Twoja strona. Jeśli serwis działa z przedrostkiem www, wpisz go w obu polach: http://www.twojadomena.pl i https://www.twojadomena.pl. Jeśli strona była dostępna pod oboma wariantami, wykonaj zamianę dwukrotnie, osobno dla adresu z www i bez.

Po zakończeniu pracy możesz wyłączyć i usunąć wtyczkę. Nie jest potrzebna do działania strony.

Zamiana adresów w Elementorze

Jeśli strona jest zbudowana w Elementorze, wykonaj dodatkowo zamianę w jego narzędziach. Elementor przechowuje część danych we własnym formacie i generuje z nich pliki CSS.

  1. Przejdź do Elementor i Narzędzia.
  2. Otwórz zakładkę Zastąp adres URL.
  3. W pierwszym polu wpisz stary adres z http://, w drugim nowy z https://, i kliknij Zastąp adres URL.
  4. Na zakładce ogólnej narzędzi wygeneruj ponownie pliki CSS i dane, żeby Elementor zbudował style już z nowymi adresami.

Wyczyszczenie pamięci podręcznej

Po zamianie adresów wyczyść cache strony. W przeciwnym razie odwiedzający nadal będą dostawać zapisane wcześniej wersje podstron ze starymi adresami http://. Jeśli korzystasz z LiteSpeed Cache, użyj opcji czyszczenia całej pamięci podręcznej na górnym pasku panelu WordPress.

Na koniec sprawdź stronę jeszcze raz w konsoli Chrome, najlepiej w oknie incognito, żeby wykluczyć pamięć podręczną przeglądarki.

Od tej chwili nowe obrazki i linki zapisują się już z adresem https://, bo WordPress bierze go z ustawień strony. Ręcznie pilnuj tylko kodu wklejanego z zewnątrz: widżetów, skryptów statystyk i osadzonych elementów.

Szybka metoda z wtyczką, czyli dlaczego jej nie polecamy

Wtyczki takie jak Really Simple SSL potrafią usunąć Mixed Content jednym kliknięciem. Działają jednak inaczej niż zamiana w bazie: przy każdym wyświetleniu podstrony przepisują jej kod w locie, zamieniając http:// na https://.

Taka metoda ma trzy wady:

  • dodaje pracy serwerowi przy każdym wejściu na stronę,
  • błędne adresy nadal siedzą w bazie danych,
  • po wyłączeniu lub awarii wtyczki problem wraca w całości.

Wtyczkę możesz potraktować jako rozwiązanie awaryjne, gdy musisz naprawić stronę natychmiast. Docelowo i tak warto wykonać zamianę w bazie opisaną wyżej.

Najczęstsze problemy przy naprawie

Po zmianie adresu strona wpada w pętlę przekierowań

Przeglądarka pokazuje błąd o zbyt wielu przekierowaniach, a do panelu WordPress nie da się wejść. Najczęściej konfliktują ze sobą przekierowanie w pliku .htaccess i ustawienia wtyczki SSL lub cache. Wyłącz wtyczkę SSL, zmieniając nazwę jej folderu w wp-content/plugins przez FTP lub Menedżer plików, a potem sprawdź reguły przekierowań w .htaccess.

Konsola nadal pokazuje błędy z innej domeny

Better Search Replace z Twoją domeną nie zmieni odwołań do zewnętrznych serwisów. Znajdź w komunikacie adres pliku i sprawdź, czy otwiera się przez https://. Jeśli tak, popraw odwołanie w miejscu, gdzie wkleiłeś kod (widżet, ustawienia motywu, wtyczka). Jeśli zewnętrzny serwis nie obsługuje HTTPS, usuń ten element ze strony albo umieść plik na własnym serwerze.

Nie zamieniaj w bazie samego przedrostka http:// na https:// bez nazwy domeny. Zmienisz w ten sposób także linki do cudzych stron, z których część nie działa po HTTPS. Takie odwołania poprawiaj pojedynczo.

Błąd dotyczy pliku motywu

Jeśli komunikat wskazuje plik ładowany z katalogu motywu, a zamiana w bazie nie pomogła, adres jest wpisany na sztywno w kodzie. Wyszukaj http:// w plikach motywu potomnego (najczęściej style.css, functions.php, header.php) i popraw go ręcznie. Nie edytuj motywu nadrzędnego, bo aktualizacja nadpisze zmiany.

Jak ustawić stopkę w poczcie e-mail w Roundcube?

Podpis w Roundcube ustawisz w 2 minuty, w sekcji Ustawienia i Tożsamości. Raz zapisana stopka dodaje się automatycznie do każdej nowej...

Jak kupić hosting?

Zamówienie hostingu w VH.pl zajmuje około 3 minut i składa się z 5 kroków: wybierasz pakiet, klikasz Zamawiam, logujesz się lub zakładasz...

Mixed Content w WordPress. Jak naprawić?

Mixed Content w WordPress to sytuacja, w której strona działa po HTTPS, ale część jej elementów nadal ładuje się przez nieszyfrowane HTTP....

Kontakt

Jesteśmy do Twojej dyspozycji

Wybierz wygodny dla siebie kanał - odpowiadamy szybko i konkretnie.

LiveChat

Napisz do nas na czacie - odpowiadamy średnio w kilka minut, w godzinach pracy.

Otwórz czat

E-mail

Wolisz mejla? Napisz na bok@vh.pl - odpowiemy konkretnie i z sensem.

bok@vh.pl

Discord ❤

Dołącz do naszej społeczności - nowinki, wsparcie techniczne, promocje i pomocna dłoń innych użytkowników.

Dołącz teraz