Stara podstrona nadal pojawia się w wynikach Google, ale użytkownik trafia na błąd 404? W takiej sytuacji przekierowanie 301 w pliku .htaccess pozwala przenieść odwiedzających i sygnały SEO na właściwy adres. Pokażę, jak skonfigurować reguły, kiedy użyć kodu 301 zamiast 302 oraz jak uniknąć pętli, łańcuchów i utraty widoczności.
Najważniejsze zasady skutecznego przekierowania 301
- Kod 301 stosuj wtedy, gdy adres został zmieniony na stałe.
- W pliku .htaccess najprostsza reguła korzysta z dyrektywy
Redirectalbo modułumod_rewrite. - W katalogu głównym wzorzec
RewriteRulezwykle zapisuje się bez początkowego ukośnika. - Przed publikacją reguły 301 testuj ją jako 302, ponieważ stałe przekierowania mogą zostać zapamiętane przez przeglądarkę.
- Po wdrożeniu sprawdź status 301, nagłówek lokalizacji, kanoniczny adres i aktualność linków wewnętrznych.

Kiedy przekierowanie 301 ma sens dla SEO
Przekierowanie 301 informuje przeglądarkę i roboty, że dana strona została przeniesiona na stałe. To właściwy wybór przy zmianie adresu artykułu, usuwaniu starej podstrony, migracji domeny albo porządkowaniu struktury serwisu.
W praktyce najważniejsze jest skierowanie starego adresu do najbliższego tematycznie odpowiednika. Nie przekierowuję każdego usuniętego wpisu na stronę główną, ponieważ taki ruch często nie pomaga użytkownikowi i może wyglądać jak tak zwany soft 404. Jeśli nie ma sensownego zamiennika, lepszą odpowiedzią może być prawdziwy kod 404 albo 410.
| Kod | Kiedy go użyć | Znaczenie dla SEO |
|---|---|---|
| 301 | Zmiana stała | Wskazuje nowy adres jako docelowy |
| 302 | Zmiana tymczasowa | Nie sugeruje trwałego zastąpienia starej strony |
| 307 | Tymczasowa zmiana z zachowaniem metody żądania | Przydatny w określonych scenariuszach technicznych |
| 308 | Stała zmiana z zachowaniem metody żądania | Alternatywa dla 301, rzadziej spotykana w prostych konfiguracjach |
Przy zmianie adresu strony Google traktuje przekierowanie serwerowe jako mocny sygnał, że nowa podstrona powinna zastąpić starą. Nie oznacza to jednak natychmiastowego wzrostu pozycji. Liczą się także jakość treści, linkowanie wewnętrzne, indeksowanie i zgodność starego oraz nowego adresu.
Zanim zmienisz .htaccess, sprawdź te warunki
Plik .htaccess działa na serwerach Apache oraz na wielu hostingach korzystających z LiteSpeed. Samo wklejenie reguły nie wystarczy, jeśli hosting nie obsługuje odpowiednich dyrektyw albo ma wyłączone nadpisywanie konfiguracji przez AllowOverride.
Gdzie znajduje się plik
Najczęściej plik leży w katalogu głównym domeny, obok plików instalacji WordPressa lub innego CMS-a. Jego nazwa zaczyna się od kropki, dlatego menedżer plików może domyślnie go ukrywać.
Przed edycją pobieram kopię zapasową i sprawdzam, czy plik nie zawiera już reguł wymuszających HTTPS, wersję z www albo obsługujących system CMS. Kolejność ma znaczenie, a dopisanie nowej instrukcji w przypadkowym miejscu może zmienić działanie całej konfiguracji.
Jak zapisać regułę
W pliku .htaccess znajdującym się w katalogu głównym wzorzec w RewriteRule zwykle nie zaczyna się od ukośnika. Dla adresu kończącego się na /stara-strona zapisujesz więc ^stara-strona/?$, a nie ^/stara-strona/?$.
Jeśli strona działa w podkatalogu, reguły mogą wymagać innego wzorca. To jeden z powodów, dla których kopiowanie przypadkowego fragmentu z internetu często kończy się błędem 500 albo przekierowaniem nie tego adresu, który miał zostać zmieniony.
Jak ustawić przekierowanie 301 krok po kroku
Najprostsza metoda wykorzystuje dyrektywę Redirect. Sprawdza się przy pojedynczej zmianie adresu, gdy nie musisz dopasowywać wielu wariantów ścieżki.
Redirect 301 /stara-strona /nowa-stronaTa reguła przekieruje żądanie starej ścieżki na nową w obrębie tej samej witryny. Przy prostych migracjach jest czytelna i mniej podatna na pomyłki niż rozbudowane wyrażenia regularne.
Gdy potrzebujesz większej kontroli, użyj modułu mod_rewrite. Przykład dla jednej podstrony wygląda tak:
RewriteEngine On
RewriteRule ^stara-strona/?$ /nowa-strona [R=301,L]Poszczególne elementy oznaczają:
-
RewriteEngine Onwłącza mechanizm przepisywania adresów, -
^stara-strona/?$dopasowuje starą ścieżkę z opcjonalnym ukośnikiem na końcu, -
/nowa-stronawskazuje adres docelowy, -
R=301zwraca stałe przekierowanie, -
Lkończy przetwarzanie reguł po znalezieniu dopasowania.
Warto wiedzieć, że parametry zapytania, na przykład śledzące źródło wejścia, są przy takim przekierowaniu zazwyczaj zachowywane. Jeżeli chcesz je usunąć, w Apache 2.4 możesz użyć flagi [R=301,L,QSD]. Stosuj ją świadomie, bo czasem parametry są potrzebne analityce albo działaniu aplikacji.
Przekierowanie wielu podobnych adresów
Przy zmianie struktury kategorii można dopasować fragment ścieżki i przenieść go do nowego miejsca:
RewriteEngine On
RewriteRule ^blog/(.*)$ /poradnik/$1 [R=301,L]Reguła zachowa dopasowaną końcówkę adresu. Dzięki temu /blog/seo trafi do /poradnik/seo. Takie rozwiązanie jest wygodne przy masowej migracji, ale wymaga dokładnego testu, ponieważ jeden zbyt szeroki wzorzec może przechwycić także adresy, których nie planowałeś zmieniać.
Gotowe scenariusze, w których przydaje się 301
Zmiana adresu pojedynczego artykułu
Jeżeli artykuł otrzymuje krótszy lub lepiej opisujący treść adres, kieruję stary URL bezpośrednio do nowego. Przykładowo:
Redirect 301 /jak-pozycjonowac-strone-2023 /pozycjonowanie-stronyNajwiększą korzyść daje tutaj przekierowanie jeden do jednego. Użytkownik od razu trafia do treści, której się spodziewa, a sygnały zgromadzone przez stary adres mają jasny cel.
Usunięcie rozszerzenia .html
Jeżeli serwis przechodzi z adresów zakończonych rozszerzeniem na czyste ścieżki, trzeba obsłużyć stare warianty:
RewriteEngine On
RewriteRule ^artykul\.html$ /artykul [R=301,L]Kropkę poprzedzam ukośnikiem odwrotnym, ponieważ w wyrażeniu regularnym oznacza ona dowolny znak. Bez tego drobnego szczegółu reguła może dopasowywać więcej adresów, niż zakładasz.
Wymuszenie jednej wersji adresu
Strona dostępna jednocześnie przez HTTP, HTTPS, wersję z www i bez niego może tworzyć kilka wariantów tego samego zasobu. W takim przypadku konfiguracja powinna prowadzić wszystkie alternatywne wersje do jednego preferowanego adresu.
Nie łącz jednak kilku przekierowań w łańcuch. Lepiej przejść od razu z nieaktualnego wariantu do finalnej wersji niż wykonywać sekwencję HTTP - HTTPS - wersja kanoniczna. Każdy dodatkowy skok wydłuża odpowiedź i utrudnia diagnozę.
Przeczytaj również: Oszustwa na wizytówkę Google - jak rozpoznać i reagować
Zmiana całej struktury katalogów
Przy migracji większej części serwisu można użyć reguły opartej na grupie przechwytującej:
RewriteEngine On
RewriteRule ^stara-kategoria/(.*)$ /nowa-kategoria/$1 [R=301,L]Przed wdrożeniem przygotowałbym listę starych adresów i ich nowych odpowiedników. Automatyczna reguła jest szybka, ale nie zawsze rozumie różnice między typami treści. W serwisie z dużym ruchem ręczna kontrola najważniejszych podstron jest rozsądniejsza niż bezwarunkowe przekierowanie całego katalogu.
Błędy, które psują przekierowania i widoczność
Najczęstsza pomyłka to używanie kodu 301 do testu. Przeglądarka, CDN albo serwer może zapamiętać stałe przekierowanie, przez co po poprawieniu reguły nadal widzisz stary efekt. Sam zaczynam od 302 podczas testów, a dopiero po potwierdzeniu działania zmieniam ją na 301.
- Pętla przekierowań powstaje, gdy stara i nowa reguła kierują do siebie nawzajem.
- Łańcuch przekierowań pojawia się, gdy jeden adres prowadzi przez dwa lub więcej pośrednich adresów.
- Zbyt szeroki wzorzec może przekierować obrazy, pliki techniczne lub całe katalogi.
- Brak flagi L może sprawić, że po pierwszej regule uruchomią się kolejne instrukcje.
- Przekierowanie na stronę główną nie zastępuje właściwego dopasowania tematycznego.
- Błąd składni w pliku może wywołać odpowiedź 500 i czasowo wyłączyć witrynę.
Uważaj też na reguły generowane przez WordPressa, wtyczki i panel hostingu. Czasem ręcznie dopisana instrukcja jest poprawna, ale późniejsza aktualizacja nadpisuje plik albo dodaje konkurencyjną regułę wyżej. Dlatego po zmianach sprawdzam nie tylko sam zapis, lecz także rzeczywistą odpowiedź serwera.
Jak sprawdzić, czy przekierowanie działa poprawnie
Najprostszy test polega na otwarciu starego adresu w trybie prywatnym i sprawdzeniu, czy trafiasz bezpośrednio na właściwą podstronę. W narzędziach deweloperskich przeglądarki, w zakładce sieciowej, powinien pojawić się najpierw status 301 Moved Permanently, a potem odpowiedź strony docelowej.
Możesz także skorzystać z narzędzia sprawdzającego nagłówki HTTP. Prawidłowa odpowiedź powinna zawierać między innymi:
HTTP/1.1 301 Moved Permanently
Location: /nowa-stronaSprawdź osobno wersję z ukośnikiem na końcu, bez ukośnika, z parametrami oraz warianty z HTTP i HTTPS, jeśli występowały wcześniej. Jeden działający adres nie gwarantuje, że wszystkie jego odmiany zostały obsłużone.
Po wdrożeniu popraw także linki wewnętrzne, mapę witryny XML i znaczniki canonical. Nie ma sensu kierować użytkowników przez 301, jeśli własna nawigacja nadal prowadzi do starych adresów. W przypadku większej migracji monitoruj indeksowanie i błędy adresów przez kilka tygodni, ponieważ roboty nie aktualizują całego serwisu w jednej chwili.
Co sprawdzić przed zamknięciem migracji adresów
Dobrze skonfigurowane przekierowanie 301 jest krótkie, jednoznaczne i prowadzi od starego adresu bezpośrednio do najlepszego odpowiednika. Najwięcej problemów powodują nie same reguły, lecz pośpiech, brak kopii pliku i pomijanie testów wariantów adresu.
Przed zakończeniem prac przechodzę przez trzy punkty: sprawdzam kod odpowiedzi, upewniam się, że nie ma pętli ani łańcucha, a następnie aktualizuję linkowanie i mapę witryny. Taka kontrola zajmuje kilka minut, a potrafi uchronić stronę przed utratą ruchu, błędami 404 i niepotrzebnym chaosem w indeksie.