Jak sprawdzić przekierowania i łańcuchy przekierowań
Przekierowanie (redirect) odsyła użytkownika lub robota z jednego adresu na inny. Aby poprawnie sprawdzić przekierowania, potrzebujesz trzech rzeczy: kodu odpowiedzi każdego kroku, liczby kroków w łańcuchu oraz adresu końcowego z jego własnym statusem. Poniżej trzy sposoby sprawdzenia przekierowań w witrynie — online, przez curl i w przeglądarce — czym różnią się kody 301, 302, 307 i 308 oraz jak naprawić łańcuchy i pętle w nginx, Apache i WordPressie.
Jak sprawdzić przekierowania online
Najszybciej zrobisz to w darmowym narzędziu do sprawdzania przekierowań. Wysyła ono żądanie pod adres URL, samo podąża za każdym nagłówkiem Location (do 15 kroków) i pokazuje całą ścieżkę.
- Wklej pełny adres razem ze schematem:
http://example.comihttps://example.comczęsto zachowują się inaczej, więc sprawdź oba. - Przeczytaj podsumowanie: liczbę przekierowań, status końcowy, łączny czas i to, czy łańcuch kończy się na tej samej czy innej domenie.
- Przejdź łańcuch krok po kroku. Każdy krok pokazuje swój URL i kod: 301 lub 308 jest oznaczony jako stały, 302 lub 307 jako tymczasowy.
- Sprawdź rekomendacje pod łańcuchem. Narzędzie oznacza łańcuchy dłuższe niż jeden krok, przekierowania tymczasowe, które być może powinny być 301, przekierowania na inną domenę oraz potwierdza poprawne przekierowanie HTTP → HTTPS.
Pamiętaj o dwóch ograniczeniach: narzędzie śledzi tylko serwerowe przekierowania HTTP (nie meta refresh ani JavaScript, patrz niżej) i wysyła żądanie z własnym user agentem, więc przekierowania zależne od kraju, urządzenia czy ciasteczek odwiedzającego mogą u realnych użytkowników wyglądać inaczej.
Jak sprawdzić przekierowanie 301 przez curl
W terminalu curl pokazuje surowe nagłówki odpowiedzi bez pamięci podręcznej przeglądarki:
curl -sIL http://example.com/old-page \
| grep -iE "^HTTP|^location"
-I pobiera tylko nagłówki, -L podąża za przekierowaniami, a grep zostawia jedynie wiersze statusu i adresy docelowe. Czysty wynik wygląda tak:
HTTP/1.1 301 Moved Permanently
Location: https://example.com/new-page/
HTTP/2 200
Niektóre serwery odpowiadają na żądania HEAD inaczej niż na zwykłe. Jeśli wynik wygląda dziwnie, powtórz z prawdziwym żądaniem GET: curl -sL -o /dev/null -D - URL.
Sprawdzanie przekierowań w Chrome DevTools
- Otwórz DevTools (F12) → Network.
- Zaznacz Preserve log (inaczej kroki przekierowania znikną przy zmianie strony) oraz Disable cache.
- Załaduj stary URL. Każdy krok pojawi się jako osobny wiersz ze swoim statusem; nagłówek Location znajdziesz w nagłówkach odpowiedzi.
Przeglądarki agresywnie zapamiętują odpowiedzi 301. Jeśli zmieniłeś przekierowanie, a przeglądarka wciąż podąża za starym, sprawdź w oknie prywatnym lub przez curl, zanim uznasz, że winny jest serwer.
301, 302, 307 i 308: różnice
| Kod | Typ | Metoda żądania | Jak traktuje go Google | Kiedy używać |
|---|---|---|---|---|
| 301 | Stałe | Może zmienić POST na GET | Silny sygnał, że adres docelowy staje się kanoniczny | Zmienione adresy URL, HTTPS, www/bez www, przeprowadzka domeny |
| 308 | Stałe | Zachowana | Tak samo jak 301 | Stałe przeniesienia formularzy i API |
| 302 | Tymczasowe | Może zmienić POST na GET | Słaby sygnał; źródło zwykle zostaje w indeksie | Krótkie promocje, testy A/B, prace techniczne |
| 307 | Tymczasowe | Zachowana | Tak samo jak 302 | Tymczasowe przeniesienia, gdzie metoda ma znaczenie |
| Meta refresh / JS | Na poziomie strony | — | Natychmiastowy meta refresh jest odczytywany jako stały; JS dopiero po renderowaniu | Tylko gdy przekierowania serwerowe są niemożliwe |
Kod 307 może też pojawić się w DevTools, choć Twój serwer go nie wysłał: to wewnętrzne przekierowanie przeglądarki na HTTPS dla witryn z listy HSTS. curl i narzędzie online pokażą zamiast tego rzeczywistą odpowiedź serwera.
Łańcuchy i pętle przekierowań
Łańcuch to kilka przekierowań z rzędu: http://example.com/page → https://example.com/page → https://www.example.com/page → https://www.example.com/page/. Każdy krok to dodatkowa wymiana z serwerem dla użytkownika. Googlebot podąża za maksymalnie 10 przeskokami, ale Google zaleca krótkie łańcuchy, a każdy dodatkowy krok to kolejne miejsce, w którym coś może się zepsuć przy następnej migracji. Dąż do jednego przekierowania z dowolnego starego adresu na końcowy.
Pętla to łańcuch, który wraca do odwiedzonego już adresu, więc nigdy się nie kończy. Przeglądarki pokazują ERR_TOO_MANY_REDIRECTS, a strony nie da się zaindeksować. W narzędziu pętla wygląda jak łańcuch, który dochodzi do limitu 15 kroków z powtarzającymi się adresami. Typowe przyczyny: przekierowanie na HTTPS na serwerze plus ustawienie „Flexible SSL” w CDN albo sprzeczne reguły www w dwóch miejscach (konfiguracja serwera i CMS).
Jak sprawdzić przekierowania w całej witrynie
Pojedyncze adresy wystarczą do wyrywkowej kontroli. Aby znaleźć wszystkie łańcuchy w witrynie, potrzebujesz crawlera, który przechodzi po linkach wewnętrznych i zapisuje każde przekierowanie. Robi to SEO Audit: zgłasza łańcuchy i pętle przekierowań jako osobne problemy obok niedziałających linków, więc widać, które linki wewnętrzne wciąż prowadzą na stare adresy.
Jak naprawić przekierowania
nginx
Połącz schemat i host w jeden krok zamiast dwóch:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl;
server_name example.com;
location = /old-page/ {
return 301 /new-page/;
}
}
Dodaj osobny blok listen 443 dla www.example.com, który również zwraca 301 na https://example.com$request_uri. Po edycji uruchom nginx -t i przeładuj konfigurację.
Apache (.htaccess)
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [L,R=301]
Redirect 301 /old-page/ https://example.com/new-page/
Generator .htaccess zbuduje takie reguły bez literówek.
WordPress
- Upewnij się, że w Ustawienia → Ogólne oba pola adresu zawierają końcowy URL (https i właściwy wariant www); niezgodność z regułą serwera to klasyczna przyczyna pętli.
- Dla pojedynczych stron użyj wtyczki do przekierowań (np. Redirection) lub menedżera przekierowań we wtyczce SEO i nie ustawiaj tego samego przekierowania jednocześnie we wtyczce i w konfiguracji serwera.
- Po zmianie struktury bezpośrednich odnośników sprawdź kilka starych adresów: WordPress sam odgaduje część starych slugów, ale nie wszystkie.
Niezależnie od serwera zaktualizuj linki wewnętrzne, tagi canonical i mapę witryny tak, by prowadziły od razu na końcowe adresy — wtedy przekierowania będą potrzebne tylko dla linków zewnętrznych i starych zakładek.
Dlaczego to ważne dla promocji linkami
Linki prowadzą na konkretny adres. Przy stałym przekierowaniu ich wartość nadal trafia na stronę końcową, ale lepiej promować bezpośrednio adres końcowy. Jeśli promowana strona zmieniła adres po uruchomieniu, ustaw 301 ze starego adresu — publikacji nie trzeba robić od nowa, zobacz „Czy można usunąć lub zmienić publikację”.