Błędy soft 404: czym są i jak je naprawić

Autor: SEOgrinder · Opublikowano · 9 min czytania

Krótka odpowiedź: Soft 404 to strona, która pokazuje odwiedzającym „nie znaleziono” (albo prawie nic), a mimo to odpowiada kodem sukcesu 200 zamiast 404. Google traktuje to jako błąd: gdy treść odpowiedzi 2xx wskazuje na usterkę, Search Console zgłasza soft 404. Naprawa polega na tym, żeby serwer wysyłał kod zgodny z prawdą: 404 lub 410 dla stron, których nie ma, 301 na równoważną stronę dla przeniesionych oraz prawdziwa treść dla stron, które mają istnieć.

Czym jest soft 404?

Każda odpowiedź serwera zaczyna się od kodu statusu i ten kod pada przed jakąkolwiek treścią. 200 znaczy „w porządku, oto strona”. 404 znaczy „nic tu nie ma”. Soft 404 to rozjazd między jednym a drugim: strona na ekranie mówi „nie znaleziono” albo „0 wyników” albo nie pokazuje nic wartego przeczytania, a kod i tak brzmi 200.

Google opisuje ten przypadek w dokumentacji o kodach statusu HTTP i błędach sieci. Przy odpowiedzi 2xx Google bierze pod uwagę treść. Jeśli treść wskazuje na błąd, na przykład pusta strona albo komunikat o błędzie, Search Console pokazuje błąd soft 404. Przy prawdziwym kodzie 4xx Google w ogóle nie korzysta z treści adresu.

Różnicę widać w terminalu. Na witrynie z tym problemem zapytanie o adres, który nie istnieje, wygląda tak (adres jest przykładowy):

$ curl -s -o /dev/null -w "%{http_code}\n" https://twoja-strona.example/strony-nie-ma
200

Poprawna odpowiedź to 404. Odwiedzający widzi w obu przypadkach ten sam przyjazny komunikat „Nie znaleziono strony”. Różni się tylko kod, a kod to pierwsze, co czyta robot.

Słowo „soft” nie znaczy „łagodny”. Znaczy, że serwer mówi, iż wszystko jest w porządku, podczas gdy strona mówi, że nie jest.

Dlaczego soft 404 to problem?

Oto, co jest udokumentowane, a co nie.

Udokumentowane:

  • Search Console wypisuje taki adres jako błąd soft 404, więc sam Google uznaje to za problem.
  • Przy prawdziwym 404 lub 410 Google nie korzysta z treści adresu. Przy 200 to Google musi zgadywać na podstawie treści, czy strona jest błędem.

Nieudokumentowane: bezpośredni wpływ na pozycje. Google nazywa ten błąd w swoim raporcie. Nie mówi, że soft 404 ściąga w dół inne strony twojej witryny, i nie znaleźliśmy źródła, które by to dowodziło. Do twierdzeń w stylu „soft 404 niszczą twoje SEO” podchodź z nieufnością.

Nasza ocena, i nic więcej: strona bez wartości nie powinna być oferowana jako wynik, a poprawka kosztuje niewiele. Jest też powód praktyczny, który nie ma nic wspólnego z Google: narzędzia do sprawdzania linków i monitoringu dostępności czytają kody odpowiedzi. Jeśli każdy adres odpowiada 200, nie powiedzą ci, że jakiś link jest zepsuty, a odwiedzający, którzy wejdą w stary link, nigdy nie dowiedzą się, że strony już nie ma.

Skąd się bierze soft 404?

