Zmiana adresu strony bez właściwego przekierowania może skończyć się błędem 404, utratą ruchu i zerwanymi linkami. Przekierowanie 301 w pliku .htaccess pozwala bezpiecznie wskazać nowy adres użytkownikom oraz robotom wyszukiwarek. Pokażę, gdzie umieścić regułę, jak dobrać właściwą składnię, jak obsłużyć HTTPS i zmianę domeny oraz jak sprawdzić, czy wszystko działa poprawnie.
Najważniejsze zasady konfiguracji przekierowań 301
- 301 oznacza trwałą zmianę adresu i powinno być używane wtedy, gdy stary URL nie wróci.
- Plik .htaccess umieść w katalogu głównym strony, zwykle tam, gdzie znajduje się plik index.
- Do prostych zmian wystarczy Redirect 301, a do reguł warunkowych użyj mod_rewrite.
- W pliku
.htaccesswzorzec RewriteRule nie zaczyna się od ukośnika. - Po wdrożeniu sprawdź kod odpowiedzi, łańcuchy przekierowań i działanie starego adresu w kilku wariantach.

Czym jest przekierowanie 301 i kiedy ma sens
Kod HTTP 301 informuje przeglądarkę i wyszukiwarkę, że zasób został przeniesiony na stałe. Użytkownik trafia wtedy automatycznie na nowy adres, a robot może potraktować stronę docelową jako właściwy odpowiednik starej.
Najczęściej stosuję takie przekierowanie przy zmianie adresu artykułu, usunięciu starej podstrony, migracji domeny, przejściu z HTTP na HTTPS albo uporządkowaniu wersji z przedrostkiem www. Dobrze dobrany nowy adres powinien odpowiadać treścią staremu, ponieważ przekierowanie przypadkowej strony na stronę główną zwykle daje słabszy efekt dla użytkownika i SEO.
301 nie jest tym samym co przekierowanie 302. To drugie oznacza sytuację tymczasową, na przykład krótką przerwę techniczną lub test. Jeśli użyjesz 302 podczas trwałej zmiany URL, możesz opóźnić przeniesienie sygnałów związanych ze starą stroną.
Kiedy nie stosować kodu 301
Nie przekierowuj automatycznie każdej usuniętej podstrony na stronę główną. Jeżeli nie istnieje sensowny zamiennik, lepszym rozwiązaniem może być poprawna odpowiedź 404 albo 410. Przekierowanie powinno prowadzić do treści możliwie blisko związanej ze starym adresem, a nie tylko do dowolnego miejsca w serwisie.
Gdzie umieścić regułę w pliku .htaccess
Plik .htaccess jest konfiguracyjnym plikiem serwera Apache działającym dla konkretnego katalogu i jego podkatalogów. W praktyce najczęściej znajduje się w katalogu głównym witryny, obok pliku index.php lub index.html.
Zanim coś zmienię, zawsze pobieram kopię pliku i sprawdzam, czy hosting korzysta z Apache albo LiteSpeed z obsługą reguł Apache. Na serwerze Nginx składnia .htaccess nie zadziała, ponieważ Nginx korzysta z własnej konfiguracji.
- Połącz się z serwerem przez menedżer plików, FTP albo SSH.
- Odszukaj plik
.htaccessw katalogu strony. - Wykonaj kopię zapasową przed edycją.
- Dodaj regułę przed ogólnymi regułami CMS, jeśli plik zawiera konfigurację WordPressa.
- Zapisz plik i od razu przetestuj konkretny stary adres.
Jeśli pliku nie widać, włącz pokazywanie ukrytych plików. Kropka na początku nazwy oznacza, że system lub klient FTP może domyślnie go ukrywać. Brak możliwości działania reguł może też wynikać z wyłączonego modułu mod_rewrite albo ograniczeń ustawionych przez administratora serwera.
Najprostsze reguły przekierowania 301 w praktyce
Pojedynczy adres na nowy adres
Do jednej prostej zmiany można użyć dyrektywy Redirect. W tym przypadku podajesz ścieżkę starego zasobu i ścieżkę nowego zasobu.
Redirect 301 /stary-adres /nowy-adresTo dobre rozwiązanie, gdy nie potrzebujesz warunków, wyrażeń regularnych ani kontroli nad parametrami zapytania. Jest czytelne i łatwe do utrzymania, dlatego przy pojedynczych adresach nie komplikowałbym konfiguracji przez rozbudowane reguły.
Przekierowanie z użyciem mod_rewrite
Jeżeli potrzebujesz większej kontroli, włącz silnik przepisywania adresów i użyj RewriteRule.
RewriteEngine On
RewriteRule ^stary-adres/?$ /nowy-adres [R=301,L]Symbol ^ oznacza początek wzorca, a $ jego koniec. Fragment /?$ pozwala obsłużyć adres zarówno ze końcowym ukośnikiem, jak i bez niego. Flaga R=301 wymusza przekierowanie, natomiast L mówi Apache, aby zakończył przetwarzanie reguł po znalezieniu dopasowania.
W pliku .htaccess nie dodawaj ukośnika przed wzorcem RewriteRule. Poprawna forma to ^stary-adres, a nie ^/stary-adres. Ten szczegół jest częstą przyczyną sytuacji, w której reguła wygląda poprawnie, ale nie reaguje.
Przekierowanie całej struktury katalogu
Przy zmianie nazw kategorii lub folderów można zachować końcową część ścieżki.
RewriteEngine On
RewriteRule ^stare-artykuly/(.*)$ /poradnik/$1 [R=301,L]Jeżeli ktoś odwiedzi adres zaczynający się od /stare-artykuly/, jego dalsza ścieżka zostanie przeniesiona do /poradnik/. Wzorzec (.*) przechwytuje pozostałą część adresu, a $1 wstawia ją w nowym miejscu.
Usuwanie lub zachowanie parametrów
Parametry po znaku zapytania, na przykład filtry i identyfikatory kampanii, mogą zostać zachowane podczas przekierowania. Jeżeli chcesz je usunąć, w nowszym Apache możesz użyć flagi QSD.
RewriteEngine On
RewriteRule ^stara-oferta$ /oferta [R=301,L,QSD]Bez QSD serwer często przekazuje istniejący query string dalej. To przydatne przy parametrach śledzących, ale nie zawsze pożądane przy starych identyfikatorach produktów. Zanim usuniesz parametry, sprawdź, czy aplikacja nie używa ich do wyświetlania właściwej treści.
HTTPS, www i zmiana domeny bez pętli
Przy migracji całej witryny nie wystarczy jedna reguła dla pojedynczej podstrony. Trzeba ustalić docelową wersję adresu, na przykład HTTPS bez www, a potem kierować pozostałe warianty bezpośrednio do niej.
Największe ryzyko stanowi pętla przekierowań. Może powstać wtedy, gdy jedna reguła wymusza HTTPS, druga dodaje www, a trzecia je usuwa. Zamiast trzech kolejnych skoków lepiej przygotować warunek, który kieruje każdy niepożądany wariant od razu do wersji kanonicznej.
Przy zmianie domeny przygotuj mapę adresów. Dla małego serwisu może to być tabela zawierająca kilkanaście lub kilkadziesiąt URL-i, a przy większej migracji warto wygenerować ją automatycznie i przetestować partiami.
| Sytuacja | Docelowa reguła | Na co uważać |
|---|---|---|
| Zmiana pojedynczego slugu | Stara ścieżka na dokładny nowy adres | Nie kieruj automatycznie na stronę główną |
| Zmiana katalogu | Zachowanie końcówki adresu przez $1
|
Sprawdź wszystkie podkatalogi |
| Przejście na HTTPS | Każdy wariant HTTP na odpowiednik HTTPS | Zweryfikuj certyfikat i zasoby mieszane |
| Zmiana domeny | Stary host na konkretny nowy host | Unikaj kilku pośrednich przekierowań |
Po migracji zaktualizuj również linki wewnętrzne, mapę XML, adres kanoniczny i ustawienia analityki. 301 powinno być zabezpieczeniem dla starych odnośników, a nie powodem, by pozostawiać w serwisie setki nieaktualnych linków.
Najczęstsze błędy i sposoby ich diagnozowania
Reguła znajduje się w złym miejscu
Reguła umieszczona po bardzo ogólnym przekierowaniu może nigdy nie zostać wykonana. W pliku z konfiguracją CMS szczególnie ważna jest kolejność. Konkretne przekierowania dodaj przed regułami, które przechwytują całą witrynę.
Powstaje łańcuch przekierowań
Łańcuch wygląda tak: stary adres prowadzi do pośredniego, a dopiero on do finalnego. Jedno przekierowanie zwykle nie stanowi problemu, ale kilka kolejnych zwiększa czas ładowania i utrudnia robotom interpretację migracji. Zawsze kieruj stary URL bezpośrednio do końcowego adresu.
Pojawia się błąd 500
Błąd 500 najczęściej oznacza literówkę, niedozwoloną dyrektywę albo niepoprawną składnię. Przywróć kopię pliku, sprawdź logi serwera i dodawaj reguły pojedynczo. Nie testuj kilku zmian naraz, bo później trudno ustalić, która z nich wywołała problem.
Przeglądarka pokazuje stare zachowanie
Przekierowania 301 mogą być zapamiętywane przez przeglądarkę i warstwy cache. Sprawdź adres w oknie prywatnym, przez inne połączenie albo narzędziem wysyłającym żądanie HTTP. Samo odświeżenie strony nie zawsze wystarczy.
Przeczytaj również: Jak zaprojektować skuteczny pop-up bez irytowania użytkowników
Jak sprawdzić kod odpowiedzi
Test powinien obejmować kod odpowiedzi starego adresu, nagłówek Location oraz końcowy kod nowej strony. Prawidłowy scenariusz to 301, jeden cel i odpowiedź 200 na stronie docelowej. Sprawdź też wersję z końcowym ukośnikiem, bez niego oraz z parametrami, jeśli wcześniej występowały.
Jak wdrożyć zmianę bez utraty ruchu
Przed edycją przygotuj listę starych adresów z analityki, logów serwera, mapy witryny i narzędzi dla webmasterów. Przy większej migracji przypisz każdemu staremu URL-owi jeden nowy odpowiednik. Taka mapa szybko pokazuje, gdzie brakuje celu albo gdzie kilka starych stron kieruje do jednego, niepasującego miejsca.
Po wdrożeniu obserwuj błędy 404, spadki ruchu i raporty indeksowania przez kilka tygodni. Nie usuwaj pochopnie poprawnych przekierowań tylko dlatego, że stary adres nie pojawia się już często w statystykach. Może nadal przynosić wejścia z dawnych publikacji, linków zewnętrznych lub zapisanych zakładek.
W praktyce najlepiej działa prosty proces:
- Zidentyfikuj stare adresy i wybierz ich najlepsze odpowiedniki.
- Zrób kopię pliku
.htaccess. - Dodaj najpierw kilka reguł testowych.
- Sprawdź statusy HTTP i brak pętli.
- Rozszerz konfigurację na całą migrację.
- Monitoruj błędy i popraw reguły, które tworzą łańcuchy.
Jeżeli strona stoi za CDN-em albo ma włączoną pamięć podręczną hostingu, wyczyść cache po zapisaniu zmian. Inaczej możesz testować starą wersję konfiguracji i wyciągnąć błędny wniosek, że przekierowanie nie działa.
Mała reguła, duża odpowiedzialność za adresy
Najbezpieczniejsze przekierowanie 301 jest konkretne, bezpośrednie i prowadzi do strony o podobnym znaczeniu. Do jednej zmiany wystarczy prosta dyrektywa, a mod_rewrite zostaw na przypadki wymagające warunków, przechwytywania ścieżek lub obsługi parametrów.
Sam wpis w .htaccess zajmuje kilka sekund, ale dobra migracja wymaga mapy adresów, kopii zapasowej i testów. To właśnie te trzy elementy najczęściej decydują, czy zmiana URL-i będzie spokojną porządkową korektą, czy źródłem niepotrzebnych problemów z ruchem i indeksowaniem.