Jak testować przekierowania? curl, DevTools, łańcuchy i pętle
Poprawne przekierowanie trzeba ocenić na podstawie kodu HTTP, nagłówka Location, całego łańcucha oraz odpowiedzi strony docelowej. Sam fakt, że pasek adresu w przeglądarce się zmienił, nie wystarcza — przeglądarka może korzystać z cache, JavaScriptu albo zapamiętanego 301.
Krótka odpowiedź: uruchom
curl -Idla starego URL-a, sprawdź kod iLocation, a potemcurl -IL, aby zobaczyć cały łańcuch. Dobre trwałe przeniesienie zwykle ma jeden krok301 → 200i prowadzi od razu do kanonicznego adresu HTTPS.
Co dokładnie trzeba potwierdzić?
Dla każdego przekierowania odpowiedz na sześć pytań:
- Czy źródłowy URL odpowiada?
- Czy zwraca planowany kod — np. 301, a nie 302?
- Czy
Locationwskazuje właściwy, pełny cel? - Czy po drodze nie ma zbędnych kroków?
- Czy strona docelowa zwraca 200 i pokazuje właściwą treść?
- Czy podobne adresy, których reguła nie powinna obejmować, pozostały bez zmian?
Google traktuje trwałe przekierowania serwerowe, takie jak 301 i 308, jako sygnał, że docelowy URL powinien zostać kanoniczny. Tymczasowe 302 i 307 komunikują inną intencję. Dlatego „przekierowuje” to za mało — kod musi odpowiadać rzeczywistej sytuacji.
Test 1: nagłówki jednego URL-a przez curl -I
curl -I https://example.pl/stary-adres/
-I prosi o same nagłówki odpowiedzi. Przykładowy wynik:
HTTP/2 301
location: https://example.pl/nowy-adres/
content-type: text/html; charset=UTF-8
Sprawdź:
- pierwszą linię z kodem;
- dokładną wartość
location; - protokół HTTPS;
- wybrany wariant domeny;
- końcowy ukośnik;
- zachowanie znaków i kodowania w adresie.
Jeżeli serwer nie obsługuje żądania HEAD tak samo jak GET, test -I może różnić się od zachowania użytkownika. Wtedy pobierz odpowiedź GET bez zapisywania treści, np.:
curl -sS -o /dev/null -D - https://example.pl/stary-adres/
-D - wypisuje nagłówki na standardowe wyjście, a -o /dev/null pomija ciało odpowiedzi.
Test 2: cały łańcuch przez curl -IL
curl -IL https://example.pl/stary-adres/
-L każe podążać za nagłówkiem Location. Prawidłowy prosty łańcuch:
HTTP/2 301
location: https://example.pl/nowy-adres/
HTTP/2 200
Łańcuch wymagający poprawy:
http://www.example.pl/stary
→ https://www.example.pl/stary
→ https://example.pl/stary
→ https://example.pl/stary/
→ https://example.pl/nowy/
Nie każdy dodatkowy krok powoduje awarię, ale zwiększa opóźnienie, utrudnia crawl i komplikuje przyszłe migracje. Reguła źródłowa powinna — gdy to możliwe — kierować od razu do ostatecznej wersji.
Test 3: pokaż adres końcowy, kod i liczbę przekierowań
Do szybkiego raportu użyj formatu wyjścia curl:
curl -sS -L -o /dev/null \
-w 'kod=%{http_code}\ncel=%{url_effective}\nprzekierowania=%{num_redirects}\n' \
https://example.pl/stary-adres/
Przykładowy wynik:
kod=200
cel=https://example.pl/nowy-adres/
przekierowania=1
To wygodne przy ręcznej kontroli kilku URL-i. Przy dużej migracji potrzebny jest arkusz źródło → oczekiwany cel oraz automatyczny test całej listy.
Test 4: ogranicz liczbę kroków, żeby wykryć pętlę
curl -IL --max-redirs 10 https://example.pl/
Jeśli narzędzie osiągnie limit, zapisz powtarzające się wartości Location. Najczęstsze pary to:
- HTTP i HTTPS;
wwwi brakwww;- slash i brak slasha;
- domena publiczna i tymczasowa;
- URL logowania i panel;
- dwie wersje językowe.
Następnie przejdź do drzewa diagnostycznego błędu ERR_TOO_MANY_REDIRECTS.
Test 5: przekierowanie w Chrome lub Firefox DevTools
- Otwórz narzędzia deweloperskie.
- Przejdź do zakładki Network/Sieć.
- Włącz „Preserve log”, aby zachować wcześniejsze żądania.
- Jeśli narzędzie na to pozwala, zaznacz „Disable cache” przy otwartych DevTools.
- Wpisz stary adres i odśwież stronę.
- Kliknij pierwsze żądanie dokumentu.
- Sprawdź Status Code oraz nagłówek Response Headers →
Location.
DevTools pokazuje również zasoby i przekierowania wykonywane przez JavaScript. To zaleta i zarazem powód, by porównać wynik z curl. Jeżeli przeglądarka zmienia adres, ale serwer przez curl zwraca 200, przekierowanie może pochodzić z JavaScriptu, meta refresh albo logiki aplikacji.
Test 6: macierz wariantów domeny
Dla jednej przykładowej podstrony sprawdź:
| Wariant wejściowy | Oczekiwany wynik |
|---|---|
http://example.pl/test/ |
jeden redirect do kanonicznego HTTPS |
http://www.example.pl/test/ |
jeden redirect do kanonicznego HTTPS |
https://www.example.pl/test/ |
redirect tylko jeśli kanoniczny jest bez www |
https://example.pl/test/ |
200, jeśli to wariant kanoniczny |
wariant bez końcowego / |
zachowanie zgodne z przyjętą polityką |
wariant z ?utm_source=test |
parametr zachowany zgodnie z planem |
Nie testuj tylko strony głównej. Reguły katalogowe i WordPress mogą inaczej obsługiwać podstrony, pliki, panel i API.
Test 7: przypadki negatywne
To najbardziej pomijana część. Sprawdź adresy, które nie powinny się przekierować:
- podobny slug, np.
/stara-oferta-premium/; - zasób w innym katalogu;
- istniejący plik PDF lub obraz;
- endpoint formularza lub webhook;
/wp-admin/,/wp-login.phpi API;- podstrona docelowa.
Zbyt szeroki regex może wyglądać poprawnie na jednym URL-u, a jednocześnie przechwycić setki innych.
Jak przetestować listę po migracji?
Przy większej zmianie przygotuj arkusz:
| Stary URL | Oczekiwany kod | Oczekiwany cel | Wynik końcowy | Liczba kroków | Status |
|---|---|---|---|---|---|
/stara-a/ |
301 | /nowa-a/ |
200 | 1 | OK |
/stara-b/ |
301 | /nowa-b/ |
404 | 1 | błąd celu |
Lista starych adresów powinna pochodzić z kilku źródeł:
- poprzedniej mapy XML;
- eksportu systemu CMS;
- Google Search Console;
- narzędzia analitycznego;
- raportu linków zewnętrznych;
- crawl starej strony;
- logów serwera, jeśli są dostępne.
Nie testuj tylko najnowszej sitemapy — nie zawiera ona często historycznych URL-i, które nadal mają wejścia i linki.
Cache i zapamiętany 301
Przeglądarka, CDN i serwer mogą cache’ować przekierowania. Gdy wynik nie odpowiada aktualnej konfiguracji:
- sprawdź
curlbez cookies; - sprawdź nagłówki cache;
- wyczyść cache aplikacji;
- wyczyść cache hostingu;
- wyczyść lub purge’uj właściwy URL w CDN-ie;
- usuń dane tej witryny w przeglądarce albo użyj nowego profilu.
Nie zakładaj od razu, że .htaccess jest ignorowany. Stara odpowiedź mogła zostać zapisana w innej warstwie.
Jak oceniać redirect związany z formularzem lub POST?
Kody 301 i 302 mają historycznie niejednoznaczne zachowanie dla metod innych niż GET w różnych klientach. 307 i 308 jednoznacznie zachowują metodę oraz ciało żądania. Jeżeli testujesz endpoint przyjmujący POST, nie ograniczaj się do curl -I — wyślij kontrolowane żądanie właściwą metodą na środowisku testowym i sprawdź, co otrzymuje cel.
Nie wykonuj testowego POST z prawdziwymi danymi klienta ani na endpointach płatności bez planu. W takich przypadkach użyj środowiska stagingowego i danych testowych.
Najczęstsze błędy podczas testowania
- sprawdzanie tylko zmiany w pasku adresu;
- test tylko strony głównej;
- brak kontroli końcowego statusu 200;
- uznanie dwóch lub trzech kroków za „normalne”, choć można ich uniknąć;
- brak przypadków negatywnych;
- test po zalogowaniu, gdy reguła zależy od cookies;
- pominięcie
www, HTTP i trailing slash; - brak zapisanego oczekiwanego celu — wynik „wydaje się dobry”;
- używanie publicznego testera do poufnych lub nieopublikowanych URL-i.
Checklista akceptacji
- ☐ Kod źródła odpowiada planowi.
- ☐
Locationwskazuje bezpośrednio ostateczny URL. - ☐ Cel ma HTTPS, właściwy host i politykę ukośnika.
- ☐ Docelowy kod to 200.
- ☐ Liczba przekierowań wynosi 1, jeśli nie ma uzasadnionego wyjątku.
- ☐ Nie ma pętli.
- ☐ Parametry zachowują się zgodnie z wymaganiami.
- ☐ Przypadki podobne, ale nieobjęte regułą, nie są przekierowywane.
- ☐ Linki wewnętrzne i sitemapa wskazują cel bez korzystania z 301.
- ☐ Wynik został zapisany w raporcie migracji lub dzienniku zmian.
Podsumowanie
Najbardziej wiarygodny test łączy nagłówki serwera, pełny łańcuch i zachowanie przeglądarki. Zacznij od curl -I, potem użyj curl -IL, sprawdź ostateczny URL, kod 200 i liczbę kroków. Przy większej zmianie testuj arkusz wszystkich starych adresów oraz przypadki, których reguła nie powinna objąć.
Konfigurację samych reguł opisuje pełny przewodnik po przekierowaniach .htaccess. Jeśli masz setki URL-i albo migrację działającego serwisu, audyt w ramach wsparcia technicznego pozwoli wykryć 404, łańcuchy i pętle przed publikacją.