Awarie
Kłódka nie działa mimo SSL — mixed content na WordPressie
Certyfikat jest, a przeglądarka pisze „niezabezpieczona”? To mixed content: strona po HTTPS ładuje pliki po HTTP. Jak to znaleźć i naprawić w bazie danych.
Kupiłeś certyfikat SSL — albo dostałeś darmowy — a przeglądarka zamiast kłódki pokazuje „Niezabezpieczona” albo przekreśloną kłódkę z ostrzeżeniem. Certyfikat najpewniej działa. Problem nazywa się mixed content (mieszana treść): strona ładuje się po bezpiecznym HTTPS, ale część plików — obrazki, style, skrypty — dalej przychodzi po zwykłym HTTP.
Przeglądarka rozumuje słusznie: skoro choć jeden element jedzie nieszyfrowanym kanałem, całość nie zasługuje na kłódkę.
Znajdź winne pliki w konsoli przeglądarki
Otwórz stronę w Chrome albo Firefoksie i naciśnij F12, potem zakładka Konsola. Szukaj ostrzeżeń w rodzaju:
Mixed Content: The page at 'https://twojadomena.pl/' was loaded over HTTPS,
but requested an insecure image 'http://twojadomena.pl/wp-content/uploads/logo.png'
Każde takie ostrzeżenie wskazuje konkretny plik z adresem http://. Zwykle po pierwszych trzech widać schemat: prawie zawsze to stare adresy zapisane w bazie danych — strona kiedyś działała po HTTP i wszystkie obrazki wstawione w tamtych czasach mają zapisany pełny adres z http://.
Krok 1: ustawienia adresu strony
Wejdź w Ustawienia → Ogólne i sprawdź oba pola: „Adres WordPressa (URL)” i „Adres witryny (URL)”. Oba muszą zaczynać się od https://. Jeśli poprawiasz — najpierw upewnij się, że strona w ogóle działa po HTTPS, bo po zapisaniu WordPress zacznie przekierowywać na nowy adres.
Krok 2: podmień stare adresy w bazie danych
Ręczne poprawianie obrazków wpis po wpisie to droga donikąd — adresy siedzą w tysiącach miejsc. Robi się to hurtowo, wtyczką Better Search Replace:
- Zrób kopię bazy danych. Operacja masowo nadpisuje treść — bez kopii nie startuj.
- W polu „Szukaj” wpisz
http://twojadomena.pl, w polu „Zamień na” —https://twojadomena.pl. - Zaznacz wszystkie tabele i najpierw uruchom z opcją testową (dry run) — wtyczka pokaże, ile wystąpień znajdzie, niczego nie zmieniając.
- Jeśli liczby wyglądają sensownie, uruchom na ostro i wyczyść cache.
Wtyczka poprawnie obsługuje zserializowane dane (to te dziwne wpisy z s:52:"..." — zwykła podmiana w phpMyAdmin by je uszkodziła, dlatego nie rób tego SQL-em).
Krok 3: to, czego nie ma w bazie
Jeśli po podmianie konsola dalej pokazuje ostrzeżenia, zostały adresy wpisane poza treścią:
- motyw i jego ustawienia — logo, tła i fonty wskazane w opcjach motywu; czasem adres
http://siedzi wprost w plikach motywu, zwłaszcza modyfikowanego ręcznie, - skrypty zewnętrzne — stare kody statystyk, widżety pogody, liczniki; jeśli dostawca nie wspiera HTTPS, wyrzuć skrypt,
- Cloudflare w trybie „Flexible SSL” — połączenie szyfrowane tylko do Cloudflare, dalej po HTTP. Przełącz na „Full (strict)”, ale ostrożnie: przy złej konfiguracji originu kończy się to pętlą przekierowań.
Wtyczki typu Really Simple SSL potrafią wymusić HTTPS „w locie”, przepisując adresy przy każdym wyświetleniu. Działa, ale to plaster — baza dalej trzyma stare adresy, a strona robi dodatkową robotę przy każdym wejściu. Lepiej naprawić raz, u źródła.
Dlaczego warto to dokończyć, a nie zignorować
„Przecież strona działa” — działa, ale ostrzeżenie o braku zabezpieczenia w sklepie albo przy formularzu skutecznie odstrasza. Do tego Google traktuje HTTPS jako sygnał rankingowy, a strona z mieszaną treścią potrafi mieć problemy z pozycjami. W skrajnym wypadku — gdy po HTTP ładują się skrypty — przeglądarka po prostu je blokuje i przestają działać suwaki, mapy czy formularze. A jeśli obce skrypty pojawiły się na stronie bez Twojej wiedzy, sprawdź, czy to nie ślad włamania.
Ile to zajmuje
Diagnoza w konsoli — 10 minut. Podmiana adresów w bazie z kopią zapasową i testem — do godziny. Warto zlecić, gdy w grę wchodzi sklep (podmiana w bazie WooCommerce wymaga większej ostrożności), gdy adresy siedzą w plikach motywu albo gdy po drodze jest Cloudflare i nie wiadomo, która warstwa psuje.
Kłódka dalej przekreślona? Naprawimy to u źródła — bezpłatna diagnoza, reakcja w ciągu dwóch godzin, od 120 zł netto za godzinę, płatność po wykonaniu.