Przekierowania 301 to jeden z najważniejszych elementów optymalizacji SEO, szczególnie podczas migracji stron, zmiany adresów URL czy konsolidacji treści. Chociaż temat był poruszany wielokrotnie, wciąż budzi wiele pytań u webmasterów i specjalistów SEO. W tym artykule przedstawię najważniejsze rodzaje przekierowań 301 w pliku .htaccess oraz praktyczne rozwiązania typowych problemów.
Czym jest plik .htaccess?
Plik .htaccess to plik konfiguracyjny serwera Apache, który pozwala na modyfikację ustawień serwera dla konkretnego katalogu. Jest niezwykle przydatny do implementacji przekierowań, zabezpieczeń, kontroli dostępu i wielu innych funkcji bez konieczności modyfikowania głównych plików konfiguracyjnych serwera.
Warto pamiętać, że:
- Plik nie ma rozszerzenia – jego dokładna nazwa to „.htaccess”
- Należy go umieścić w głównym katalogu strony (lub w katalogu, dla którego mają działać reguły)
- Na początku pliku należy zawsze umieścić:
RewriteEngine On
lub czasem:
RewriteEngine On
RewriteBase /
Dlaczego przekierowania 301 są ważne dla SEO?
Przekierowanie 301 (permanent redirect) informuje wyszukiwarki, że strona została przeniesiona na stałe. Dzięki temu:
- Przekazywana jest „moc SEO” ze starej strony na nową
- Użytkownicy są automatycznie kierowani na właściwą stronę
- Unikamy duplikacji treści, co mogłoby skutkować karami od Google
- Zachowujemy pozycje w wynikach wyszukiwania podczas zmian w strukturze strony
Podstawowe przekierowania w .htaccess
Przekierowanie z domeny bez www na www
RewriteCond %{HTTP_HOST} ^domena\.pl$ [NC]
RewriteRule ^(.*)$ http://www.domena.pl/$1 [R=301,L]
Przekierowanie z www na domenę bez www
RewriteCond %{HTTP_HOST} ^www\.domena\.pl$ [NC]
RewriteRule ^(.*)$ http://domena.pl/$1 [R=301,L]
Z perspektywy SEO nie ma znaczenia, którą wersję wybierzesz, ale ważne jest, aby konsekwentnie używać jednej z nich. Jeżeli masz już zaindeksowane obie wersje, zalecam wybór tej, do której prowadzi więcej linków zewnętrznych.
Przekierowanie całej domeny na inną domenę
RewriteCond %{HTTP_HOST} ^staradomena\.pl$ [NC,OR]
RewriteCond %{HTTP_HOST} ^www\.staradomena\.pl$ [NC]
RewriteRule ^(.*)$ http://www.nowadomena.pl/$1 [R=301,L]
Ten kod przekierowuje zarówno stronę główną, jak i wszystkie podstrony na dokładnie te same adresy pod nową domeną. Jest to szczególnie ważne podczas migracji całej witryny.
Przekierowanie z index.php lub index.html na stronę główną
RewriteCond %{REQUEST_URI} ^\/index\.php$
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(.*)$ http://www.domena.pl/ [L,R=301]
Dla index.html:
RewriteCond %{REQUEST_URI} ^\/index\.html$
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(.*)$ http://www.domena.pl/ [L,R=301]
Zapobiega to indeksowaniu duplikatów strony głównej pod adresami z dodatkowym „index.php” lub „index.html”.
Zaawansowane przekierowania
Przekierowanie nieistniejących podstron na stronę główną
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://www.domena.pl/ [L,R=301]
Uwaga: Ten kod może nie działać na wszystkich hostingach. Jeśli po jego dodaniu cały plik .htaccess przestaje działać, należy go usunąć.
Przekierowanie z HTTPS na HTTP (rzadko stosowane)
RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Obecnie rzadko się to stosuje, ponieważ HTTPS jest preferowanym protokołem. Jednak może być przydatne w przypadku migracji strony z powrotem do HTTP lub gdy mamy zaindeksowane wersje HTTPS, a strona nie obsługuje SSL.
Przekierowanie z HTTP na HTTPS (bezpieczniejsze)
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Jest to obecnie zalecane podejście, ponieważ Google preferuje strony zabezpieczone protokołem HTTPS.
Przekierowanie konkretnej podstrony na inną
RewriteRule ^stara-podstrona\.html$ http://www.domena.pl/nowa-podstrona/ [R=301,L]
Przekierowanie całego katalogu na inny
RewriteRule ^stary-katalog/(.*)$ http://www.domena.pl/nowy-katalog/$1 [R=301,L]
Pakiet startowy dla nowej strony
Dla nowych stron warto wdrożyć podstawowy pakiet przekierowań już na początku:
apache
RewriteEngine On
RewriteBase /
# Przekierowanie z domeny bez www na www
RewriteCond %{HTTP_HOST} ^domena\.pl$ [NC]
RewriteRule ^(.*)$ http://www.domena.pl/$1 [R=301,L]
# Przekierowanie z index.php na stronę główną
RewriteCond %{REQUEST_URI} ^\/index\.php$
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(.*)$ http://www.domena.pl/ [L,R=301]
# Przekierowanie z HTTP na HTTPS (opcjonalnie, jeśli masz SSL)
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Częste problemy z przekierowaniami
1. Przekierowanie nie działa
Możliwe przyczyny:
- Błąd w składni kodu
- Serwer nie obsługuje mod_rewrite
- Plik .htaccess jest ignorowany przez serwer
- Konflikt z innymi regułami w .htaccess
Rozwiązanie: Sprawdź logi serwera, upewnij się, że mod_rewrite jest włączony, a plik .htaccess ma odpowiednie uprawnienia.
2. Pętla przekierowań
Jeśli przypadkowo ustawisz przekierowanie strony A na stronę B, a strony B na stronę A, utworzysz nieskończoną pętlę.
Rozwiązanie: Dokładnie sprawdzaj reguły przekierowań przed ich wdrożeniem.
3. Utrata parametrów URL
Niektóre przekierowania mogą gubić parametry GET z adresu URL.
Rozwiązanie: Użyj flagi QSA (Query String Append):
RewriteRule ^stara-strona\.php$ http://www.domena.pl/nowa-strona/ [R=301,L,QSA]
Podsumowanie
Odpowiednie przekierowania 301 to jeden z fundamentów dobrej optymalizacji SEO. Warto je wdrożyć już na początku istnienia strony lub podczas jej przebudowy, aby uniknąć duplikacji treści i utraty mocy SEO. Pamiętaj, że:
- Każda strona powinna być dostępna pod jednym adresem URL
- Wszelkie zmiany adresów URL powinny być obsługiwane przez przekierowania 301
- Przekierowania powinny prowadzić do najbardziej odpowiadających treścią stron, a nie zawsze na stronę główną
- Po wdrożeniu przekierowań warto zweryfikować ich działanie za pomocą narzędzi jak Screaming Frog czy plugin Redirect Path
Prawidłowe przekierowania pozwolą zachować wartość SEO Twojej strony i zapewnią dobre doświadczenia użytkownikom.