Przekierowania 301 — kiedy i jak przekierowywać strony

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:

  1. Przejdź do Rules → Page Rules.
  2. Dodaj regułę z wzorcem URL.
  3. 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ę?

  1. Wyczyść cache przeglądarki (301 jest cache’owane!).
  2. Sprawdź .htaccess — wykomentuj reguły przekierowań i testuj po jednej.
  3. Sprawdź ustawienia WordPress (wp_options: siteurl, home).
  4. Sprawdź konfigurację Cloudflare/CDN.
  5. 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:

  1. Zmapuj stare URL-e na nowe — stwórz arkusz: stary URL → nowy URL. Dla każdej strony, nie tylko kluczowych.
  2. Sprawdź linki zewnętrzne — Ahrefs/Majestic/Moz pokażą, które strony mają linki z zewnątrz. Te URL-e MUSZĄ mieć przekierowania.
  3. Skonfiguruj przekierowania 301 — .htaccess, Nginx config lub Cloudflare Page Rules.
  4. Przetestuj KAŻDE przekierowanie — nie zgaduj, sprawdź narzędziami.
  5. Zaktualizuj linki wewnętrzne — zmień w bazie danych/kodzie, żeby wskazywały bezpośrednio na nowe URL-e (nie przez 301).
  6. Zaktualizuj sitemap.xml — nowe URL-e, zgłoś ponownie do Search Console.
  7. Zaktualizuj canonical — powinien wskazywać na nowy URL.
  8. Monitoruj w Search Console — przez 4-8 tygodni sprawdzaj raporty pokrycia indeksu i błędy crawlowania.
  9. 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:

  1. Mapa URL-i — arkusz z 45 wierszami: stary URL → nowy URL, dopasowanie 1:1.
  2. 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).
  3. Search Console — dodanie nowej domeny, użycie narzędzia „Zmiana adresu”, zgłoszenie nowej sitemapy.
  4. Testowanie — każdy z 45 URL-i przetestowany na httpstatus.io. Wykryto 3 błędy w regex — naprawione tego samego dnia.
  5. 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.

Darmowa konsultacja →