Przekierowanie 301 to odpowiedź serwera oznaczająca, że strona została trwale przeniesiona pod nowy adres. Przeglądarka od razu otwiera nowy adres, a Google przepisuje na niego pozycje i wartość linków prowadzących do starego URL-a. W praktyce ustawia się je w pliku .htaccess na serwerze Apache, w konfiguracji Nginx, wtyczką w WordPressie albo jedną linią w PHP.
Różnica między 301 a 302 sprowadza się do jednego słowa: trwałe kontra tymczasowe. To słowo decyduje o tym, czy Twoje pozycje w Google przejdą pod nowy adres, czy zostaną przy starym. Poniżej konkretna składnia dla każdego środowiska plus lista błędów, które najczęściej kosztują ruch.
Przekierowanie 301 a 302: która wersja kiedy
| Cecha | 301 (trwałe) | 302 (tymczasowe) |
|---|---|---|
| Komunikat dla Google | ten adres już nie wróci | stary adres wróci, zostaw go w indeksie |
| Przekazanie mocy linków | tak, praktycznie w całości | nie, sygnały zostają przy starym adresie |
| Co trafia do wyników wyszukiwania | nowy adres | stary adres |
| Buforowanie w przeglądarce | tak, agresywne i trudne do cofnięcia | nie |
| Typowe zastosowanie | zmiana domeny, nowa struktura URL, http na https | testy A/B, chwilowa strona przerwy technicznej, promocja sezonowa |
Zasada praktyczna: jeżeli nie planujesz przywrócić starego adresu w ciągu najbliższych tygodni, użyj 301. Jeżeli wahasz się, czy zmiana jest trwała, ustaw 302, sprawdź efekt i zamień na 301 po decyzji. Uwaga na buforowanie: przeglądarka potrafi zapamiętać przekierowanie 301 na bardzo długo, więc omyłkowo ustawione 301 zobaczysz jeszcze długo po jego usunięciu. Testuj zawsze w trybie prywatnym albo poleceniem curl.
Przekierowanie 301 w .htaccess
Na serwerach Apache, czyli w większości hostingów współdzielonych w Polsce (a także na kompatybilnym z Apache LiteSpeed, na którym stoi nasz hosting stron WWW), wszystko robi się w pliku .htaccess w katalogu głównym strony. Reguły przekierowań umieszczaj na samej górze pliku, przed regułami WordPressa, bo Apache przetwarza je po kolei.
Pojedyncza podstrona na inną podstronę:
Redirect 301 /stara-oferta.html /nowa-oferta
Cała domena na nową domenę, z zachowaniem ścieżek:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^stara-domena\.pl [NC,OR]
RewriteCond %{HTTP_HOST} ^www\.stara-domena\.pl [NC]
RewriteRule ^(.*)$ https://nowa-domena.pl/$1 [R=301,L]
Ta reguła jest ważniejsza, niż wygląda. Fragment $1 na końcu sprawia, że adres stara-domena.pl/kontakt trafia na nowa-domena.pl/kontakt, a nie na stronę główną. Bez niego wykonasz najdroższy błąd przy przenoszeniu strony na nową domenę: Google potraktuje takie przekierowanie jak miękki błąd 404 i nie przeniesie pozycji podstron.
Wymuszenie HTTPS:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Ujednolicenie wersji z www i bez www (wybierz jedną, obojętnie którą, byle konsekwentnie):
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
Po zapisaniu pliku sprawdź stronę od razu. Literówka w .htaccess kończy się błędem 500 na całym serwisie, dlatego zawsze trzymaj kopię działającej wersji pliku obok.
Przekierowanie 301 w Nginx
Nginx nie czyta pliku .htaccess. Reguły trafiają do konfiguracji serwera, w bloku server, a po zmianie trzeba przeładować usługę.
server {
server_name stara-domena.pl www.stara-domena.pl;
return 301 https://nowa-domena.pl$request_uri;
}
Na hostingu współdzielonym zwykle nie masz dostępu do tych plików. Wtedy przekierowanie ustawia się w panelu albo zgłasza do wsparcia technicznego. U nas wystarczy napisać, co ma trafiać gdzie, a konfigurację przygotowuje nasz zespół w ramach wsparcia po polsku.
Przekierowanie 301 w WordPressie
W WordPressie masz trzy drogi i wybór zależy od skali.
- Wtyczka Redirection to najlepszy wybór przy pojedynczych adresach i mniejszych stronach. Dodajesz stary i nowy adres w panelu, wtyczka sama loguje trafienia w 404, więc od razu widzisz, czego brakuje.
- Moduł przekierowań w Rank Math albo Yoast Premium ma sens, gdy i tak używasz tych wtyczek. Zaletą jest to, że przy zmianie adresu wpisu proponują przekierowanie automatycznie.
- Plik .htaccess to opcja najszybsza wydajnościowo i jedyna sensowna przy setkach reguł. Przekierowanie obsługuje wtedy serwer, bez uruchamiania PHP i bazy danych.
Ta ostatnia różnica bywa niedoceniana. Każde przekierowanie obsłużone przez wtyczkę oznacza pełne załadowanie WordPressa tylko po to, żeby odesłać użytkownika gdzie indziej. Przy kilkunastu regułach nie ma to znaczenia, przy kilkuset zaczyna, zwłaszcza jeśli walczysz o czas odpowiedzi serwera. Więcej o tym w poradniku o tym, jak przyspieszyć stronę WordPress.
Przekierowanie 301 w PHP
Czasem trzeba przekierować warunkowo, na przykład w zależności od parametru. Wtedy przydaje się wersja w kodzie. Musi być wykonana przed wysłaniem jakiegokolwiek znaku do przeglądarki, inaczej zobaczysz błąd o nagłówkach wysłanych wcześniej.
<?php
header('Location: https://nowa-domena.pl/nowa-strona', true, 301);
exit;
Instrukcja exit nie jest ozdobnikiem. Bez niej PHP wykonuje dalszą część skryptu, co przy stronach z logowaniem potrafi wykonać operację, której nie chciałeś wykonać.
Jak sprawdzić, czy przekierowanie 301 działa
Nie sprawdzaj tego w przeglądarce, w której właśnie testowałeś poprzednią wersję reguły, bo zobaczysz wersję z pamięci podręcznej. Najpewniejsza metoda to jedno polecenie w terminalu:
curl -I https://stara-domena.pl/stara-strona
W odpowiedzi szukasz dwóch linii: HTTP/2 301 oraz nagłówka location z docelowym adresem. Jeśli widzisz 302, masz przekierowanie tymczasowe. Jeśli 200, przekierowanie w ogóle się nie uruchomiło. Dodanie flagi -L pokaże całą ścieżkę przekierowań i od razu ujawni łańcuchy.
Po większej operacji przejrzyj też w Google Search Console raport indeksowania stron. Kategorie "Strona z przekierowaniem" oraz "Nie znaleziono (404)" pokażą, czy Google widzi to samo co Ty. Warto pamiętać, że przekierowanie przenosi wartość linków, ale najszybciej odbudujesz pozycję świeżymi odnośnikami prowadzącymi wprost pod nowy adres, choćby przez wzmianki w polskich mediach branżowych.
Najczęstsze błędy przy przekierowaniach
- Łańcuch przekierowań. Adres A prowadzi do B, B do C, C do D. Każdy krok to opóźnienie, a Google skanuje ograniczoną liczbę przeskoków. Zawsze aktualizuj regułę tak, żeby prowadziła od razu do celu.
- Pętla przekierowań. Klasyk: jednocześnie wymuszasz www i brak www. Efekt to komunikat o zbyt wielu przekierowaniach i strona całkowicie niedostępna.
- Wszystko na stronę główną. Wygodne w konfiguracji, kosztowne w skutkach. Podstrony tracą pozycje, bo Google nie widzi odpowiednika treści.
- Przekierowanie zamiast usunięcia. Jeżeli treść naprawdę zniknęła i nie ma odpowiednika, uczciwszy jest status 410 albo 404 niż wysyłanie użytkownika w losowe miejsce.
- Reguły dodane pod blokiem WordPressa w .htaccess. WordPress przechwytuje żądanie wcześniej i Twoja reguła nigdy się nie wykona.
- Zapomniana stara domena. Przekierowania żyją tylko dopóki domena jest opłacona, a jej DNS wskazuje na działający serwer.
Co to jest przekierowanie 301?
Przekierowanie 301 to kod odpowiedzi HTTP oznaczający "przeniesiono na stałe". Serwer informuje nim przeglądarkę i wyszukiwarkę, że zasób ma nowy, docelowy adres i pod stary nie wróci. Dzięki temu użytkownik trafia automatycznie we właściwe miejsce, a wyszukiwarka zastępuje stary adres nowym w swoim indeksie, przenosząc na niego dotychczasowe sygnały rankingowe.
Czy przekierowanie 301 przekazuje moc linków?
Tak. Google potwierdza, że przekierowanie 301 przekazuje praktycznie pełną wartość linków prowadzących do starego adresu, pod warunkiem że nowy adres zawiera odpowiadającą, równie wartościową treść. Utrata następuje wtedy, gdy przekierowanie prowadzi na stronę niezwiązaną tematycznie, na stronę główną zamiast na odpowiednik podstrony albo przez długi łańcuch kolejnych przekierowań.
Jak długo utrzymywać przekierowanie 301?
Minimum rok, a przy adresach z wartościowymi linkami zewnętrznymi bezterminowo. Google potrzebuje kilku miesięcy na pełne przepisanie sygnałów, ale linki z cudzych stron, zakładek i starych materiałów drukowanych prowadzą pod stary adres jeszcze latami. Usunięcie przekierowania po kilku tygodniach oznacza, że cały ten ruch zamienia się w błędy 404. Dlatego przy zmianie serwera warto trzymać stary hosting jeszcze przez chwilę, co opisujemy w poradniku o tym, jak zmienić hosting bez utraty pozycji w Google.
Jeżeli dopiero planujesz większą zmianę adresów, zacznij od przeniesienia strony na inny hosting i dopiero na stabilnym serwerze przebudowuj strukturę URL. Przy stronach na WordPressie warto też sprawdzić, co daje hosting WordPress z gotową obsługą reguł serwera.