Przejdź do treści głównej
SiteScan.top

Soft 404: nieistniejąca strona, która odpowiada 200 OK

Dlaczego strona „nie znaleziono” z kodem 200 zaśmieca indeks i oślepia monitoring — i jak sprawić, by serwer mówił prawdę o nieistniejących adresach.

SEO · Opublikowano: 27 września 2026 · 5 min czytania · Марк Лебедев

404 to nie awaria. To uczciwa odpowiedź serwera na uczciwe pytanie: pod tym adresem nic nie ma. Soft 404 to ta sama odpowiedź z błędnym kodem — strona mówi „nie znaleziono”, a odpowiedź HTTP mówi 200 OK. Człowiek czyta stronę; crawlery, monitoring i cache czytają status. Okłamywani są wszyscy oprócz człowieka.

Skąd się biorą

Mało kto robi soft 404 celowo. Wyrastają z rozsądnie wyglądających ustawień domyślnych:

Dlaczego to szkodzi

Śmieci w indeksie. Literówki, stare adresy z kampanii, zapytania skanerów podatności — wszystko staje się „stronami”. Google z czasem wyłapuje wiele z nich i pokazuje w raporcie Soft 404 w Search Console, ale dopiero po ich przecrawlowaniu i nie wszystkie.

Budżet crawlowania. Każda fałszywa strona to pobranie, którego crawler nie przeznaczył na prawdziwą treść. Na dużej witrynie z parametrycznymi listami to nie jest błąd zaokrąglenia.

Duplikaty strony głównej. Masowe przekierowania i powłoki SPA sprawiają, że tysiące URL-i zwraca tę samą treść, co utrudnia wybór wersji kanonicznej strony, na której naprawdę ci zależy.

Ślepy monitoring. Sprawdzanie dostępności, link checkery i testy syntetyczne patrzą na kod odpowiedzi. Jeśli martwe linki odpowiadają 200, każdy audyt uszkodzonych linków pokaże czystą witrynę.

Zabrudzona analityka. Wejścia na nieistniejące strony liczą się jako zwykłe odsłony, ze zwykłym współczynnikiem odrzuceń i czasem na stronie. Ruch „nie znaleziono” nigdy nie wypływa jako błąd.

Jak to sprawdzić

Odpytaj adres, który na pewno nie istnieje, i patrz wyłącznie na status:

curl -s -o /dev/null -w "%{http_code}\n" https://example.com/this-page-does-not-exist-8f3a/

Wszystko poza 404 lub 410 to problem. Powtórz dla każdego szablonu z własnym routingiem: /blog/nonexistent, /product/nonexistent, /search?q=zzzzqx, adres bez prefiksu językowego. Raport SiteScan robi to za ciebie: sprawdza, co serwer odpowiada na nieistniejący adres, i oznacza odpowiedź 200 jako problem.

Jak naprawić

Zwracaj prawdziwe 404. Na witrynie statycznej lub prerenderowanej niech nginx serwuje gotową stronę z właściwym kodem:

error_page 404 /404.html;
location / {
    try_files $uri $uri/ =404;
}

W SPA z renderowaniem po stronie serwera serwer musi znać tablicę tras: jeśli żadna trasa nie pasuje albo trasa pasuje, ale rekordu nie ma, odpowiedz 404, zanim zaczniesz wysyłać HTML. Jeśli serwer naprawdę nie może tego wiedzieć — czysto kliencka aplikacja na prostym hostingu — dodaj <meta name="robots" content="noindex"> do renderowanego w przeglądarce widoku „nie znaleziono”. To ostateczność: strona nie trafi do indeksu, ale monitoring i link checkery nadal zobaczą 200.

Dla treści usuniętej na zawsze — 410. Wycofany produkt albo skasowany artykuł to „już nie ma”, a nie „nie znaleziono”. 410 podpowiada crawlerom, żeby szybciej przestały pytać.

Przekierowanie tylko na prawdziwy odpowiednik. 301 jest właściwe, gdy treść się przeniosła: artykuł pod nową nazwą, model-następca. Masowe przekierowanie na stronę główną to nie naprawa, tylko ten sam soft 404 z dodatkowym skokiem.

Strona 404 ma być pomocna, a nie udana. Wyszukiwarka, linki do głównych sekcji, u nas — pole do uruchomienia skanu: wszystko to zmieści się na stronie błędu. Strona może pomagać, ile chce, ale kod odpowiedzi nadal musi brzmieć 404.

Lista kontrolna

  1. Losowy URL w każdym szablonie routingu zwraca 404.
  2. Puste strony wyszukiwania i list mają noindex albo zwracają 404.
  3. Usunięta treść zwraca 410 albo 301 na prawdziwy odpowiednik.
  4. Brak reguły, która wszystko przekierowuje na stronę główną.
  5. Weryfikacja botów zwraca 403 lub 429, a nie 200.
  6. Strona 404 pomaga odwiedzającemu i nadal odpowiada 404.

Przeczytaj także

Sprawdź, ile z tego dotyczy Twojej strony

Darmowe skanowanie pokaże uszkodzone linki, błędy JS i problemy z wydajnością w minutę.