przekierowanie 301 - htaccessTemat wałkowany 1000 razy, a mimo wszystko wraca jak bumerang. Sam również, mam kilka „gotowców” które wrzucam w przypadku swoich nowych stron oraz jak dostaję stronę klienta do optymalizacji to poprostu wrzucam odpowiednie kody i sprawa załatwiona… najczęściej. Wiadomo, że trochę upraszczam – ale warto mieć „gotowca” (który zamieściłem na końcu) – i zaczynać od jego modyfikacji, a nie od zera.

Dlaczego w ogóle z tym przekierowanie jest tyle problemów?

Powodów może być kilka, podstawowy – że nie popełniamy jakiś błąd w kodzie. Ale to jesteśmy wstanie szybko znaleźć w google, bo poradników jest dość dużo w google. Główną przyczyną, że coś nie działa jest specyficzna konfiguracja serwera, w którym pewne elementy mogą nie działać – a co za tym idzie najczęściej przekierowanie nie działa. Tu niestety nie jestem wstanie podać „poprawnej” konfiguracji – bo raz, że się nie czuję na tyle kompetentny by informować o konfiguracji serwera. A inna sprawa, że czasem taka a nie inna konfiguracja jest do czegoś potrzebna. W każdym razie wtedy jest więcej zabawy. Ja postaram się podać konfigurację, która działa na wszystkich moich serwerach i większości klientów.

Krótko o .htaccess

Plik .htaccess nie ma ma rozszerzenia. Jego postać jest dokłądnie tak jak zapisałem. Na początku pliku powinniśmy umieścić:

RewriteEngine On

ew.:

RewriteEngine On
RewriteBase /

Są to elementy które najczęściej wystarczą do poprawnego działania poniższych kodów.

Jak zrobić przekierowanie 301 za pomocą .htaccess?

Zacznę od standardu, który każdy powinien mieć – czyli przekierowanie strony z domena.pl na www.domena.pl:

RewriteCond %{HTTP_HOST} ^domena.pl
RewriteRule ^(.*)$ http://www.domena.pl/$1 [R=permanent,L]

Jest to o tyle istotne, by google nie zaindeksował nam witryny z www i bez www, bo mogą z tego wyniknąć pewne komplikacje.

Sytuacja analogiczna czyli z www.domena.pl na domena.pl

RewriteCond %{HTTP_HOST} ^www.domena.pl
RewriteRule ^(.*)$ http://domena.pl/$1 [R=permanent,L]

Z punktu widzenia SEO, nie ma kompletnie znaczenia której opcji użyjemy. Są one pod względem seo na tym samym poziomie traktowane. Jednak jeżeli obie opcje mamy zaindeksowane, moim zdaniem powinniśmy wybrać tą do której prowadzi więcej linków, choć teoretycznie po zastosowaniu 301 moc powinna być „scalona” w jedno.

Osobiście przyzwyczaiłem się do postaci z www, czyli www.domena.pl i tego też będę się trzymał we wpisie.

Jak przekierować inną domenę?

Bardzo częsta sytuacja gdy chcemy przekierować: ruch użytkowników, pozycję google, moc domeny na nową używamy poniższego kodu. Od razu przekierujmy opcje zarówno z jak i bez www.

RewriteCond %{HTTP_HOST} ^domena.pl$ [NC]
RewriteRule ^(.*)$ http://www.domena.pl/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www.domena.pl$ [NC]
RewriteRule ^(.*)$ http://www.domena.pl/$1 [R=301,L]

Kod przekierowuje zarówno strony główne jak i wszystkie podstrony na dokładnie ten sam adres tylko pod nową domeną. Jest to niezwykle ważne gdy mamy wiele podstron wysoko (long tail) i po kliknięciu w taką stronę w google użytkownik nawet może się nie zorientować, że został przekierowany już na nową domenę. Docelowo domeny w google zostaną podmienione na te z nową domeną.

Przekierowanie z index.php / index.html na domenę główną

Bardzo często w szczególności w starszych stronach mamy sytuację, że powrót do strony głównej nie odbywa się do www.domena.pl tylko do www.domena.pl/index.php i wtedy pojawia się problem, że mamy stronę główną pod dwoma adresami. (analogicznie www.domena.pl/index.html). W takiej sytuacji umieszczamy poniższy kod:

RewriteCond %{REQUEST_URI} ^\/index.php$
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(.*)$ http://www.domena.pl/ [L,R=301]

Dla przekieowania z index.html:

RewriteCond %{REQUEST_URI} ^\/index.html$
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(.*)$ http://www.domena.pl/ [L,R=301]

Ruch z nieistniejących podstron serwisu:

Czasem zdarza się, że niektóre podstrony z naszego serwisu znikają (np. kasujemy nieaktualny wpis / usera itp.). Niby wszystko ładnie – ale taka strona może być wysoko w google na jakąś frazę o której nie mamy nawet pojęcia i taki użytkownik po prostu nie zobaczy nic / stronę z błędem / 404 itd. Warto go zatem przekierować na jakąś podstronę – ja wybrałem stronę główną.

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://www.domena.pl/ [L,R=301]

Niestety często się spotykam z tym, że nie na wszystkich hostingach ten kod działa, dlatego jeżeli coś by cały .htaccess nie działał, to ten fragment może być tego powodem. Proponuję zwrócić na niego szczególną uwagę.

Gotowy „pakiet startowy”

Dla leniwych przygotowałem, pakiet startowy – który powinniśmy wrzucić na start dla nowo powstałej strony, zakłada on, że strona jest zbudowana w technologii php. Pakiet zawiera:

  • przekierowanie z „bez www” na opcję „z www”
  • przekierowanie podstron z opcji „bez www”
  • przekierowanie z index.php na główną
  • części „stałe” kodu

 

RewriteEngine On
RewriteCond %{HTTP_HOST} ^domena.pl
RewriteRule ^(.*)$ http://www.domena.pl/$1 [R=permanent,L]

RewriteCond %{REQUEST_URI} ^\/index.php$
RewriteCond %{QUERY_STRING} ^$
RewriteRule ^(.*)$ http://www.domena.pl/ [L,R=301]

 

Przekierowanie https do http

Czasem może się zdarzyć, że potrzebujemy przekierować stronę z https na http, szczególnie jest to istotne, gdy w Google są nadal zaindeksowane podstrony z https i chcemy się ich pozbyć. Wtedy warto zastosować w pliku .htaccess taki kod:

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule (.*) http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

 Podsumowanie

Odpowiednie przekierowanie jest bardzo ważne i powinno być jedną z pierwszych rzeczy którą robimy podczas optymalizacji serwisu. Ważne jest to głównie z powodu duplikatu i ew. utracie „mocy” którą możemy tracić. Jest kilka sosobów którę mogą przyspieszyć używanie .htaccess szczególnie tworząc strony zaplecze. Postaram się opisać to w kolejnej części informacji o .htaccess.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *