Przekierowania 301 — kiedy i jak przekierowywać strony
Zmieniłeś adres strony, przeniosłeś się na nową domenę, przebudowałeś strukturę URL-i? Bez prawidłowego przekierowania 301 tracisz pozycje w Google, linki budowane latami i użytkowników, którzy trafiają na stronę błędu 404. Przekierowanie 301 to jeden z najważniejszych mechanizmów w arsenale webmastera — prosty w implementacji, ale łatwy do zepsucia. W tym artykule wyjaśniamy, kiedy używać 301, kiedy 302, jak konfigurować przekierowania i jakich błędów unikać.
Czym jest przekierowanie 301?
Przekierowanie 301 (301 Redirect, Moved Permanently) to odpowiedź serwera, która informuje przeglądarkę i roboty wyszukiwarek: „Ta strona przeniosła się na stałe pod nowy adres”. Gdy użytkownik lub Googlebot próbuje wejść na stary URL, serwer automatycznie kieruje go na nowy — bez żadnej interakcji ze strony użytkownika.
Kluczowe jest słowo „na stałe”. Przekierowanie 301 to sygnał dla Google, że stary adres przestaje istnieć, a cała „moc SEO” (link juice, PageRank, historia rankingowa) powinna zostać przeniesiona na nowy adres.
301 vs 302 — fundamentalna różnica
To jedno z najczęściej mylonych pojęć w SEO. Różnica jest prosta, ale konsekwencje pomyłki — poważne:
301 — Moved Permanently (przeniesiony na stałe)
- Stary URL przestaje być indeksowany.
- Google przenosi link juice na nowy URL.
- Nowy URL zastępuje stary w indeksie Google.
- Przeglądarki cache’ują przekierowanie — po pierwszej wizycie od razu kierują na nowy adres.
Używaj 301, gdy: strona zmieniła adres na stałe, domena się zmieniła, zmieniłeś strukturę URL-i, usunąłeś stronę i wskazujesz alternatywę.
302 — Found / Moved Temporarily (przeniesiony tymczasowo)
- Stary URL POZOSTAJE w indeksie Google.
- Google NIE przenosi link juice (a przynajmniej taka jest oficjalna doktryna — w praktyce po dłuższym czasie Google może traktować 302 jak 301).
- Przeglądarki NIE cache’ują przekierowania — za każdym razem sprawdzają, czy stary URL nadal przekierowuje.
Używaj 302, gdy: strona jest tymczasowo niedostępna (np. A/B test, prace konserwacyjne), przekierowujesz na chwilę (np. promocja sezonowa), planujesz przywrócić stary URL.
Inne kody przekierowań
- 303 — See Other: po wysłaniu formularza, przekieruj na stronę potwierdzenia (zapobiega ponownemu wysłaniu formularza przy odświeżeniu).
- 307 — Temporary Redirect: jak 302, ale zachowuje metodę HTTP (POST pozostaje POST). Ważne dla API.
- 308 — Permanent Redirect: jak 301, ale zachowuje metodę HTTP. Rzadko używany na stronach.
- Meta refresh: przekierowanie na poziomie HTML (<meta http-equiv=”refresh”>). NIE używaj do SEO — Google traktuje to jako słaby sygnał, wolne ładowanie, zły UX.
- JavaScript redirect: window.location = „nowy-url”. NIE używaj do SEO — Googlebot może nie wykonać JavaScriptu.
Jak skonfigurować przekierowanie 301?
Apache (.htaccess) — najczęstszy scenariusz
Większość polskich hostingów (nazwa.pl, dhosting, home.pl, OVH) działa na Apache. Przekierowania konfigurujesz w pliku .htaccess w głównym katalogu witryny.
Przekierowanie jednej strony:
Redirect 301 /stara-strona/ https://twojastrona.pl/nowa-strona/
Przekierowanie z wyrażeniem regularnym (RewriteRule):
RewriteEngine On
RewriteRule ^stary-katalog/(.*)$ https://twojastrona.pl/nowy-katalog/$1 [R=301,L]
Przekierowanie całej domeny:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^stara-domena.pl [NC]
RewriteRule ^(.*)$ https://nowa-domena.pl/$1 [R=301,L]
Wymuszenie www (lub non-www):
# Z non-www na www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domena.pl [NC]
RewriteRule ^(.*)$ https://www.domena.pl/$1 [R=301,L]
# Z www na non-www
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.domena.pl [NC]
RewriteRule ^(.*)$ https://domena.pl/$1 [R=301,L]
Nginx
Na serwerach Nginx (rzadsze na polskich hostingach, częstsze na VPS/cloud) przekierowania konfiguruje się w pliku konfiguracyjnym serwera:
# Jedna strona
location = /stara-strona/ {
return 301 https://twojastrona.pl/nowa-strona/;
}
# Cała domena
server {
server_name stara-domena.pl;
return 301 $scheme://nowa-domena.pl$request_uri;
}
WordPress — wtyczki
Jeśli nie chcesz edytować .htaccess ręcznie:
- Yoast SEO Premium — wbudowany menedżer przekierowań. Automatycznie proponuje 301 gdy zmieniasz slug strony.
- Rank Math — darmowy menedżer przekierowań (Rank Math → Redirections). Obsługuje 301, 302, 307, regex.
- Redirection — darmowa wtyczka dedykowana przekierowaniom. Loguje 404, pozwala tworzyć reguły regex, importować/eksportować.
Uwaga: wtyczki WordPress tworzą przekierowania na poziomie PHP, nie .htaccess. To oznacza, że WordPress musi się załadować, zanim przekierowanie zadziała — jest wolniejsze niż .htaccess. Dla kilku-kilkunastu przekierowań to bez znaczenia. Przy setkach — rozważ .htaccess.
Cloudflare Page Rules
Jeśli korzystasz z Cloudflare, możesz konfigurować przekierowania na poziomie CDN — jeszcze zanim request trafi na Twój serwer. To najszybsza metoda:
- Przejdź do Rules → Page Rules.
- Dodaj regułę z wzorcem URL.
- Ustaw „Forwarding URL” z kodem 301.
Kiedy potrzebujesz przekierowania 301?
Scenariusz 1: Zmiana struktury URL-i
Przebudowujesz stronę i zmieniasz adresy z /uslugi/malowanie-wnetrz/ na /oferta/malowanie-wnetrz/. Bez 301 stary adres zwróci 404, a Google utraci zaindeksowaną stronę. Przekieruj każdy stary URL na odpowiedni nowy.
Scenariusz 2: Migracja na nową domenę
Firma zmienia nazwę lub kupuje lepszą domenę. Przekieruj WSZYSTKIE strony ze starej domeny na odpowiadające im strony nowej domeny (1:1). Nie przekierowuj wszystkiego na stronę główną — Google traktuje to jako „soft 404”.
Scenariusz 3: Zmiana CMS (np. z Joomla na WordPress)
Różne CMS-y generują różne struktury URL-i. Joomla: /index.php/uslugi. WordPress: /uslugi/. Zmapuj stare URL-e na nowe i ustaw 301 dla każdego.
Scenariusz 4: Przejście na HTTPS
Opisane w artykule o SSL — wszystkie adresy http:// muszą być przekierowane 301 na https://.
Scenariusz 5: Usunięcie strony z wartościowymi linkami
Usuwasz stronę, do której prowadzą linki z innych witryn? Przekieruj ją na najbardziej tematycznie zbliżoną istniejącą stronę. Nie na stronę główną (chyba że nie ma lepszej alternatywy).
Scenariusz 6: Konsolidacja duplikatów
Masz dwie strony o podobnej treści? Połącz je — wybierz lepszą, przekieruj gorszą na lepszą. Link juice z obu stron skoncentruje się na jednej, silniejszej stronie.
Link juice — co przechodzi przez 301?
Kiedyś Google twierdził, że przekierowanie 301 „gubi” część link juice (szacowano 10-15% strat). W 2016 roku Google oficjalnie potwierdził, że 301 nie traci PageRank — przenoszona jest pełna moc linków.
To nie znaczy, że przekierowania nie mają kosztów. Mają — ale nie w link juice:
- Szybkość ładowania — każde przekierowanie to dodatkowy request HTTP (typowo 50-200ms).
- Crawl budget — Googlebot musi przejść przez przekierowanie, co zużywa budżet crawlowania.
- UX — użytkownik czeka chwilę dłużej na załadowanie strony.
Łańcuchy przekierowań (redirect chains) — poważny problem
Łańcuch przekierowań to sytuacja, gdy jeden URL przekierowuje na drugi, który przekierowuje na trzeci, itd.:
/strona-a/ → 301 → /strona-b/ → 301 → /strona-c/ → 301 → /strona-d/
Problemy z łańcuchami:
- Googlebot podąża za max 5 przekierowaniami w łańcuchu — jeśli jest więcej, po prostu się zatrzymuje.
- Każde ogniwo to dodatkowy czas ładowania — przy 4 przekierowaniach dodajesz 200-800ms.
- Mogą powodować pętle — A → B → C → A — przeglądarka wyświetli błąd „ERR_TOO_MANY_REDIRECTS”.
Jak naprawić łańcuchy?
Zasada jest prosta: każde przekierowanie powinno kierować bezpośrednio na końcowy URL. Zamiast A → B → C → D, ustaw A → D, B → D, C → D.
Narzędzia do wykrywania łańcuchów:
- Screaming Frog — Audit → Redirect Chains. Najlepsze narzędzie do tego.
- Ahrefs Site Audit — wykrywa łańcuchy w ramach audytu SEO.
- Redirect Checker (httpstatus.io) — wklej URL i zobacz pełny łańcuch przekierowań.
- Chrome DevTools — zakładka Network → filtruj „Doc” → sprawdź kolumnę Status (301, 302).
Pętle przekierowań — jak je zidentyfikować i naprawić
Pętla to sytuacja, gdy A przekierowuje na B, a B z powrotem na A. Przeglądarka wyświetla błąd „ERR_TOO_MANY_REDIRECTS” lub „Ta strona nie działa”.
Najczęstsze przyczyny pętli:
- Konflikt .htaccess z wtyczką WordPress — .htaccess przekierowuje na www, wtyczka przekierowuje na non-www (lub odwrotnie).
- Cloudflare + SSL na serwerze — Cloudflare wymusza HTTPS, serwer wymusza HTTP (tryb „Flexible”).
- WordPress home URL ≠ site URL — sprzeczne ustawienia w wp-config.php lub bazie danych.
- CDN/proxy z przekierowaniem + serwer z przekierowaniem — podwójna warstwa przekierowań.
Jak naprawić pętlę?
- Wyczyść cache przeglądarki (301 jest cache’owane!).
- Sprawdź .htaccess — wykomentuj reguły przekierowań i testuj po jednej.
- Sprawdź ustawienia WordPress (wp_options: siteurl, home).
- Sprawdź konfigurację Cloudflare/CDN.
- Sprawdź wtyczki WordPress (wyłącz wszystkie, włączaj po jednej).
Testowanie przekierowań
Przed i po ustawieniu przekierowań — testuj:
Narzędzia online
- httpstatus.io — wklej URL, zobacz łańcuch przekierowań i końcowy kod odpowiedzi.
- wheregoes.com — wizualizuje pełny łańcuch.
- redirect-checker.org — sprawdza typ przekierowania (301 vs 302) i nagłówki odpowiedzi.
Narzędzia deweloperskie
- Chrome DevTools → Network — otwórz F12, przejdź do zakładki Network, odśwież stronę. Widzisz każdy request z kodem statusu.
- cURL z terminala:
curl -I -L https://stary-url.pl— flaga -I pokazuje nagłówki, -L podąża za przekierowaniami.
Narzędzia SEO
- Screaming Frog — najlepsze do masowego sprawdzania. Crawluj stronę i sprawdź kolumnę „Status Code” i „Redirect URL”.
- Google Search Console — raport „Pokrycie indeksu” pokaże strony z przekierowaniami i ewentualne problemy.
Przekierowania przy migracji strony — checklista
Migracja (zmiana domeny, CMS-a, struktury URL-i) to moment, gdy przekierowania 301 są najważniejsze. Oto sprawdzony proces:
- Zmapuj stare URL-e na nowe — stwórz arkusz: stary URL → nowy URL. Dla każdej strony, nie tylko kluczowych.
- Sprawdź linki zewnętrzne — Ahrefs/Majestic/Moz pokażą, które strony mają linki z zewnątrz. Te URL-e MUSZĄ mieć przekierowania.
- Skonfiguruj przekierowania 301 — .htaccess, Nginx config lub Cloudflare Page Rules.
- Przetestuj KAŻDE przekierowanie — nie zgaduj, sprawdź narzędziami.
- Zaktualizuj linki wewnętrzne — zmień w bazie danych/kodzie, żeby wskazywały bezpośrednio na nowe URL-e (nie przez 301).
- Zaktualizuj sitemap.xml — nowe URL-e, zgłoś ponownie do Search Console.
- Zaktualizuj canonical — powinien wskazywać na nowy URL.
- Monitoruj w Search Console — przez 4-8 tygodni sprawdzaj raporty pokrycia indeksu i błędy crawlowania.
- Nie usuwaj przekierowań przez min. rok — Google potrzebuje czasu na przeindeksowanie. A stare linki zewnętrzne mogą działać latami.
Jak długo utrzymywać przekierowanie 301?
Google oficjalnie mówi: „Utrzymuj przekierowania tak długo, jak to możliwe”. W praktyce:
- Minimum 1 rok — tyle potrzebuje Google na pełne przeindeksowanie.
- Idealnie — na zawsze: jeśli do starego URL-a prowadzą linki zewnętrzne, usunięcie 301 oznacza utratę link juice. Stare linki zaczną zwracać 404.
- Wyjątek — jeśli stary URL nie miał żadnych linków i nie generuje ruchu, możesz usunąć 301 po kilku miesiącach. Ale po co? .htaccess z setką przekierowań nie spowalnia serwera.
Typowe błędy przy przekierowaniach 301
1. Przekierowanie wszystkiego na stronę główną
Zmieniasz domenę i przekierowujesz KAŻDY URL na nowa-domena.pl/ zamiast na odpowiadającą stronę? Google traktuje to jako „soft 404”. Nie przeniesie link juice, bo przekierowanie nie jest tematycznie powiązane. Zawsze przekierowuj 1:1.
2. Użycie 302 zamiast 301
Wiele wtyczek WordPress domyślnie ustawia 302 zamiast 301. Zawsze sprawdzaj typ przekierowania. 302 nie przenosi link juice (przynajmniej nie od razu).
3. Łańcuchy przekierowań
Opisane wcześniej — A → B → C. Skracaj do A → C.
4. Przekierowanie strony na samą siebie
Zdarza się przy conflicting rules — np. .htaccess przekierowuje /strona/ na /strona/, tworząc pętlę.
5. Brak aktualizacji linków wewnętrznych
Ustawiłeś 301 ze starego URL na nowy, ale w nawigacji i treści nadal linkujesz do starego? Użytkownik przechodzi przez przekierowanie (wolniej), a Googlebot zużywa crawl budget. Zaktualizuj linki w kodzie.
6. Ignorowanie parametrów UTM i query strings
Przekierowanie /strona/ działa, ale /strona/?utm_source=newsletter zwraca 404? Upewnij się, że reguła .htaccess obsługuje query strings: flaga [QSA] (Query String Append).
Przekierowania a wydajność strony
Każde przekierowanie to dodatkowy cykl request-response HTTP. W praktyce oznacza to 50-200ms opóźnienia na każde przekierowanie. Dla pojedynczego 301 to niezauważalne. Ale przy łańcuchach i masowych przekierowaniach wpływ na wydajność jest realny.
Jak przekierowania wpływają na ładowanie strony?
- DNS lookup — jeśli przekierowanie zmienia domenę, przeglądarka musi rozwiązać DNS nowej domeny.
- TCP handshake — nowe połączenie z serwerem docelowym.
- TLS negotiation — jeśli HTTPS, dodatkowe opóźnienie na SSL handshake.
- Oczekiwanie na odpowiedź — serwer musi przetworzyć żądanie i zwrócić nagłówek 301.
Przy 4 przekierowaniach w łańcuchu te opóźnienia się sumują — 200-800ms dodatkowego czasu ładowania. Na mobile to jeszcze więcej (wolniejsze DNS, wyższe latency).
Jak zminimalizować wpływ na wydajność?
- Eliminuj łańcuchy — każdy URL przekierowuj bezpośrednio na cel.
- Używaj .htaccess zamiast PHP/wtyczek — .htaccess działa na poziomie Apache, przed załadowaniem WordPressa. PHP redirect wymaga uruchomienia interpretera PHP.
- Cloudflare Page Rules — przekierowania na poziomie CDN są najszybsze, bo nie docierają nawet do Twojego serwera.
- Preconnect do domeny docelowej — jeśli przekierowujesz na inną domenę, dodaj
<link rel="preconnect">na stronach, które linkują do starego URL-a. - Aktualizuj linki wewnętrzne — zamiast polegać na 301, zmień linki w nawigacji i treści, żeby wskazywały bezpośrednio na nowy URL.
Przekierowania w praktyce — case study
Przykład z życia: polska firma usługowa zmieniła domenę z nazwastaryfirmy.pl na nowamarka.pl. Mieli 45 podstron i ok. 120 linków zewnętrznych (wg Ahrefs). Jak przebiegła migracja:
- Mapa URL-i — arkusz z 45 wierszami: stary URL → nowy URL, dopasowanie 1:1.
- Konfiguracja .htaccess na starej domenie — 45 reguł RewriteRule + przekierowanie catch-all na nową stronę główną (dla URL-i, które nie pasują do żadnej reguły).
- Search Console — dodanie nowej domeny, użycie narzędzia „Zmiana adresu”, zgłoszenie nowej sitemapy.
- Testowanie — każdy z 45 URL-i przetestowany na httpstatus.io. Wykryto 3 błędy w regex — naprawione tego samego dnia.
- Monitoring — przez 6 tygodni codzienne sprawdzanie pozycji w Search Console.
Wynik: spadek ruchu o 15% w pierwszym tygodniu, powrót do normy po 3 tygodniach, wzrost o 8% po 6 tygodniach (lepsza domena = lepszy CTR). Link juice zachowany — wszystkie 120 linków zewnętrznych prawidłowo przekierowane.
Wpływ przekierowań na SEO — podsumowanie
Prawidłowo skonfigurowane przekierowania 301 chronią Twoją widoczność w Google. Źle skonfigurowane — mogą ją zniszczyć. Kluczowe zasady:
- 301 dla trwałych zmian, 302 dla tymczasowych.
- Przekierowuj 1:1 — stara strona → nowa strona (nie wszystko na główną).
- Unikaj łańcuchów i pętli — każde przekierowanie bezpośrednio na cel.
- Testuj — httpstatus.io, Chrome DevTools, Screaming Frog.
- Monitoruj — Search Console, błędy crawlowania, pokrycie indeksu.
- Utrzymuj przekierowania jak najdłużej — minimum rok, idealnie na zawsze.
Przekierowania 301 to narzędzie, które ratuje SEO przy każdej zmianie na stronie. Nie ignoruj ich — każdy 404, który powinien być 301, to stracona szansa na ruch i klientów.
Potrzebujesz pomocy z marketingiem?
Umów się na darmową konsultację — przeanalizujemy Twoją sytuację i zaproponujemy konkretne działania.