Weryfikacja treści
ważność wysokamierzonysposób content
Obecność kluczowego tekstu na stronie. Wykrywa białe strony, podmienioną treść i błąd PHP bez kodu 500.
WIKI
artykuł z 16.09.2026 · źródeł 10Weryfikacja treści (ang. content monitoring, keyword monitoring) to parametr monitoringu stron internetowych, który pobiera stronę i sprawdza, czy odpowiedź serwera zawiera ustalony wcześniej fragment tekstu, nazywany frazą kontrolną. Pomiar kończy się jednym z trzech wyników: fraza jest, frazy nie ma albo strony nie udało się pobrać. Parametr uzupełnia sprawdzenie kodu odpowiedzi. Klasyczne wtyczki monitorujące obok listy kodów oczekiwanych w linii statusu mają osobne opcje dla napisu, który musi wystąpić w treści, dla wyrażenia regularnego, także bez rozróżniania wielkości liter, oraz dla minimalnego i maksymalnego rozmiaru strony w bajtach [1].
Jak działa
Sonda wysyła żądanie GET, odbiera całą odpowiedź i przeszukuje jej treść. Kod odpowiedzi mówi, jak serwer ocenił obsługę żądania, ale nie opisuje tego, co zobaczy odwiedzający. Google nazywa „soft 404” adres, który zwraca kod 200, a strona informuje o błędzie albo nie ma głównej treści. Wśród przyczyn wymienia brak pliku dołączanego po stronie serwera, zerwane połączenie z bazą danych, pusty wynik wyszukiwarki wewnętrznej i niezaładowany plik JavaScript [4]. Takie strony są wyłączane z wyników wyszukiwania [4].
Najprostszy wariant to wyszukanie podciągu: fraza musi wystąpić w odpowiedzi dokładnie w zapisanej postaci. Wyrażenie regularne toleruje różnice w zapisie, a dopasowanie odwrócone zgłasza błąd wtedy, gdy wzorzec się pojawi, co pozwala szukać tekstów, których na stronie być nie powinno [1]. Warunek minimalnego rozmiaru pozwala odrzucić odpowiedzi puste albo podejrzanie krótkie [1].
Sonda bez silnika przeglądarki widzi wyłącznie HTML wysłany przez serwer. W modelu „app shell” początkowy HTML nie zawiera właściwej treści, a ta powstaje dopiero po wykonaniu JavaScriptu [7]. Fraza wybrana z widoku w przeglądarce może więc nie istnieć w surowej odpowiedzi.
Standardy i specyfikacje
Weryfikacja treści nie ma własnej normy. Jest konwencją narzędzi monitorujących, a jej opcje opisuje dokumentacja tych narzędzi [1]. W praktyce stosuje się trzy metody porównania:
| Metoda | Co porównuje | Słabość |
|---|---|---|
| Fraza kontrolna | obecność napisu albo wzorca w treści [1] | nie widzi zmian w pozostałej części strony |
| Suma kontrolna strony | skrót całej odpowiedzi z wartością wzorcową | nonce zmienia się przy każdym załadowaniu strony [8] |
| Porównanie wizualne | zrzut ekranu z obrazem wzorcowym [9] | wynik zależy od systemu, przeglądarki i sprzętu [9] |
Suma kontrolna słabo pasuje do stron generowanych dynamicznie. MDN zaleca, by atrybut nonce, używany przez Content Security Policy do dopuszczania skryptów wbudowanych, był generowany inaczej przy każdym załadowaniu strony [8]. Strona z takim atrybutem nie odda więc dwóch identycznych odpowiedzi, nawet gdy nic się na niej nie zmieniło.
Porównanie wizualne w Playwright przy pierwszym uruchomieniu zapisuje zrzuty wzorcowe, a przy kolejnych porównuje z nimi nowe zrzuty biblioteką pixelmatch; opcja maxDiffPixels określa, ile pikseli może się różnić [9]. Elementy zmienne można ukryć własnym arkuszem stylów, co zwiększa powtarzalność zrzutów, a wzorce powinny powstawać w tym samym środowisku, w którym odbywa się porównanie [9].
Zagrożenia i skutki
Biały ekran. Błędy PHP i błędy bazy danych w WordPressie mogą objawiać się pustym ekranem bez żadnej informacji, nazywanym białym ekranem śmierci (WSOD). Jako przyczyny dokumentacja wskazuje wtyczkę powodującą niezgodność oraz motyw, zwłaszcza tuż po jego aktywacji [2].
Komunikat błędu w treści. Stała WP_DEBUG_DISPLAY decyduje, czy komunikaty debugowania trafiają do HTML stron; domyślnie ma wartość true, a WP_DEBUG domyślnie false. Dokumentacja nie zaleca trybu debugowania na działających witrynach [3]. Gdy jest włączony, ostrzeżenia i błędy PHP stają się częścią strony, a odpowiedź nadal może mieć kod 200. Dla sondy to obraz soft 404: sukces w kodzie, błąd w treści [4].
Defacement. MITRE ATT&CK opisuje zewnętrzny defacement (T1491.002) jako zmianę systemów dostępnych z zewnątrz, która ma przekazać komunikat, zastraszyć albo wprowadzić w błąd organizację lub użytkowników. Częstym celem są publiczne strony WWW; technikę stosują m.in. grupy haktywistów, a bywa ona wstępem do dalszych ataków [5]. Wykrywanie według MITRE obejmuje śledzenie zmian w plikach HTML, JS i CSS serwowanych przez witrynę [5]. Fraza kontrolna wykryje podmianę tylko wtedy, gdy ta usunie frazę; skrypt dopisany do strony z nienaruszoną stopką przejdzie niezauważony.
Zatruta pamięć podręczna. Web cache poisoning to technika, w której atakujący wykorzystuje zachowanie serwera i pamięci podręcznej tak, by szkodliwa odpowiedź trafiała do innych użytkowników [6]. Cache rozpoznaje żądania po kluczu, zwykle linii żądania i nagłówku Host; składniki żądania spoza klucza mogą zmienić odpowiedź serwera, a zapisana kopia jest potem wydawana wszystkim [6]. Skutkiem bywa XSS, wstrzyknięcie JavaScriptu albo otwarte przekierowanie, a atak da się zautomatyzować tak, by zatruwał cache bez końca [6]. Sonda, która pobiera stronę przez ten sam CDN co odwiedzający, widzi tę samą kopię.
Fałszywe alarmy. Frazę usuwa też zwykła przebudowa strony, a tekst dokładany JavaScriptem nie występuje w pierwotnym HTML [7]. Strona chroniona przez Cloudflare może zamiast treści oddać stronę wyzwania: pełnoekranowy ekran wyświetlany przed docelowym adresem, na którym przeglądarka musi wykonać JavaScript, zwykle w mniej niż pięć sekund [10]. Klient, który nie wykonuje JavaScriptu, zobaczy tylko ekran wyzwania, a w nim frazy nie ma.
Przykłady
| Sytuacja | Co widzi sonda | Wynik frazy |
|---|---|---|
| Błąd PHP lub bazy danych, WSOD [2] | pusta albo prawie pusta odpowiedź | brak |
| Włączone wyświetlanie błędów [3] | kod 200, komunikaty PHP w HTML | zależy od miejsca frazy |
| Zerwane połączenie z bazą danych [4] | kod 200, strona z komunikatem błędu | brak |
| Pełna podmiana strony głównej [5] | obca treść | brak |
| Dopisany skrypt, stopka bez zmian | strona z frazą i obcym kodem | jest |
| Zatruta kopia w cache [6] | szkodliwa odpowiedź z pamięci podręcznej | zależy od podmiany |
| Wyzwanie JavaScript przed stroną [10] | ekran weryfikacji zamiast treści | brak |
| Treść budowana przez JavaScript [7] | szkielet HTML bez właściwej treści | brak |
| Strona z nonce CSP [8] | odpowiedź różna przy każdym pobraniu | jest; suma kontrolna by się zmieniła |
- [1] check_http — Monitoring Plugins Manual · Monitoring Plugins
- [2] Common WordPress Errors · WordPress.org
- [3] Debugging in WordPress · WordPress.org
- [4] Troubleshoot crawling errors — soft 404 errors · Google Search Central
- [5] Defacement: External Defacement (T1491.002) · MITRE ATT&CK
- [6] Web cache poisoning · PortSwigger Web Security Academy
- [7] Understand JavaScript SEO basics · Google Search Central
- [8] nonce — HTML global attribute · MDN Web Docs
- [9] Visual comparisons · Playwright (Microsoft)
- [10] Interstitial Challenge Pages · Cloudflare
STATS
wyniki z systemu · tylko liczby zbiorcze- Stron zmierzonych
- 194w ostatnim dniu pomiaru
- OK
- 268odczytów
- Fail
- 41odczytów
- Nie dało się sprawdzić
- 5timeout, blokada, limit zapytań
- Udział fail
- 13,3%bez „nie dało się”
- Stron łącznie
- 195choć jeden odczyt
- OK
- 1529odczytów
- Fail
- 213odczytów
- Nie dało się sprawdzić
- 17timeout, blokada, limit zapytań
- Udział fail
- 12,2%bez „nie dało się”
| Dzień | fail | nie dało się sprawdzić | ok |
|---|---|---|---|
| 23.08.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 24.08.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 25.08.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 26.08.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 27.08.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 28.08.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 29.08.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 30.08.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 31.08.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 01.09.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 02.09.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 03.09.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 04.09.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 05.09.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 06.09.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 07.09.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 08.09.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 09.09.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 10.09.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 11.09.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 12.09.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 13.09.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 14.09.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 15.09.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 16.09.2026 | 0 odczytów | 0 odczytów | 0 odczytów |
| 17.09.2026 | 33 odczyty | 0 odczytów | 162 odczyty |
| 18.09.2026 | 31 odczytów | 0 odczytów | 161 odczytów |
| 19.09.2026 | 75 odczytów | 9 odczytów | 480 odczytów |
| 20.09.2026 | 33 odczyty | 3 odczyty | 458 odczytów |
| 21.09.2026 | 41 odczytów | 5 odczytów | 268 odczytów |
- Otwarte teraz
- 42stron: 42 · w okresie łaski: 9
- Nowe w ostatnim dniu
- 821.09.2026
- Otwarte od początku
- 181stron: 98
- Zamknięte
- 130od początku
- Mediana trwania
- 6 h 0 minod wykrycia do zamknięcia
| Ustalenie | Skutek | Otwarte teraz | Łącznie | Zamknięte |
|---|---|---|---|---|
| Weryfikacja treści content | WARNING | 42 | 181 | 130 |
| Dzień | nowe ustalenia |
|---|---|
| 23.08.2026 | 5 ustaleń |
| 24.08.2026 | 2 ustalenia |
| 25.08.2026 | 3 ustalenia |
| 26.08.2026 | 3 ustalenia |
| 27.08.2026 | 2 ustalenia |
| 28.08.2026 | 0 ustaleń |
| 29.08.2026 | 1 ustalenie |
| 30.08.2026 | 3 ustalenia |
| 31.08.2026 | 3 ustalenia |
| 01.09.2026 | 1 ustalenie |
| 02.09.2026 | 1 ustalenie |
| 03.09.2026 | 1 ustalenie |
| 04.09.2026 | 0 ustaleń |
| 05.09.2026 | 3 ustalenia |
| 06.09.2026 | 19 ustaleń |
| 07.09.2026 | 1 ustalenie |
| 08.09.2026 | 5 ustaleń |
| 09.09.2026 | 15 ustaleń |
| 10.09.2026 | 0 ustaleń |
| 11.09.2026 | 0 ustaleń |
| 12.09.2026 | 0 ustaleń |
| 13.09.2026 | 0 ustaleń |
| 14.09.2026 | 0 ustaleń |
| 15.09.2026 | 0 ustaleń |
| 16.09.2026 | 0 ustaleń |
| 17.09.2026 | 15 ustaleń |
| 18.09.2026 | 2 ustalenia |
| 19.09.2026 | 14 ustaleń |
| 20.09.2026 | 1 ustalenie |
| 21.09.2026 | 8 ustaleń |
- Przebiegów
- 60sposób content
- W 30 dni
- 60przebiegów
- Ostatni
- 19.09.2026start przebiegu
- Stron w przebiegach
- 20461 przebiegów bez liczby stron
CARD
karta z kodu CREATO_PING, odczyt 16.09.2026| Obszar i ważność | Dostępność · wysoka (D04) |
|---|---|
| Workflow i częstotliwość | creato_ping_avail_v2 działa na LAB247cron co 24 h, osobno T1–T4 · Strony w stanie DOWN i WARNING dostają dodatkowy odczyt co 6 h (timer availability_recheck poza n8n). Od 2026-09-16 sposób ssl daje odczyt ssl_expiry (dni do wygaśnięcia certyfikatu); od 2026-09-17 odczyty trafiają do check_results. |
| Sonda i helper | sposób content · CREATO_PING/helpers/content_check.py |
| Testy |
|
| Typ wyniku | enum: ok / fail / timeout + kod HTTP, fraza znaleziona (tak/nie), flaga ua_fallback |
| Jednostka | brak — wynik jakościowy (obecność frazy); czas pierwszego żądania w ms |
| Próg i reguła | Reguła: kod < 400 i fraza w treści = ok; brak frazy albo kod ≥ 400 = fail. Timeout odpowiedzi 5,0 s, połączenia 2,0 s. |
| Gdzie leżą pokrętła | CREATO_PING/helpers/config.py → TIMEOUTS["content"]CREATO_PING/helpers/common.py → BLOCK_LIKE_STATUSESCREATO_PING/helpers/site_params.py → CRITICAL_CHECK_TYPES (content poza listą)expected_content_string per strona — w opisie zadania strony w ClickUp |
| Retencja odczytów | Każdy odczyt w tabeli check_results bazy LAB247; kod LAB247 tej tabeli nie czyści. Polityki retencji nikt jeszcze nie ustalił. |
| Znane rozbieżności |
|
| Karta przepisana z | CREATO_PING/helpers/content_check.py · CREATO_PING/helpers/common.py · CREATO_PING/helpers/config.py · CREATO_PING/helpers/site_params.py · CREATO_PING/helpers/availability_recheck.py · CREATO_PING/tools/avail_writer_input.py · odczyt 16.09.2026 |
1. fail = okres łaski (IN PROGRESS, bez alertu). 2. fail z rzędu = ustalenie otwarte z etykietą WARNING — content nie jest sprawdzeniem krytycznym i nie daje DOWN; gdy pada też kod HTTP, DOWN przychodzi z tamtego parametru. Pierwszy odczyt ok zamyka ustalenie.
| Ustalenie | Powaga | Pewność | Skutek | Subtask / alarm | Co zrobić |
|---|---|---|---|---|---|
| Weryfikacja treścicontent | Normalne | Ewidentne | WARNING | tak / nie | Sprawdź, czy strona nie wyświetla pustej treści lub błędu PHP. |
LOOP
pętli: 1Trafności jeszcze nie liczymy: zamknięcie subtaska nie niesie dziś werdyktu (prawdziwy / fałszywy / nie dało się sprawdzić). Cztery liczby pojawią się, gdy każde zamknięcie dostanie werdykt — to warunek startu pętli 1.
Sygnał: Strony za WAF-em albo wtyczką bezpieczeństwa zwracały sondzie 403/429, a działały dla ludzi — fałszywe DOWN. · dotyczy też: Kod odpowiedzi HTTP, Przekierowanie HTTP → HTTPS
- 1. Zbiórkaręcznieodczyt z nocnego skanu, bez zapisu per strona
- 2. Werdyktręcznieczłowiek potwierdził, że strona działa w przeglądarce
- 3. Miarabrakliczników trafności wtedy nie było
- 4. Kartabrakkarta parametru powstała 2026-09-16
- 5. Zmianazrobionedruga próba z UA przeglądarki
- 6. Replaybrakbrak zapisanych odczytów do replayu
| Data | Zmiana | Powód | Wpływ na system | Commit · replay |
|---|---|---|---|---|
| 2026-07-19 | Przy kodzie 403, 406, 415, 429 albo 451 sprawdzenie ponawia żądanie z UA przeglądarki; 2xx/3xx za drugim razem = ok (w przekierowaniu: adres końcowy na https).helpers/common.py · helpers/http_check.py · helpers/content_check.py · helpers/redirect_check.py | Blokada robotów na poziomie aplikacji nie jest niedostępnością strony. | cały system Ta sama reguła obowiązuje w weryfikacji treści — oba sprawdzenia czytają BLOCK_LIKE_STATUSES z common.py. | 343b699bez replayubez zapisu zatwierdzenia |