Przekierowanie 301 czy 302: które wybrać i kiedy ma to znaczenie dla SEO
Przekierowanie wysyła odwiedzających i wyszukiwarki z jednego adresu na inny. Dla człowieka wynik wygląda tak samo bez względu na typ. Dla wyszukiwarki typ jest sygnałem: „strona przeniosła się na stałe” albo „strona jest tymczasowo gdzie indziej”. Zły wybór rzadko psuje witrynę z dnia na dzień, ale może spowolnić przeniesienie pozycji na nowy adres i wpłynąć na to, który URL Google pokazuje w wynikach.
301 i 302 — po jednym zdaniu
- 301 Moved Permanently — starego adresu już nie ma, odtąd używaj nowego. Wyszukiwarki traktują to jako silny sygnał, że indeksowany i kanoniczny ma być adres docelowy.
- 302 Found (tymczasowe) — treść jest chwilowo pod innym adresem, głównym pozostaje adres pierwotny. Wyszukiwarki zwykle zostawiają w indeksie adres pierwotny.
Zmieniasz URL i nie zamierzasz wracać do starego — użyj 301. Wrócisz (strona konserwacji, krótka promocja, test A/B, chwilowo niedostępny produkt) — 302.
Wszystkie typy przekierowań w jednej tabeli
| Typ | Znaczenie | Metoda żądania przy przekierowaniu | Typowe zastosowanie |
|---|---|---|---|
| 301 | Stałe | Przeglądarka może zmienić POST na GET | Zmiana URL, przeniesienie domeny, HTTP→HTTPS |
| 302 | Tymczasowe | Przeglądarka może zmienić POST na GET | Tymczasowe przeniesienie, routing geograficzny i językowy, testy |
| 303 | Zobacz inny | Zawsze GET | Po wysłaniu formularza (post/redirect/get) |
| 307 | Tymczasowe | Metoda i treść zachowane | Tymczasowe przekierowania API i formularzy |
| 308 | Stałe | Metoda i treść zachowane | Stałe przeniesienie, gdy POST musi pozostać POST |
| Meta refresh | Znacznik HTML, opóźnienie 0 lub więcej | — | Gdy nie masz dostępu do konfiguracji serwera |
| JavaScript | window.location w skrypcie | — | Aplikacje jednostronicowe, ostateczność |
Dla SEO dokumentacja Google zalicza 301 i 308 do stałych, a 302, 303 i 307 do tymczasowych. Różnica między 301 a 308 (czy 302 a 307) ma znaczenie dla przeglądarek i API, a nie dla pozycji.
Jak Google traktuje przekierowania
Google opisuje stałe przekierowania po stronie serwera jako silny sygnał przy wyborze adresu kanonicznego, a tymczasowe jako słaby. W praktyce:
- Przy 301/308 Google zwykle zastępuje w wynikach stary adres nowym i przenosi na niego sygnały, np. linki.
- Przy 302/307 Google zwykle jeszcze przez jakiś czas pokazuje stary adres — przecież zadeklarowałeś, że przeniesienie jest tymczasowe.
- Jeśli 302 działa długo, a adres docelowy wygląda na stałe zastępstwo, Google z czasem może zacząć traktować je jako stałe. Nie warto na tym polegać: jeśli chodzi Ci o „na zawsze”, powiedz to kodem 301.
- Meta refresh z zerowym opóźnieniem jest zwykle rozumiany jako przekierowanie stałe, z opóźnieniem — jako tymczasowe. Przekierowania JavaScript działają dopiero po wyrenderowaniu strony, co następuje później i mniej niezawodnie. Używaj obu tylko wtedy, gdy przekierowanie serwerowe jest niemożliwe.
Przekierowanie to tylko jeden z sygnałów kanonizacji, obok tagu rel=canonical, linków wewnętrznych i mapy witryny. Dbaj o ich spójność; jak współdziałają, wyjaśnia artykuł o adresie kanonicznym.
Kiedy wybór naprawdę ma znaczenie
- Migracja strony lub zmiana domeny — zawsze 301 (lub 308). 302 może tu dłużej trzymać stare adresy w wynikach i opóźnić przeniesienie sygnałów.
- HTTP → HTTPS oraz www ↔ bez www — 301, jedno na adres, od razu na wersję docelową. To decyzje na stałe.
- Usunięty produkt lub artykuł z bliskim zamiennikiem — 301 na zamiennik. Jeśli prawdziwego odpowiednika nie ma, 404 lub 410 jest uczciwsze niż przekierowanie na stronę główną, które Google i tak może uznać za „miękki 404”.
- Strony sezonowe lub produkty, które wrócą — 302, a jeszcze lepiej pozostawienie strony z informacją.
- Wykrywanie języka lub kraju — tymczasowe przekierowania są częste, ale nie odsyłaj na siłę robotów wyszukiwarek od wersji językowych; łącz wersje za pomocą hreflang.
Łańcuchy i pętle
Łańcuch to przekierowanie prowadzące do kolejnego przekierowania: http://example.com/page → https://example.com/page → https://www.example.com/page → https://www.example.com/new-page. Każdy krok to dodatkowa runda żądania dla odwiedzającego. Google przechodzi ograniczoną liczbę kroków (dokumentacja wspomina o maksymalnie 10) i przy długim łańcuchu może zatrzymać się przed końcem. Rozwiązanie: każdy stary adres kieruje od razu na docelowy, a linki wewnętrzne są zaktualizowane do niego.
Pętla to łańcuch wracający do punktu wyjścia: A → B → A. Przeglądarka zatrzymuje się z błędem „zbyt wiele przekierowań” i strona jest niedostępna dla wszystkich, łącznie z robotami. Pętle zwykle powstają, gdy dwie reguły sobie przeczą — np. CDN wymusza HTTP, a serwer wymusza HTTPS.
Jak skonfigurować 301
Przekierowania ustawia się na serwerze lub w CMS, a nie w kodzie strony. Dla dwóch najpopularniejszych serwerów WWW:
# Apache (.htaccess)
Redirect 301 /old-page/ https://example.com/new-page/
# Nginx
location = /old-page/ { return 301 https://example.com/new-page/; }
W WordPressie i większości innych CMS to samo zrobi wtyczka do przekierowań lub wbudowany menedżer przekierowań — bez edycji plików serwera. Jeśli strona działa za CDN, jego reguły przekierowań wykonują się, zanim żądanie dotrze do Twojego serwera: wygodne, ale pamiętaj o nich przy debugowaniu. Przy przenoszeniu całej domeny kieruj każdą ścieżkę na tę samą ścieżkę w nowej domenie, a nie wszystko na stronę główną. Bez względu na metodę sprawdź wynik z zewnątrz: literówka w regule może po cichu zwracać 302, utworzyć pętlę lub przekierować podstrony, których nie zamierzałeś ruszać.
Jak sprawdzić przekierowanie
Nie ufaj paskowi adresu: przeglądarki agresywnie zapamiętują 301, więc po zmianie reguły możesz jeszcze długo widzieć stare zachowanie. Sprawdzaj po stronie serwera:
- Sprawdzanie przekierowań przechodzi cały łańcuch i pokazuje każdy krok z kodem — widać 302 tam, gdzie oczekiwano 301, zbędne kroki i pętle.
- Sprawdzenie kodu odpowiedzi pokazuje dokładny kod pojedynczego adresu i jego punkt docelowy.
- Z terminala:
curl -I https://example.com/old-pagewyświetli kod i nagłówekLocation.
Krok po kroku o czytaniu łańcuchów i szukaniu ich źródeł — w artykule jak sprawdzić przekierowania i łańcuchy przekierowań.
Lista kontrolna migracji
- Wyeksportuj pełną listę starych adresów: z crawlera, mapy witryny, analityki i Search Console (najpierw strony z ruchem i linkami zwrotnymi).
- Przypisz każdemu staremu adresowi najbliższy nowy, jeden do jednego. Nie kieruj wszystkiego na stronę główną.
- Skonfiguruj przekierowania 301 na serwerze, a nie przez meta refresh czy JavaScript.
- Łącz zmianę protokołu, hosta i ścieżki w jeden krok, gdzie to możliwe.
- Zaktualizuj linki wewnętrzne, canonical, hreflang i mapę witryny do nowych adresów — niech przekierowania obsługują tylko linki zewnętrzne i zakładki.
- Sprawdź próbkę starych adresów (także z parametrami i ukośnikiem na końcu) narzędziem do przekierowań przed startem i zaraz po nim.
- Przy zmianie domeny użyj narzędzia „Zmiana adresu” w Google Search Console i utrzymuj przekierowania długo — Google zaleca co najmniej rok.
- Obserwuj w Search Console błędy 404 i błędy przekierowań w kolejnych tygodniach.