Soft 404 zwykle wynika z takich wzorców:

  • Aplikacja jednostronicowa (SPA) odpowiada na każdą ścieżkę tą samą powłoką. Serwer wysyła aplikację z kodem 200 dla dowolnego adresu. Dopiero po wykonaniu JavaScriptu ekran mówi „nie znaleziono”. Kod został ustalony wcześniej i brzmi 200. Google przetwarza takie strony etapami (crawlowanie, renderowanie, indeksowanie), a strona z kodem 200 trafia do kolejki renderowania. Ten model wyjaśniają podstawy JavaScriptu w dokumentacji Google. Crawlery, które w ogóle nie wykonują skryptów, widzą tylko powłokę i kod 200.
  • Ładna strona błędu z kodem 200. CMS, framework albo reguła proxy wyświetla zaprojektowany szablon „nie znaleziono”, ale nikt nie ustawił kodu.
  • Puste strony list. Kategoria, tag albo wewnętrzna wyszukiwarka bez wyników nadal odpowiada 200 i pokazuje „0 wyników” albo pustą ramkę.
  • Wyprzedane lub wycofane produkty. Strona zostaje, a poza komunikatem „niedostępne” nie ma na niej wiele więcej. Strona, która nadal ma prawdziwy opis i informację o dostępności, to inny przypadek niż strona z samym suchym komunikatem.
  • Przekierowywanie wszystkiego na stronę główną. Usunięta strona, która odsyła odwiedzających na start, kończy się kodem 200 i niepowiązaną treścią. Strona główna rzadko jest odpowiednikiem strony, której już nie ma.

Kolejna przyczyna to strona z cienką treścią: szablon z prawie niczym w środku, na przykład zaślepka albo na wpół zbudowany dział. Treść, która wygląda jak komunikat o błędzie albo pusta strona, może zostać oznaczona, nawet jeśli nikt nie zamierzał robić z niej strony błędu.

Jak znaleźć błędy soft 404?

Masz trzy drogi i uzupełniają się.

  1. Search Console. Otwórz raport indeksowania stron (w angielskiej wersji „Page indexing”) i poszukaj przyczyny „Soft 404”. Wypisuje adresy, które sam Google przypisał do tej kategorii. Narzędzie Kontrola adresu URL pokazuje, co Google dostaje z pojedynczego adresu.
  2. Terminal. Zapytaj o adres, który nie może istnieć, i odczytaj kod (polecenie poniżej).
  3. Przeglądarka. Otwórz narzędzia deweloperskie, przejdź na kartę „Sieć” (Network), wczytaj wymyślony adres i spójrz na kod pierwszego żądania. Sama strona nic ci nie powie, bo przy każdym kodzie wygląda tak samo.

Do kontroli w terminalu opcja -L podąża za przekierowaniami, więc zobaczysz też, gdzie adres ostatecznie ląduje:

curl -s -L -o /dev/null -w "%{http_code} %{url_effective}\n" https://twoja-strona.example/strony-nie-ma

Prawidłowy wynik to 404. Jeśli dostajesz 200 https://example.com/, serwer przekierowuje nieznane adresy na stronę główną. Używaj GET, jak tutaj, a nie curl -I, bo niektóre serwery odpowiadają na żądanie HEAD inaczej.

Testuj z zewnątrz: pytaj o adres publiczny, a nie bezpośrednio o aplikację. CDN, cache albo firewall przed aplikacją mogą zmienić odpowiedź.

Jak SEOgrinder sprawdza soft 404

Darmowy skan w SEOgrinder prosi twoją witrynę o adres, który sam wymyśla, z losową nazwą, która nie może istnieć. Jeśli odpowiedź to 200, zgłasza znalezisko. Przekierowanie tego adresu na stronę główną liczy się tak samo, bo też kończy się kodem 200. Wynik pojawia się w zakładce „Strona w Google”, w karcie „Indeksowanie”, jako wiersz: „Nieznane adresy poprawnie zwracają 404” albo „Nieznane adresy zwracają 200 zamiast 404”. Znalezisko trafia na listę zadań z radą, by zwracać prawdziwy kod 404 lub 410.

Dwa uczciwe ograniczenia. Po pierwsze, ten test sprawdza, jak twój serwer obsługuje adresy, które nie istnieją. Nie mówi, które z twoich prawdziwych adresów Google zapisał jako soft 404. Dla pojedynczych adresów werdykt jest w Search Console. W lokalnej instalacji połączonej z Search Console SEOgrinder czyta też zapisany status indeksowania sprawdzanej strony i daje znać, gdy Google prowadzi ją jako soft 404. Po drugie, test nie powie, czy twoja strona z cienką treścią wygląda dla Google na pustą. Przegląd witryny zgłasza strony z cienką treścią i zepsute linki wewnętrzne, czyli miejsca, od których problem często się zaczyna.

