Strona przez chwilę pokazuje się bez stylów. Znalazłem przyczynę w hookach czyszczenia cache
Odwiedzający trafiali na stronę wyglądającą jak surowy HTML z lat dziewięćdziesiątych. Winowajcą nie był motyw ani CDN, a hook czyszczący cały katalog cache przy każdym nowym wpisie.

👁 111 przeczytań
- Przyczyną chwilowego wyświetlania strony bez stylów był hook wtyczki cache, który przy każdej publikacji usuwał zminifikowane pliki CSS i JS razem z resztą cache.
- Serwis publikujący kilkanaście wpisów dziennie miał kilkanaście takich okien na dobę, podczas gdy serwis z dwoma tekstami tygodniowo praktycznie tego nie zauważy.
- Rozwiązanie polega na ograniczeniu czyszczenia przy publikacji wyłącznie do samego wpisu, strony głównej, listingu kategorii i kanału RSS - plik CSS nie zmienia się przy nowym wpisie.
Na kilku podstronach przez moment widać było surowy HTML bez formatowania - nagłówki jeden pod drugim, linki na niebiesko, zero układu kolumn. Efekt pojawiał się tylko czasem i tylko dla części odwiedzających, więc długo nie dawał się złapać. Przyczyną okazał się hook wtyczki cache, który przy każdej publikacji czyścił całość razem z plikami CSS i JS.
Wniosek w jednym akapicie
Jeśli wtyczka cache przy publikacji nowego wpisu czyści cały katalog cache razem ze zminifikowanymi plikami CSS i JS, to na krótką chwilę kasuje pliki, do których wygenerowany wcześniej HTML już się odwołuje. Przeglądarka dostaje dokument z linkiem do arkusza stylów, którego fizycznie nie ma na dysku, i renderuje go bez stylów. Rozwiązanie jest banalne: czyścić punktowo sam wpis, stronę główną, listing kategorii i kanał RSS. Nowy artykuł nie zmienia zawartości pliku CSS, więc nie ma żadnego powodu, żeby ten plik znikał.
Jak wyglądał objaw
Strona bez stylów to klasyczny FOUC, czyli flash of unstyled content. Zwykle tłumaczy się go asynchronicznym wczytywaniem czcionek albo krytycznym CSS wstrzykiwanym z opóźnieniem. Tutaj mechanizm był inny i prostszy: arkusz nie wczytywał się z opóźnieniem, tylko go nie było.
Dokument HTML serwowany z cache zawierał odwołanie do konkretnego zminifikowanego pliku ze znacznikiem w nazwie. Taki znacznik jest generowany w momencie tworzenia pliku i wpisywany na sztywno do HTML-a. Jeśli plik zostanie usunięty, a HTML pozostanie, odwołanie wisi w powietrzu. Serwer odpowiada czterysta czterech, przeglądarka wzrusza ramionami i rysuje treść bez żadnego formatowania.
Okno było wąskie - liczone w sekundach, czasem dziesiątkach sekund, zależnie od tego, kiedy ktoś wszedł i jak szybko odbudowała się minifikacja. Dlatego w testach ręcznych problem nie występował prawie nigdy. Odświeżało się stronę, wszystko działało, temat zamykano jako niereprodukowalny.
Skąd wzięło się kilkanaście czyszczeń na dobę
Wtyczka wołała przy każdej publikacji czyszczenie całości razem z plikami CSS i JS. Przy kilkunastu wpisach dziennie katalog był czyszczony kilkanaście razy na dobę. Każde takie czyszczenie to jedno potencjalne okno, w którym HTML wskazuje na nieistniejący arkusz.
Warto zwrócić uwagę na skalę: to nie jest awaria, która zdarza się raz w miesiącu przy aktualizacji motywu. To zdarzenie powtarzalne, wpisane w normalny rytm pracy redakcji. Im więcej publikujesz, tym częściej otwierasz okno. Serwis, który publikuje dwa teksty w tygodniu, praktycznie tego nie zauważy. Serwis newsowy z kilkunastoma wpisami dziennie będzie miał kilkanaście okien dziennie i regularne skargi czytelników, że wordpress wolno działa albo wygląda jak zepsuty.
Pełne czyszczenie kontra punktowa inwalidacja
Tabela poniżej pokazuje, co faktycznie zmieniło się w zachowaniu systemu po zmianie strategii. Zawiera wyłącznie te dane, które udało się jednoznacznie odczytać z konfiguracji i logów - bez szacunków i bez uśrednień, których nie mam czym poprzeć.
| Element | Przed poprawką | Po poprawce |
|---|---|---|
| Zakres czyszczenia przy publikacji | Całość razem z plikami CSS i JS | Sam wpis, strona główna, kategorie, kanał RSS |
| Czyszczenia katalogu na dobę | Kilkanaście | Brak czyszczeń całości wywołanych publikacją |
| Zminifikowane CSS po publikacji | Usuwane i odbudowywane | Zostaje bez zmian |
| Ryzyko HTML-a z linkiem do nieistniejącego arkusza | Występuje przy każdym czyszczeniu | Wyeliminowane dla scenariusza publikacji |
Kluczowa obserwacja jest logiczna, nie pomiarowa: nowy artykuł nie zmienia zawartości pliku CSS. Reguły stylów są takie same przed i po opublikowaniu tekstu. Nie ma więc technicznego uzasadnienia, żeby publikacja treści pociągała za sobą regenerację assetów.
Co powinno wywoływać pełne czyszczenie
To już moja opinia, oparta na tym jednym wdrożeniu, a nie twarda reguła. Pełne czyszczenie razem z CSS i JS zostawiłbym dla trzech sytuacji: zmiany w plikach motywu, aktualizacji lub zmiany konfiguracji wtyczek wpływających na front, oraz ręcznego kliknięcia przez administratora, który wie, co robi. Wszystko inne - nowy wpis, edycja starego, zmiana kategorii, nowy komentarz - powinno unieważniać wyłącznie adresy URL, których treść faktycznie się zmienia.
W praktyce lista adresów do unieważnienia przy publikacji jest krótka i przewidywalna. Sam wpis, bo dopiero się pojawił. Strona główna, bo wyświetla listę najnowszych. Listing kategorii, do których wpis należy. Kanał RSS, bo czytniki i agregatory zaciągają go niezależnie. Poza tym nic więcej nie zmienia zawartości.
Litespeed cache konfiguracja - na co patrzeć
Nie przepłacaj za te subskrypcje
Prowadzę sklep z rocznymi dostępami do narzędzi AI - te same konta, o których piszę wyżej, tylko taniej niż w cenniku producenta.
Nazwa wtyczki jest tu drugorzędna, bo wzorzec powtarza się w wielu rozwiązaniach cache dla WordPressa. Szukaj w ustawieniach dwóch rzeczy, które często siedzą w osobnych zakładkach i nie są ze sobą wizualnie powiązane.
Pierwsza to reguły automatycznego czyszczenia przy publikacji - zwykle lista checkboxów z zakresami typu strona główna, archiwa, autor, tagi, wszystko. Druga to opcje minifikacji i łączenia CSS oraz JS, a przy nich osobny przełącznik odpowiadający za usuwanie wygenerowanych plików przy czyszczeniu cache. Problem powstaje dopiero wtedy, gdy oba zestawy ustawień są włączone jednocześnie i powiązane tym samym zdarzeniem.
Jeśli wtyczka pozwala rozdzielić te dwie warstwy - cache stron i cache assetów - rozdziel je. Jeśli nie pozwala, zostaje modyfikacja zachowania z poziomu kodu: podpięcie się pod hook publikacji, zastąpienie wywołania czyszczenia całości serią punktowych unieważnień. Rozwiązanie na poziomie ustawień jest lepsze, bo nie ginie przy aktualizacji wtyczki.
Jak to sprawdzić u siebie
- Otwórz stronę główną w trybie incognito i podejrzyj źródło. Skopiuj pełny adres pliku CSS z sekcji head - tego zminifikowanego, ze znacznikiem w nazwie.
- Wklej ten adres do drugiej karty i upewnij się, że plik się otwiera i zwraca treść, a nie błąd.
- W panelu opublikuj testowy wpis. Nie edytuj motywu, nie zmieniaj żadnych ustawień - tylko publikacja treści.
- Natychmiast po publikacji odśwież kartę z adresem pliku CSS. Jeśli dostajesz czterysta czterery, masz potwierdzenie: publikacja treści usuwa assety.
- W tym samym momencie otwórz stronę główną w trzeciej karcie. Jeśli zobaczysz surowy HTML bez formatowania, widzisz dokładnie to, co widzą czytelnicy.
- Sprawdź, czy adres pliku CSS w źródle nowo wygenerowanej strony jest już inny niż ten skopiowany w kroku pierwszym. Zmiana znacznika potwierdza regenerację.
- Wejdź w ustawienia wtyczki i odszukaj regułę czyszczenia przy publikacji. Ogranicz ją do wpisu, strony głównej, kategorii i kanału RSS.
- Odszukaj osobno opcję odpowiadającą za usuwanie zminifikowanych CSS i JS przy czyszczeniu cache i odwiąż ją od zdarzenia publikacji.
- Powtórz kroki od pierwszego do piątego. Plik CSS powinien przetrwać publikację ze tym samym znacznikiem w nazwie.
- Obserwuj przez kilka dni normalnej pracy redakcji. Przy kilkunastu wpisach dziennie efekt albo wróci szybko, albo nie wróci wcale - trzeciej opcji nie ma.
Skąd te liczby
Wszystkie dane pochodzą z jednego wdrożenia na serwisie publikującym kilkanaście wpisów dziennie. Liczba czyszczeń katalogu na dobę została odczytana z konfiguracji wtyczki i skorelowana z liczbą publikacji - wtyczka wołała przy każdej publikacji czyszczenie całości razem z plikami CSS i JS, co przy kilkunastu wpisach dziennie dawało kilkanaście czyszczeń na dobę. Zakres poprawki, czyli punktowe czyszczenie wpisu, strony głównej, kategorii i kanału RSS, to zmiana konfiguracji wprowadzona i zweryfikowana procedurą opisaną w sekcji powyżej. Nie mierzyłem czasów odbudowy minifikacji ani udziału dotkniętych sesji - tych liczb po prostu nie mam i nie będę ich szacował. Pomiar i wdrożenie poprawki: 22.09.2026.
Cały tydzień w AI, w jednym mailu
Wybrane premiery, narzędzia i analizy. Raz w tygodniu, prosto do skrzynki.
Zapisz się za darmo →Najczęstsze pytania
Dlaczego strona przez chwilę wygląda jak surowy HTML bez formatowania?
Strona pokazuje się bez stylów, gdy przeglądarka dostaje dokument HTML odwołujący się do pliku CSS, który fizycznie nie istnieje na dysku - serwer zwraca błąd 404, a przeglądarka renderuje treść bez formatowania. Dzieje się tak, gdy wtyczka cache usuwa zminifikowane pliki CSS i JS w trakcie odbudowywania cache po publikacji nowego wpisu.
Jak sprawdzić, czy moja wtyczka cache usuwa pliki CSS przy publikacji wpisu?
Należy skopiować adres zminifikowanego pliku CSS ze źródła strony, opublikować testowy wpis, a następnie natychmiast odświeżyć kartę z tym adresem - jeśli pojawia się błąd 404, publikacja usuwa assety. Warto też otworzyć stronę główną zaraz po publikacji i sprawdzić, czy widać surowy HTML bez formatowania.
Co powinno wywoływać pełne czyszczenie cache razem z plikami CSS i JS?
Pełne czyszczenie razem z CSS i JS powinno być wywoływane tylko przy zmianach w plikach motywu, aktualizacji lub zmianie konfiguracji wtyczek wpływających na front oraz ręcznym kliknięciu przez administratora. Nowy wpis, edycja starego, zmiana kategorii ani nowy komentarz nie zmieniają zawartości pliku CSS, więc nie ma powodu, żeby go usuwać.
Jakie adresy URL powinny być czyszczone przy publikacji nowego wpisu?
Przy publikacji nowego wpisu należy czyścić punktowo tylko cztery elementy: sam wpis, stronę główną, listing kategorii, do których wpis należy, oraz kanał RSS. Poza tymi adresami żadna inna treść faktycznie się nie zmienia przy publikacji.
