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?
- Jak rozpoznać Mixed Content na stronie?
- Pasywny i aktywny Mixed Content
- Skąd bierze się Mixed Content w WordPress?
- Jak naprawić Mixed Content w WordPress?
- Szybka metoda z wtyczką, czyli dlaczego jej nie polecamy
- Najczęstsze problemy przy naprawie
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?
- Otwórz w Chrome podstronę, na której widzisz problem.
- Kliknij prawym przyciskiem myszy w dowolnym miejscu strony i wybierz Zbadaj (albo naciśnij F12 lub Ctrl+Shift+I, na Macu Cmd+Option+I).
- Przejdź do zakładki Konsola (Console).
- 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.
Pasywny i aktywny Mixed Content
Przeglądarki dzielą zawartość mieszaną na dwa rodzaje, bo różnią się one poziomem ryzyka.
| Rodzaj | Przykłady | Co robi przeglądarka | Ryzyko |
|---|---|---|---|
| Pasywny | obrazki, pliki audio i wideo | próbuje pobrać plik przez HTTPS, a gdy się nie da, blokuje go albo wyświetla z ostrzeżeniem | niskie: plik można podmienić, ale nie przejmie kontroli nad stroną |
| Aktywny | skrypty JS, arkusze CSS, ramki iframe, czcionki | blokuje plik bez pytania | wysokie: 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.cssalboheader.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.
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
- Zaloguj się do panelu WordPress
- Przejdź do Ustawienia i Ogólne.
- W polach Adres WordPressa (URL) i Adres witryny (URL) zmień
http://nahttps://. - 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ć.
- W panelu WordPress przejdź do Wtyczki i Dodaj nową, wyszukaj Better Search Replace, a następnie kliknij Zainstaluj i Włącz.

- Otwórz Narzędzia i Better Search Replace.

- W polu Szukaj wpisz adres strony z
http://, na przykładhttp://twojadomena.pl. - W polu Zamień na wpisz ten sam adres z
https://, na przykładhttps://twojadomena.pl. - W sekcji Wybierz tabele zaznacz wszystkie tabele (kliknij pierwszą, przytrzymaj Shift i kliknij ostatnią).
- 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.

- Jeśli liczba znalezionych pozycji wygląda sensownie, odznacz Uruchomić na sucho? i uruchom zamianę ponownie. Tym razem zmiany zostaną zapisane.
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.
- Przejdź do Elementor i Narzędzia.
- Otwórz zakładkę Zastąp adres URL.
- W pierwszym polu wpisz stary adres z
http://, w drugim nowy zhttps://, i kliknij Zastąp adres URL. - 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.
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.
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.