Jaki kod odpowiedzi jest właściwy? Tabela decyzji

Właściwa odpowiedź zależy od tego, co jest prawdą o stronie. Dopasuj kod do prawdy, a nie odwrotnie.

SytuacjaWłaściwa odpowiedźUwaga
Strona zniknęła na stałe, bez odpowiednika404 lub 410Zaprojektowana strona błędu jest w porządku, ale musi wysyłać kod błędu
Strona przeniosła się pod nowy adres301 (lub 308) na równoważną nową stronęSilny sygnał, że Google ma przetworzyć cel
Przeniesienie jest naprawdę tymczasowe302 (lub 307)Słaby sygnał, więc nie dla przeniesień na stałe
Strona istnieje, ale jest cienka lub prawie pustaDodaj prawdziwą treśćAlbo usuń, jeśli nie ma celu
Strona listy lub wyszukiwania jest pusta na stałe404Nie umieszczaj jej w linkach ani w mapie witryny
Strona listy jest pusta tylko chwilowoPokaż coś użytecznegoNa przykład powiązane pozycje i komunikat, z kodem 200
Produkt zniknął na stałe404 lub 410, albo 301 na jego bezpośredniego następcęNie na stronę główną
Produkt jest chwilowo niedostępnyZostaw stronę z jej prawdziwą treściąKod 200 jest tu właściwy

Google traktuje 301 i 308 jako silny sygnał, że cel przekierowania ma zostać przetworzony, a 302 i 307 jako słaby. Domyślnie podąża za najwyżej dziesięcioma krokami przekierowań i ignoruje treść adresu, który przekierowuje. Przekierowuj więc raz, od razu na adres docelowy.

Jak naprawić soft 404 w nginx, Node i aplikacjach jednostronicowych

nginx

Ta konfiguracja pokazuje zaprojektowaną stronę błędu i zachowuje kod 404. Linia error_page 404 /404.html; zachowuje oryginalny kod, dopóki nie dopiszesz =200, więc tego nie dodawaj.

server {
    root /var/www/example;
    error_page 404 /404.html;

    location / {
        try_files $uri $uri/ =404;
    }

    location = /404.html {
        internal;
    }

    # usunięte celowo
    location /stara-akcja/ {
        return 410;
    }

    # przeniesione
    location = /stara-strona {
        return 301 https://example.com/nowa-strona;
    }
}

Node

W trasach z danymi kod musi najpierw sprawdzić rekord, a dopiero potem zdecydować o kodzie odpowiedzi. Ten przykład używa wyłącznie wbudowanych modułów Node:

import http from 'node:http';

const produkty = new Map([['niebieski-kubek', 'Niebieski kubek']]); // zastępnik twojej bazy danych

http.createServer((req, res) => {
  const { pathname } = new URL(req.url, 'http://localhost');
  const trafienie = /^\/produkty\/([a-z0-9-]+)$/.exec(pathname);
  const nazwa = trafienie && produkty.get(trafienie[1]);
  res.writeHead(nazwa ? 200 : 404, { 'content-type': 'text/html; charset=utf-8' });
  res.end(nazwa ? `<h1>${nazwa}</h1>` : '<h1>Nie znaleziono strony</h1>');
}).listen(3000);

Strona błędu może być przyjazna i zaprojektowana, a kod i tak pozostaje 404. Większość frameworków ma do tego funkcję lub hak „nie znaleziono”. Szukaj tej, która ustawia kod, a nie tylko wyświetla szablon.

Aplikacje jednostronicowe

Serwer musi wiedzieć, które ścieżki naprawdę istnieją. Popularny skrót, czyli „wysyłaj index.html dla wszystkiego”, tworzy właśnie ten problem. W nginx możesz wypisać prawdziwe trasy i na resztę odpowiadać 404:

location = / {
    try_files /index.html =404;
}

location ~ ^/(o-nas|kontakt|docs)/?$ {
    try_files /index.html =404;
}

location / {
    try_files $uri =404;
}

Zasoby, takie jak skrypty i obrazy, znajduje ostatni blok, a każda inna ścieżka dostaje 404. Jeśli lista tras jest długa albo często się zmienia, generuj ją z routera podczas budowania aplikacji. Alternatywa to renderowanie prawdziwych stron na serwerze lub z wyprzedzeniem, tak by każdy adres miał własny plik HTML i serwer mógł za niego odpowiadać. Sam Google nazywa renderowanie po stronie serwera lub wstępne renderowanie dobrym pomysłem, bo przyspiesza stronę dla użytkowników i crawlerów oraz dlatego, że nie wszystkie boty wykonują JavaScript. Dla aplikacji, w których ustawienie kodu odpowiedzi jest niemożliwe lub niepraktyczne, podstawy JavaScriptu w dokumentacji Google wskazują jeszcze dwa sposoby: przekierować przez JavaScript na adres, który odpowiada 404 (na przykład /not-found), albo dodać przez JavaScript na stronach błędów znacznik <meta name="robots" content="noindex">.

Po każdej zmianie powtórz kontrolę curl i przetestuj jedną prawdziwą stronę, jedną przeniesioną i jeden adres, który nie może istnieć.

Najczęstsze błędy

  • Naprawianie wyglądu zamiast kodu. Piękna strona „nie znaleziono”, która wysyła 200, nadal jest soft 404.
  • Przekierowywanie wszystkich brakujących stron na stronę główną. Ukrywa to problem przed twoimi własnymi narzędziami i daje odwiedzającym coś innego, niż chcieli. Przekieruj na równoważną stronę albo odpowiedz 404.
  • error_page 404 =200 /index.html; i podobne skróty. Zmieniają kod na 200 dla każdego nieznanego adresu.
  • Testowanie tylko w przeglądarce. Przeglądarka wygląda tak samo przy każdym kodzie. Odczytaj kod.
  • Blokowanie adresów w robots.txt zamiast poprawienia kodu. Crawler, który nie może pobrać strony, nigdy nie zobaczy jej kodu odpowiedzi.
  • Zostawianie martwych adresów w mapie witryny. Mapa witryny ma wymieniać tylko strony, które istnieją i odpowiadają 200.
  • Oczekiwanie, że raport zniknie od razu. Wpis w Search Console zmienia się, gdy Google ponownie pobierze adres. Nikt nie obieca, kiedy to nastąpi.

Najczęstsze pytania

Czy soft 404 szkodzi moim pozycjom?

Nie jest to udowodnione. Google zgłasza go jako błąd w Search Console i to jest udokumentowane. Bezpośrednia kara dla reszty witryny nie jest opisana w żadnym ze źródeł, z których korzystaliśmy. Rozsądne podejście: napraw go dlatego, że odpowiedź jest błędna, a nie dla obiecanego zysku.

Czy soft 404 to to samo co 404?

Nie. 404 to uczciwa odpowiedź: kod mówi, że strony nie ma. Soft 404 mówi 200, podczas gdy treść mówi coś przeciwnego.

Wysyłać 404 czy 410?

Oba to kody błędów 4xx i przy żadnym z nich Google nie korzysta z treści adresu. 404 to zwykła odpowiedź na „nie znaleziono”. 410 mówi „usunięto na stałe”, więc pasuje do stron, które zostały wyłączone celowo.

Czy mogę mieć własną stronę 404?

Tak, a nawet warto. Zaprojektuj ją, jak chcesz, dodaj link do strony głównej albo wyszukiwarkę, ale upewnij się, że kod to 404.

Jak sprawdzić całą witrynę?

Uruchom darmowy skan, by sprawdzić, jak twój serwer odpowiada na nieznane adresy, i zajrzyj do raportu w Search Console po adresy, które oznaczył Google. Sprawdź ręcznie jeszcze jedno: strony, na których jest tylko krótki komunikat.

Następny krok

Wywołaj curl na adres, który nie może istnieć w twojej witrynie. Jeśli nie dostajesz 404, napraw to najpierw. Potem uruchom darmowy skan w SEOgrinder, znajdź wiersz o soft 404 w karcie „Indeksowanie” w zakładce „Strona w Google” i po swojej zmianie kliknij „Sprawdź ponownie”, żeby zobaczyć nowy wynik. Szerszy kontekst, czyli co jeszcze sprawdzić, znajdziesz w checkliście SEO.

Więcej z bloga