Przekierowanie 301 w .htaccess bez pętli i spadków widoczności

Artykuł o przekierowaniu 301 w pliku htaccess. Grafika z elementami sieciowymi.

Napisano przez

Dominik Sadowski

Opublikowano

31 maj 2026

Spis treści

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 Redirect albo modułu mod_rewrite.
  • W katalogu głównym wzorzec RewriteRule zwykle 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.

Plik .htaccess z dyrektywami WordPress, w tym regułami dla przekierowanie 301.

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-strona

Ta 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 On włącza mechanizm przepisywania adresów,
  • ^stara-strona/?$ dopasowuje starą ścieżkę z opcjonalnym ukośnikiem na końcu,
  • /nowa-strona wskazuje adres docelowy,
  • R=301 zwraca stałe przekierowanie,
  • L koń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-strony

Najwię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-strona

Sprawdź 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.

FAQ - Najczęstsze pytania

Kodu 301 użyj, gdy adres został zmieniony na stałe, na przykład podczas zmiany URL artykułu, migracji domeny lub porządkowania struktury serwisu. Kod 302 służy do zmian tymczasowych i nie wskazuje trwale nowego adresu jako zastępstwa.

Możesz użyć dyrektywy Redirect 301 /stara-strona /nowa-strona. Alternatywnie zastosuj moduł mod_rewrite: RewriteEngine On oraz RewriteRule ^stara-strona/?$ /nowa-strona [R=301,L]. W katalogu głównym wzorzec zwykle nie zaczyna się od ukośnika.

Stary adres powinien prowadzić bezpośrednio do finalnej wersji nowego URL, bez pośrednich przekierowań HTTP, HTTPS lub wariantu z www. Sprawdź, czy reguły nie kierują starego i nowego adresu do siebie nawzajem, oraz czy wzorzec nie przechwytuje nieplanowanych plików i katalogów.

Najpierw przetestuj ją jako 302, ponieważ stałe przekierowanie może zostać zapamiętane przez przeglądarkę, CDN lub serwer. Po wdrożeniu sprawdź status 301 Moved Permanently, nagłówek Location, warianty adresu z ukośnikiem i bez niego oraz linki wewnętrzne, mapę XML i znacznik canonical.

Oceń artykuł

Ocena: 0.00 Liczba głosów: 0

Tagi:

przekierowania .htaccess apache mod_rewrite

Udostępnij artykuł

Dominik Sadowski

Dominik Sadowski

Na imię mam Dominik i od 14 lat zgłębiam tajniki marketingu internetowego, ze szczególnym uwzględnieniem SEO i sztucznej inteligencji. Moja fascynacja tymi dziedzinami zaczęła się od chęci zrozumienia, jak technologia może realnie wpływać na sukces biznesu w sieci. Staram się przekazywać wiedzę w sposób przystępny, analizując najnowsze trendy i porównując dostępne dane, aby pomóc Wam nawigować po dynamicznym świecie cyfrowego marketingu. Moim celem jest dostarczanie wartościowych, sprawdzonych i aktualnych informacji, które ułatwią podejmowanie świadomych decyzji.

Napisz komentarz