Logo David Burdelak
Webdevelopment

Przekierowanie 301 i 302 – kiedy użyć którego i jak uniknąć błędów na stronie?

Porównanie przekierowań HTTP 301 Moved Permanently oraz 302 Found w aplikacji www

Zmiana struktury adresów URL, przenoszenie serwisu na nową domenę czy czasowa niedostępność produktu w sklepie internetowym wymagają odpowiedniego pokierowania ruchem użytkowników i robotów indeksujących. Błędny dobór kodu statusu HTTP przy przekierowaniu może doprowadzić do utraty pozycji w wynikach wyszukiwania (SEO), problemów z buforowaniem oraz niepotrzebnego obciążenia serwera.

Poznaj dokładne różnice pomiędzy przekierowaniem trwałym (301) a tymczasowym (302), dowiedz się, jak wpływają na pamięć podręczną przeglądarki i jak uniknąć najczęstszych pułapek wykonawczych.

Przekierowanie 301 vs 302 – kluczowe różnice techniczne

Kody odpowiedzi HTTP z grupy 3xx informują klienta (przeglądarkę lub robota), że żądany zasób znajduje się pod innym adresem wskazanym w nagłówku Location. Różnica polega na intencji i trwałości tej zmiany:

  • 301 Moved Permanently (Przekierowanie Trwałe): Informuje, że zasób przeniósł się na nowy URL na zawsze. Roboty wyszukiwarek przenoszą moc rankingu (Link Equity) ze starego adresu na nowy i wycofują stary URL z indeksu. Przeglądarki internetowe agresywnie zapisują to przekierowanie w lokalnej pamięci podręcznej.
  • 302 Found / Temporary Redirect (Przekierowanie Tymczasowe): Informuje, że zmiana adresu jest chwilowa. Roboty indeksujące zatrzymują stary URL w indeksie i nie przekazują w pełni mocy SEO, a przeglądarki nie powinny zapamiętywać przekierowania na stałe.

Kiedy stosować poszczególne przekierowania?

Kiedy wybrać kod statusu 301?

  • Trwała zmiana struktury permalinków (np. zmiana sługa artykułu).
  • Migracja serwisu na nową domenę lub zmiana protokołu z HTTP na HTTPS.
  • Ujednolicenie adresów z przedrostkiem www oraz bez-www w celu wyeliminowania duplikacji treści.
  • Łączenie dwóch nakładających się podstron w jeden kompleksowy artykuł.

Kiedy wybrać kod statusu 302?

  • Czasowy brak towaru w sklepie internetowym (przekierowanie na kadrę kategorii lub zamiennik na czas dostawy).
  • Prowadzenie testów A/B na podstronach produktowych.
  • Przekierowanie użytkownika na czas prac konserwacyjnych lub aktualizacji konkretnego modułu.
  • Kierowanie na podstrony promocji czasowych lub landing page zależne od geolokalizacji.

Najczęstsze błędy i jak ich unikać

Pętle przekierowań (Redirect Loops)

Sytuacja, w której URL A przekierowuje na URL B, a URL B z powrotem na URL A (lub przez ciąg pośrednich adresów). Skutkuje to błędem ERR_TOO_MANY_REDIRECTS w przeglądarce i całkowitym zablokowaniem dostępu do treści.

Łańcuchy przekierowań (Redirect Chains)

Powstają, gdy stary URL A przekierowuje do B, B do C, a C do docelowego D. Każde pośrednie przekierowanie dodaje dodatkowe zapytanie sieciowe (RTT), co drastycznie wydłuża czas odpowiedzi i negatywnie wpływa na wskaźnik LCP. Pamiętaj, aby zawsze kierować adres bezpośrednio do końcowego źródła.

Pułapka buforowania przekierowania 301

Ze względu na to, że przeglądarki zapisują przekierowania 301 w pamięci podręcznej, przetestowanie błędnej reguły 301 na środowisku produkcyjnym sprawi, że użytkownicy zostaną „uwięzieni” na błędnym adresie nawet po usunięciu reguły z serwera. Prace testowe zawsze warto prowadzić przy użyciu statusu 302 lub z wyłączonym buforowaniem w narzędziach deweloperskich.

Sposoby na kontrolowanie tego, jak przeglądarka i serwer przetwarzają nagłówki odpowiedzi, szczegółowo wyjaśnia poradnik omawiający konfigurację pliku .htaccess na serwerze.

Praktyczne wdrożenie w PHP i Nginx

Wdrożenie w PHP

// Przekierowanie trwałe 301
header("HTTP/1.1 301 Moved Permanently");
header("Location: https://twojadomena.pl/nowy-adres");
exit();

// Przekierowanie tymczasowe 302
header("Location: https://twojadomena.pl/promocja-czasowa");
exit();

Wdrożenie w konfiguracji Nginx

# Przekierowanie 301 w Nginx
server {
    server_name stara-domena.pl;
    return 301 https://nowa-domena.pl$request_uri;
}

Świadome zarządzanie przekierowaniami gwarantuje ciągłość ruchu, zachowanie wartości profilu linków i eliminuje zbędne opóźnienia, dbając o najwyższy poziom UX od pierwszego zapytania HTTP.