Logo David Burdelak
Webdevelopment

Błąd 404 (Not Found) - co oznacza i jak go naprawić?

Bład 404 (Not Found)

Błąd 404 Not Found oznacza, że serwer działa i odebrał żądanie, ale pod wskazanym adresem nie ma żadnej strony ani pliku. Sam w sobie nie jest problemem: każda strona ma adresy, które nie istnieją, i poprawną odpowiedzią dla nich jest właśnie 404. Kłopot zaczyna się, gdy 404 zwracają adresy, do których prowadzą linki, ruch z Google albo kampanie reklamowe. W tym wpisie pokazuję, jak znajduję błędy 404, które faktycznie warto naprawić, i jak decyduję, czy ustawić przekierowanie, przywrócić stronę, czy zostawić błąd.

Skąd bierze się błąd 404

PrzyczynaTypowa sytuacja
usunięta strona bez przekierowaniawycofany produkt, usunięty wpis, wygaszona kategoria
zmiana adresówmigracja, nowa struktura kategorii, zmiana sluga wpisu, przejście z adresów z .html na adresy bez rozszerzenia
błędne linkiliterówki w linkach wewnętrznych, linki względne, które po zmianie struktury prowadzą w złe miejsce
konfiguracja serwerapo przeniesieniu WordPressa na Nginx brakuje reguły przekazującej adresy do index.php, więc działa tylko strona główna
nieaktualna mapa witrynyw pliku sitemap zostały adresy usuniętych stron

Jak znajduję i naprawiam błędy 404

1. Zbieram błędy 404 z kilku źródeł

Żadne pojedyncze narzędzie nie pokazuje wszystkich błędów 404, więc łączę cztery źródła:

  • Search Console, raport indeksowania stron, pozycja „Nie znaleziono (404)”, czyli adresy, które zna Google,
  • crawl serwisu, np. w Screaming Frogu, który pokazuje błędne linki wewnętrzne razem ze stroną, na której się znajdują,
  • logi serwera, które pokazują błędy 404 zgłaszane przez prawdziwych użytkowników i roboty, wraz z adresem strony odsyłającej,
  • narzędzia do analizy linków, np. Ahrefs, które wskazują nieistniejące adresy z linkami z innych domen.

Z logów najszybciej wyciągam listę najczęściej odwiedzanych adresów z błędem:

awk '$9 == 404 {print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 30

Przy tej liście od razu oddzielam ruch ludzi od botów skanujących, tak jak przy każdej analizie logów serwera.

2. Decyduję, co zrobić z każdym adresem

SytuacjaCo robię
strona przeniesiona pod nowy adresprzekierowanie 301 na nowy adres
strona usunięta, ale istnieje bliski odpowiednikprzekierowanie 301 na odpowiednik, np. wycofany produkt na nowszy model lub kategorię
strona usunięta bez odpowiednika, z linkami zewnętrznymiprzekierowanie na najbliższą tematycznie stronę albo przywrócenie treści
strona usunięta celowo, bez linków i ruchuzostawiam 404 albo zwracam 410, które mówi, że usunięcie jest trwałe
błędny link wewnętrznypoprawiam link w treści lub szablonie, a nie dokładam przekierowania
przypadkowe adresy, np. skanowanie przez botynic nie robię, poprawne 404 to tu właściwa odpowiedź

Nigdy nie przekierowuję wszystkich błędów 404 na stronę główną. Google traktuje takie przekierowania jak tzw. soft 404, czyli stronę, która udaje istniejącą, a użytkownik zamiast odpowiedzi dostaje stronę bez związku z tym, czego szukał. Przekierowania wdrażam regułami serwera w pliku .htaccess lub konfiguracji Nginx i sprawdzam, czy nie tworzą łańcuchów ani pętli przekierowań.

3. Sprawdzam, czy strona błędu zwraca właściwy kod

Własna strona 404 z wyszukiwarką, linkami do najważniejszych kategorii i krótkim komunikatem zatrzymuje użytkownika w serwisie. Musi jednak zwracać kod 404, a nie 200. Sprawdzam to na wymyślonym adresie:

curl -I https://example.pl/adres-ktory-nie-istnieje-123

Jeśli odpowiedź to 200, każdy nieistniejący adres jest dla Google osobną stroną z tą samą treścią, co prowadzi do błędów soft 404 i marnowania zasobów robota.

4. Sprawdzam konfigurację, gdy 404 dotyczy wszystkich podstron

Gdy działa tylko strona główna, a każda podstrona zwraca 404, problemem nie są treści, tylko przepisywanie adresów. W WordPressie na Apache zwykle wystarcza ponowne zapisanie ustawień bezpośrednich odnośników, które odtwarza reguły w .htaccess. Na Nginx dodaję regułę przekazującą nieistniejące pliki do aplikacji:

location / {
    try_files $uri $uri/ /index.php?$args;
}

Błąd 404 a SEO

Pojedyncze błędy 404 nie obniżają pozycji całej strony. Szkodzą wtedy, gdy dotyczą adresów, które miały ruch lub linki, bo ta wartość przepada razem ze stroną. Duża liczba błędów w linkach wewnętrznych i mapie witryny spowalnia też indeksowanie, dlatego sprawdzam, czy mapa strony XML zawiera wyłącznie istniejące adresy, a na dużych serwisach traktuję to jako element, który obejmuje optymalizacja crawl budgetu. Najwięcej błędów 404 powstaje przy zmianie struktury serwisu, więc każda migracja strony zaczyna się u mnie od pełnej mapy przekierowań.

Pozostałe błędy HTTP

Każdy kod błędu wskazuje na inną warstwę, więc diagnozę zaczynam od innego miejsca: