Przekierowanie 301 a 302: które wybrać i ile kroków śledzi Google
Krótka odpowiedź: w wyborze „przekierowanie 301 a 302” użyj 301 (albo jej bliźniaka 308), gdy stary adres zniknął na dobre, a 302 (albo 307) tylko wtedy, gdy przeniesienie jest tymczasowe i stary adres ma zostać w wyszukiwarce. Google traktuje przekierowanie stałe jako silny sygnał, że należy przetworzyć cel, a tymczasowe jako słaby. Domyślnie podąża za nim do 10 kroków, ale każdy stary adres i tak warto kierować na cel ostateczny w jednym kroku.
Przekierowanie 301 a 302: czym się różnią?
Przekierowanie to odpowiedź serwera, która mówi „tu nie ma, idź tam” i podaje nowy adres w nagłówku Location. Powód podaje kod statusu. W standardzie HTTP (RFC 9110) 301 oznacza, że strona ma nowy, stały adres, a 302, że tylko tymczasowo znajduje się gdzie indziej, więc klient ma nadal używać adresu pierwotnego. Google odczytuje tę różnicę tak samo i według niej działa:
| Kod | Znaczenie | Co robi Google |
|---|---|---|
| 301 | Przeniesiono na stałe | Podąża za nim; silny sygnał, że cel należy przetworzyć |
| 308 | Stałe przekierowanie | Tak samo jak 301 |
| 302 | Znaleziono (tymczasowo) | Podąża za nim; słaby sygnał, że cel należy przetworzyć |
| 307 | Tymczasowe przekierowanie | Tak samo jak 302 |
Tabela pochodzi ze strony Google o kodach statusu HTTP (ostatnia aktualizacja 2026-02-04). Co to znaczy w wyszukiwarce, opisuje strona Google o przekierowaniach (ostatnia aktualizacja 2026-04-14): przekierowania stałe pokazują w wynikach nowy cel, a tymczasowe stronę źródłową. Strony Google podlinkowane tutaj przeczytaliśmy 4 listopada 2026.
Po co w ogóle są 307 i 308? Google traktuje je jak 302 i 301, ale zaznacza, że różnią się semantycznie, więc wybierz kod, który pasuje do sprawy. Różnica dotyczy metody żądania: po 301 lub 302 klient może zamienić POST na GET, po 307 lub 308 musi zachować metodę (RFC 9110, sekcja 15.4). Przy zwykłym otwieraniu stron tego nie zauważysz; w formularzach i interfejsach, które przyjmują żądania POST, użyj 308 lub 307.
Które przekierowanie wybrać?
Większość przypadków rozstrzyga jedno pytanie. Strona Google o przekierowaniach mówi: „Use permanent redirects when you're sure that the redirect won't be reverted.” Jeśli stary adres nigdy nie wróci, użyj 301. Jeśli wróci, użyj 302.
| Sytuacja | Użyj | Uwaga |
|---|---|---|
| Strona dostała nowy adres (nowy slug, nowy katalog) | 301 lub 308 | Nowy cel pojawia się w wyszukiwarce |
| Dwie strony połączono w jedną | 301 z każdego starego adresu na połączoną stronę | Poradnik Google o przenoszeniu witryny dopuszcza to dla połączonych treści |
| http na https albo www na wersję bez www (lub odwrotnie) | 301 lub 308 | Google: wybierz jeden preferowany adres i przekieruj pozostałe na niego |
| Usługa przez jakiś czas nie działa, a odwiedzający widzą stronę z wyjaśnieniem | 302 lub 307 | Stary adres zostaje w wyszukiwarce |
| Strona zniknęła i nic jej nie zastępuje | Bez przekierowania: 404 lub 410 | Strona zwraca kod błędu zamiast przekierowania |
| Wiele starych adresów na stronę główną | Nie rób tego | Google: może to zostać potraktowane jako soft 404 |
Ostatni wiersz pochodzi z poradnika Google o przenoszeniu witryny (ostatnia aktualizacja 2026-08-20), a jak znaleźć takie przypadki, pokazuje nasz artykuł o błędach soft 404. Sam poradnik dotyczy przeniesienia całej witryny na nową domenę, a to większe zadanie, niż obejmuje ten artykuł.
Ile kosztuje zły wybór? Przekierowanie 302 na stronie, która przeniosła się na stałe, mówi Google coś nieprawdziwego. Przekierowanie tymczasowe zostawia stronę źródłową w wynikach, a „the target page might still be indexed if other canonicalization signals are present”, czyli cel może zostać zaindeksowany, jeśli są inne sygnały kanonizacji. To jest „może”. Nie znaleźliśmy strony Google, która obiecywałaby, że długo działające 302 zamieni się później w 301. Nie czekaj więc na to.
Za iloma przekierowaniami podąża Google?
Strona Google o kodach statusu mówi: „By default, Google's crawlers follow up to 10 redirect hops.” Googlebot zwykle podąża za 10 krokami przy treściach internetowych, inne produkty Google mogą mieć inne limity, a to, co zwraca sam przekierowujący adres, jest ignorowane; przetwarzana jest treść ostatecznego celu.
Dziesięć to pułap, a nie cel. Poradnik o przenoszeniu witryny radzi kierować wprost na cel ostateczny, a gdy to niemożliwe, trzymać łańcuch krótki, najlepiej nie więcej niż 3 i poniżej 5 kroków. Uzasadnienie: „Chaining redirects adds latency for users, and not all user agents and browsers support long redirect chains.” Strona Google o błędach skanowania (ostatnia aktualizacja 2025-12-18) dodaje, że długie łańcuchy źle wpływają na skanowanie.
Łańcuchy rosną warstwami, a nie z zamiaru. Typowy ma trzy kroki, zanim pojawi się strona:
http://example.com/stary-poradnik 301 -> https://example.com/stary-poradnik
https://example.com/stary-poradnik 301 -> https://www.example.com/stary-poradnik
https://www.example.com/stary-poradnik 301 -> https://www.example.com/nowy-poradnik
https://www.example.com/nowy-poradnik 200
Rozwiązanie to jeden krok na każdy stary adres: każdy zapis starego adresu odpowiada jednym przekierowaniem 301, które od razu podaje adres ostateczny. To samo dotyczy twoich własnych linków: linki wewnętrzne, znaczniki canonical i wpisy w mapie witryny kieruj na adres ostateczny. Przekierowanie jest dla odwiedzających z zewnątrz i starych zakładek, a nie dla twojej własnej nawigacji.
Jak ustawić przekierowanie 301
Użyj przekierowania po stronie serwera. Strona Google o przekierowaniach wymienia je jako rodzaj, który Google najchętniej interpretuje poprawnie. Poniższe przykłady dla nginx i Node uruchomiliśmy 4 listopada 2026 (nginx 1.24.0, Node 25.9.0) i odczytaliśmy odpowiedzi poleceniem curl. Wiersze dla Apache to przykład samego Google, którego nie uruchamialiśmy.
Najpierw nginx. Reguła location należy do bloku server dla https://example.com. Dwa bloki server kierują każdy inny zapis tam w jednym kroku, a $request_uri zachowuje ścieżkę i parametry:
# jedna strona przeniesiona na stałe (przy przeniesieniu tymczasowym użyj 302)
location = /stary-poradnik {
return 301 https://example.com/nowy-poradnik;
}
# http:// i https://www. prowadzą oba na https://example.com
server {
listen 80;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl;
server_name www.example.com;
ssl_certificate /etc/ssl/example.com.pem;
ssl_certificate_key /etc/ssl/example.com.key;
return 301 https://example.com$request_uri;
}
Node bez pakietów. Zamień 301 na 308, jeśli żądania POST mają pozostać żądaniami POST:
import http from 'node:http';
const moved = new Map([['/stary-poradnik', '/nowy-poradnik']]); // stara ścieżka -> nowa ścieżka
http.createServer((req, res) => {
const { pathname, search } = new URL(req.url, 'http://localhost');
const target = moved.get(pathname);
if (target) {
res.writeHead(301, { location: `https://example.com${target}${search}` });
return res.end();
}
res.writeHead(200, { 'content-type': 'text/plain' });
res.end('ok');
}).listen(3000);
Apache, ze strony Google (w konfiguracji serwera lub w pliku .htaccess):
Redirect permanent "/stary" "https://example.com/nowy"
Redirect temp "/dwa-stare" "https://example.com/dwa-nowe"
Jeśli nie możesz dotknąć serwera, sprawdź najpierw swoją platformę: Google podaje Blogger i Shopify jako przykłady, które mogą mieć narzędzia do przekierowań wbudowane. Google odczytuje też meta refresh (0 sekund liczy się jako stałe, opóźnienie jako tymczasowe) i przekierowania w JavaScript, ale tylko jako rozwiązanie awaryjne. Przy JavaScript Google „might never see it”, jeśli renderowanie się nie powiedzie.
Jak sprawdzić przekierowania i co znajduje SEOgrinder
Wystarczą dwa polecenia curl. Pierwsze wypisuje każdy krok ze statusem i celem, drugie podaje liczbę kroków i adres końcowy. Używają GET, a nie HEAD, bo niektóre serwery odpowiadają na HEAD inaczej:
curl -s -L -o /dev/null -D - http://example.com/stary-poradnik | grep -i -E "^(HTTP|location)"
curl -s -L -o /dev/null -w "%{num_redirects} przekierowań, cel: %{url_effective}\n" http://example.com/stary-poradnik
Uruchom je dla każdego zapisu, pod którym docierają do ciebie ludzie i linki: http i https, z www i bez. Pożądany wynik to jedno 301, a potem 200.
SEOgrinder to nasze narzędzie, które budujemy. Darmowy skan w SEOgrinder zagląda do przekierowań w trzech miejscach (nazwy jak w polskim interfejsie):
- Zakładka „Technika i bezpieczeństwo”, karta „Przekierowania”. Wypisuje kroki przeskanowanego adresu. Jeśli ten adres przekierowuje więcej niż raz, zadanie „N przekierowań pod rząd” pokazuje kroki i radzi, by pierwszy adres wskazywał od razu na cel końcowy.
- Ta sama zakładka, karta „Ujednolicenie domeny”. Oczekuje, że http i https, z www i bez, kończą się pod jednym adresem. Zadanie „N konkurujących wersji witryny” pojawia się, jeśli tak nie jest. „Przekierowanie domeny tylko tymczasowe” pojawia się, jeśli któryś zapis przekierowuje kodem 302, 303 lub 307.
- Zakładka „Strona w Google”. Zadanie „N linków wewnętrznych prowadzi okrężną drogą” wymienia linki wewnętrzne, których cel przekierowuje albo wskazuje przez canonical inną stronę (do 60 linków wewnętrznych przeskanowanej strony). Przy małych liczbach brzmienie jest odmienione, na przykład „Jeden odnośnik wewnętrzny prowadzi okrężną drogą”.
Dwa ograniczenia. Kontrola łańcuchów obejmuje przeskanowany adres i zapisy twojej domeny, a nie każdy stary adres twojej witryny, więc stare adresy testuj poleceniem curl. SEOgrinder nie oceni też, czy cel jest odpowiednim następcą, ani jak Google zaklasyfikował przekierowanie. „Przekaż AI” zamienia zadanie w briefing dla agenta programistycznego, a „Sprawdź ponownie” uruchamia po twojej zmianie świeży skan.
Najczęstsze błędy
- 302 przy stałym przeniesieniu. Stary adres może zostać w wynikach. Użyj 301 lub 308.
- 301 przy czymś tymczasowym. Sklep zamknięty na tydzień potrzebuje 302.
- Nakładające się reguły, które budują łańcuchy. Najpierw http, potem https, potem www, potem nowa strona: trzy kroki. W każdej regule podaj od razu adres ostateczny.
- Wysyłanie wszystkiego na stronę główną. Przekieruj na równoważną stronę albo odpowiedz kodem 404 lub 410.
- Własne linki, które nadal używają starego adresu. Zaktualizuj linki wewnętrzne, znaczniki canonical i mapę witryny.
- Blokowanie starego adresu w robots.txt. Google nie może go wtedy pobrać i nigdy nie zobaczy przekierowania. W poście Google z 2011 roku Do 404s hurt my site? robot „has to be able to crawl that URL”, żeby zobaczyć jego odpowiedź.
- Zbyt wczesne usunięcie przekierowania. Dla przenosin witryny Google pisze: „Keep the redirects for as long as possible, generally at least 1 year.” Zastosowanie tego do pojedynczej strony to nasza interpretacja.
Najczęstsze pytania
Czy przekierowanie 301 szkodzi SEO?
Poradnik Google o przenoszeniu witryny mówi: „301 and other permanent redirects don't cause a loss in PageRank.” To zdanie stoi w poradniku o przenosinach witryny, więc zastosowanie go do pojedynczej strony to nasza interpretacja. Przed czym Google ostrzega, to długie łańcuchy, przekierowania na niepasujące strony (soft 404) i, w czasie przenosin, wahania pozycji, dopóki trwa ponowne skanowanie.
Czy 308 jest lepsze niż 301?
Dla Google są równoważne. 308 zachowuje dodatkowo metodę żądania, co ma znaczenie w formularzach i interfejsach. Dla zwykłych stron wystarczy 301.
Jak długo trwa, zanim Google pokaże nowy adres?
Dla pojedynczej strony Google nie podaje, o ile wiemy, żadnego czasu. Przy przenosinach witryny pisze, że w średnio dużych witrynach „it can take a few weeks or more”, zanim nowe adresy stopniowo zastąpią stare w wynikach. Nie obiecuj żadnej daty.
Twój następny krok
Uruchom pierwsze polecenie curl dla swoich starych adresów i dla każdego zapisu swojej domeny. Jeśli któreś żądanie potrzebuje więcej niż jednego kroku, skieruj pierwszy adres wprost na ostateczny. Potem przeskanuj witrynę w SEOgrinder, otwórz zakładkę „Technika i bezpieczeństwo”, przyjrzyj się kartom „Przekierowania” i „Ujednolicenie domeny” i po swojej zmianie kliknij „Sprawdź ponownie”. Więcej o technicznych podstawach znajdziesz w naszej checkliście SEO.