subiektywnie o e-biznesie

Przekierowanie 301 za pomocą pliku .htaccess

Przekierowanie 301 za pomocą pliku .htaccess

Przekierowanie 301 jest bardzo popularnym tematem. Wiele webmasterów wie o co chodzi. Jednak nie wszyscy. Niektórzy coś o tym słyszeli, ale nie wiedzą dokładnie do czego to jest, a jeszcze inni nawet nie słyszeli o przekierowaniach.

Przekierowanie jest bardzo przydatne przy pozycjonowaniu. Dzięki niemu można spreparować wyświetlanie adresów WWW według własnych potrzeb – a co za tym idzie, przygotować je dla wyszukiwarek.

Możliwość przekierowania 301 daje nam serwer Apache. Można na nim utworzyć plik .htaccess, w którym możemy dokonać przekierowań.

Przekierowanie na nową domenę

Jednym z najpopularniejszych zastosowań przekierowania 301 (tzw. przekierowanie permanentne) jest przekierowanie na nową domenę.

Załóżmy, że mamy serwis pod domeną www.staradomena.pl. W międzyczasie znaleźliśmy lepszą domeną – lepiej pasującą dla naszej witryny: www.nowadomena.pl. Chcemy, żeby nasz serwis znalazł się pod nową domeną. Wszystko byłoby w porządku, gdyby nie fakt, że wszędzie w Internecie jesteśmy znani pod domeną www.staradomena.pl – w tym również wyszukiwarki znają nas pod tą domeną.

W tym momencie można zrobić przekierowanie 301 z dotychczasowej domeny na nową. Dzięki temu każdy, kto wpisze w wyszukiwarkę stary adres zostanie przekierowany na nowy. Również wyszukiwarki zmienią w swoich indeksach na strony z nową domeną. Jest to szczególnie ważne dla wyszukiwarek takich, jak Google, gdyż gdyby istniały dwie domeny z tą samą treścią, to witryny te mogły by podpaść jako duplicate content (skopiowana treść). Z kolei gdyby serwis został tylko podczepiony pod nową domeną, a stara stałaby bez użytku, to właściwie zaczynalibyśmy pozycjonowanie nowej domeny od początku – cała moc poprzedniej domeny by przepadła, a przekierowanie 301 przenosi moc poprzedniej domeny na nową.

Aby przekierować ruch na nową domenę wystarczy w katalogu głównym starej domeny stworzyć plik .htaccess a w nim wpisać następujący fragment:

RewriteEngine On
RewriteRule ^(.*)$ http://www.nowadomena.pl/$1 [R=301,L]

Pierwsza linijka uruchamia moduł mod-rewrite. Z kolei druga (korzystająca z owego modułu) przekierowuje cały ruch na domenę www.nowadomena.pl.

Domena „z www” i „bez www”

Zapewne wiesz, że chcąc wejść na stronę www.przykładowadomena.pl nie ma znaczenia czy wpiszesz adres „z www” na początku czy bez. Wpisując przykladowadomena.pl czy www.przykladowadomena.pl znajdziemy się na tej samej stronie.

Dla człowieka zapis jest nieistotny, bo i tak trafiamy na pożądaną stronę. Niestety w przypadku wyszukiwarek tak nie jest. www.przykladowadomena.plprzykladowadomena.pl dla wyszukiwarek to dwie różne domeny! Mimo, iż prowadzą do tej samej strony. Dla Google mamy dwie domeny z tą samą treścią.

Dlatego stawiając serwis na danej domenie należy zdecydować się na używanie jednej z wersji: „z www” lub bez. Następnie należy przekierować ruch na wybraną wersję oraz pozycjonować i rozpowszechniać tylko wybraną wersję.

Jeśli chcemy używać tylko domeny „z www” należy zastosować poniższy kod w pliku .htaccess w katalogu głównym domeny:

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

Jeśli ktoś wpisze naszą domenę „z www” to nic się nie stanie – normalnie wejdzie na stronę. Jeśli zaś wpisze „bez www” to zostanie automatycznie przekierowany do wersji „z www”.

W przypadku gdy chcemy używać domenę „bez www” należy w .htaccess wpisać fragment:

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

Przekierowanie zachowa się odwrotnie niż w poprzednim przykładzie.

Pliki „index” w adresach URL

Inną sprawą są pliki „index” (np. index.htm, index.html, index.php). Mając takie pliki w folderach na serwerze wystarczy wpisać w przeglądarkę adres z nazwą folderu – przykładowo www.przykladowadomena.pl/folder/. Trafimy wówczas np. na stronę index.htm danego folderu, mimo, iż nie wyświetla się ten plik w pasku przeglądarki.

Tu mamy kolejną zagwozdkę, gdyż na stronę można wejść z dwóch adresów. Przykładowo z www.przykladowadomena.pl/folder/www.przykladowadomena.pl/folder/index.htm. Webmasterzy często o tym zapominają. Co więcej, zdarza się, że linkują do obu wersji (np. do strony głównej – www.przykladowadomena.pl/index.html). Czasem linkują w taki sposób również wewnątrz własnych serwisów.

Z pomocą znów przychodzi nam .htaccess. Można dzięki niemu przekierować wszystkie adresy zawierające plik „index” w nazwie na domyślny adres – bez pliku „index”. Wystarczy umieścić poniższy kod pod fragmentem włączającym mod-rewrite:

Rewriterule ^(.*)\/index\.htm$ $1 [R=301,L]
Rewriterule ^index\.htm$ / [R=301,L]

Pierwsza linijka przekierowuje wszystkie adresy folderów z plikiem index.htm na adres samego folderu. Np. www.przykladowadomena.pl/folder1/folder2/index.htm zostanie przekierowane na www.przykladowadomena.pl/folder1/folder2/.

Druga linijka przekierowuje stronę główną. Czyli: www.przykladowadomena.pl/index.htm będzie przekierowane na www.przykladowadomena.pl.

Jeśli używamy innych rozszerzeń np. html, php to wystarczy wpisać to rozszerzenie w powyższym fragmencie zamiast „htm”. Ewentualnie jeśli stosujemy różne rozszerzenia, należy wpisać w .htaccess kilka wersji powyższego kodu.

Jak widać przekierowania za pomocą .htaccess mogą przynieść wiele korzyści – zwłaszcza w procesie pozycjonowania. Przekierowania permanentne dają nam gwarancję, że adresy są udostępnione w oczekiwany przez nas sposób.

Paweł Landzberg o katalogach

48 komentarzy

  1. Gdzieś czytałem, że domena.pl/ oraz domena.pl – bez „/” na końcu również mogą być traktowane jako dwie „osobne” i może to powodować problemy z duplicate content. To prawda?

    Odpisz
  2. Dobry wpis.Ciągle na czasie. Dzięki za opisanie tej kwestii związanej z plikiem index.

    Odpisz
  3. Ten kod Rewriterule ^index\.htm$ / [R=301,L] działa mi tylko w przypadku htm i html a gdy wpisuję rozszerzenie .php to wszystkie linki na mojej stronie prowadzą do strony głównej. Mógłby mi ktoś wyjaśnić w czym tkwi problem ?

    Odpisz
    • Dodatkowo reguła Rewriterule ^(.*)\/index\.htm$ $1 [R=301,L] w ogóle mi nie działa. Jedyne co udało mi się zrobić na podstawie tego artykułu to przekierować index.htm i index.html na stronę główną. Z resztą mam problemy. Potrzebuję jeszcze zrobić aby mojastrona.pl/index.php była moja strona.pl i wszystkie końcówki w adresach .html przekierować do folderu. Bo póki co to mam podwójne adresy mojastrona.pl/costam/costam.html i mojastrona.pl/costam/costam/

      Odpisz
    • Mam wiele pytań odnośnie tego artykułu. Np. przekierowanie domeny. Czy jeżeli sobie wymyślę nową domenę i ustawię przekierowanie to czy dalej powinienem katalogować starą domenę ? czy mogę zacząć katalogować nową domenę ?

      Odpisz
  4. Jeżeli nie jest to konieczne to lepiej nie robić przekierować, bo z tego co czytałem to pod kątem robota Google już tak dobrze nie działają jak kiedyś, a czasem podobno wcale nie działają.

    Odpisz
    • A ja nie użyłem .htaccess, tylko za pomocą Notepad++ za jednym zamachem zamieniłem wszystkie odnośniki do index.html na odnośniki do katalogu głównego. Na szczęście nic z zewnątrz nie było linkowane do index.html, więc wystarczył taki zabieg.

      Odpisz
      • W takim razie zrobiłeś sobie kuku. Jeśli jakieś linki prowadziły do starej struktury strony, napotkają one komunikat 404. Spowoduje to brak przepływu mocy dalej. Przekierowanie 301 tą moc przekierowuje.

        Mat oficjalnie potwierdza i ciągle o tym mówi w kontekście nieindeksowania kopii treści itd.

        Także Twoje dywagacje są błędne.

        Odpisz
  5. Przydatny wpis.

    Ciężko mi zapamiętać regułki htaccess, na szczęście jest net.
    Dzięki, wykorzystałem to u siebie na blogu. Bez WWW 😀

    pozdrawiam

    Odpisz
  6. Witam Ponownie, nikt nie wie jak zrobić 301 z konkretnej podstrony na inną. Bardzo proszę po pomoc, bo dalej nie znalazłem rozwiązania.

    Pozdrawiam

    Odpisz
  7. Witam,
    a jak przekierować z jednej podstrony na inną. Chciałbym podstronę oswietlenieled.info/pl-kuchnia-strona-16.html przekierować na inną podstronę to jak to wpisać w htaccess.
    Wszędzie w sieci są podane reguły jak zrobić 301 na nową domenę, z www na bez www i odwrotnie itp., ale na przekierowanie samych podstron już nie.

    Odpisz
  8. Witam. W „Pliki „index” w adresach URL” jest:

    Rewriterule ^(.*)\/index\.htm$ $1 [R=301,L]
    Rewriterule ^index\.htm$ / [R=301,L]

    ,a powinno być chyba ? :

    Rewriterule ^(.*)\/index\.htm$ /$1/ [R=301,L]
    Rewriterule ^index\.htm$ / [R=301,L]

    Odpisz
  9. Mam problem, chciałbym przekierować plik:
    gigapano.net/gigapano/galeria.html na gigapano.net/katalog_pl.html . Próbowałem plikiem .htaccess na różne sposoby, kilkanaście różnych kombinacji, ale nie działa. Czy ktoś wie jak to zrobić? Plik jest odczytywany, bo na ekranie dzieją się różne cuda, ale przekierowania nie ma.

    Odpisz
  10. Witam

    potrzebuje zrobić przekierowanie z

    www. domen1.pl/strona1.html

    na 

    www. domena2.pl

    Odpisz
  11. A ja mam jeszcze male pytanko:

    Zrobilem tak jak w artykule i wszystko smiga tak jak trzeba czyli :

    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^(www\.)?portraityourloveone.co.uk(.*) [NC]
    RewriteRule ^(.*)$ http://www.portraityourlovedone.co.uk/$1 [R=301,L]

    a jak zrobic zeby oprocz przekierowan z domena1 i www. domena1 na www. domena2
    zrobic jednoczesnie przekierowanie z domena2 na www. domena2?
    Pozdrawiam

    Bartek

    Odpisz
  12. Cześć.
    Mam stronę z rozszerzeniem biz i ostatnio zdobyłem tą samą domenę z rozszerzeniem pl.
    Waszym zdaniem jak lepiej jest zrobić:
    1) skopiować zawartość z biz do pl (kasując zawartość na biz) i na biz dać tylko przekierowanie do pl
    2) zostawić i rozwijać zawartość biz a na pl zrobić przekierowanie 301 do biz.

    Paweł Ślubowski

    Odpisz
  13. Właśnie staram się ograniczyć ilość odwiedzin googlebota na mojej stronie i usunąłem index.html z adresu za pomocą trzeciej wskazówki. Ciekawe jak się sprawdzi w tym kontekście.

    Odpisz
  14. Czy może mi ktoś wyjaśnić dlaczego u mnie to nie działa?
    Stworzyłam plik .htaccess, wstawiłam formułkę ze zmianą adresu na nową domenę i w tym momencie oba adresy stary i nowy się nie otwierają.
    Niby przekierowuje poprawnie ale na adres
    http://www.nowadomena.pl/index.htm, który istnieje ale się nie wyświetla.
    Co robić?

    Odpisz
    • ja też próbuje dodać przekierowanie 301 na mojej domenie manipulatio.com aby nie było tego index.php i jakoś nie działa

      Odpisz
      • Może po prostu serwer z którego korzystasz nie obsługuje przekierowania 301… 🙂

        Odpisz
  15. Bardzo ciekawa i interesująca dyskusja. Mam pytanie – posiadam stronę zrobioną w xhtml/css, będę ją teraz przenosił na php (joomla). Czy mogę zrobić przekierowania z podstron starej wersji do podstron nowej wersji? Jeśli jak to jak?
    Pozdrawiam i życzę miłego weekendu

    Odpisz
  16. Świetny tekst, dzięki.
    Przy okazji, mam pytanie. Mam obecnie serwis np. pod domena costam.pl, ale chciałbym go przenieść np. na blog.costam.pl. Mógłbym więc skorzystać z przekierowania 301, żeby nie tracić dotychczasowych efektów pozycjonowania. Problem polega na tym, że chciałby na domenie costam.pl postawić inny serwis.
    Da się to jakoś sensownie rozwiązać?

    Odpisz
  17. W sieci jest sporo generatorów, które ułatwiają tworzenie poprawnych plików .htaccess.
    Zapraszam na mój: http://htaccess.lapti.pl
    Pozdrawiam
    Rafał 😉

    Odpisz
    • Moje wyrazy uznania 🙂 Myślę, że to narzędzie przyda się wielu osobom. Sam pewnie będę z niego korzystać 🙂

      Odpisz
    • Dziękuję za link, mam nadzieję, że strona ta będzie cały czas dostępna 😀

      Odpisz
    • Lapti, Twój gniot jakim jest generator pliku .htaccess nie działa, popraw albo usuń

      Odpisz
  18. Witam,
    Mam pewien problem:
    Moja pierwsza strona, a właściwie jej podstrony były z rozszerzeniem na końcu.php
    W obecnej na końcu jest .html
    Ilość podstron i ich oznaczenia się nie zmieniły ( page1 ….page8 )
    Jaki kod muszę wpisać w pliku.htaccess ,
    aby zamiast ” BŁĘDU SERWERA 404 ” było przekierowanie na nowe podstrony ?
    Za pomoc bardzo dziękuję.

    Odpisz
    • Kiedyś miałem pliki w .php i chciałem zrobić przekierowanie na nieistniejące wersje .htm, ale nigdy mi się to nie udało. A dużo masz tych podstron? Można by wtedy zrobić ręcznie przekierowania do każdej podstrony. Gorzej jak masz ich kilkaset 😉

      Odpisz
      • Witaj,
        Podstron jest tylko 8. Próbowałem już na kilka sposobów, ale bez sukcesu.

        Odpisz
        • Ostatnio u siebie robiłem dla kilku podstron przekierowania w następujący sposób. Tworzysz na pliki ze starymi nazwami i wrzucasz je na serwer w starym miejscu, czyli przykładowo będzie to twojadomena.pl/strona1.php i tworzysz każdą starą podstronę. Z tym, że w środku każdej będziesz miał przekierowanie w php, czyli dla powyższej strony w jej treści dasz tylko:

          <?php
          // Permanent redirection
          header("HTTP/1.1 301 Moved Permanently");
          header("Location: http://twojadomena.pl/strona1.html");
           exit();
          ?>

          Teraz wchodząc na adres twojadomena.pl/strona1.php będziesz przekierowany na stronę twojadomena.pl/strona1.html

          Odpisz
          • Witaj,
            Teraz wszystko działa tak jak chciałem
            wielkie dzięki Paweł. Masz u mnie wielkie piwo. Jeśli będziesz kiedyś w Lublinie to zapraszam do mojego klubu. Na pewno się zrewanżuję.

    • Trafiłem tu przypadkowo, bo poszukiwałem podobnego rozwiązania, jako że znalazłem już to podam, może się komuś przyda.

      RewriteEngine On
      RewriteBase /
      RewriteRule (.*)\.php$ $1\.html [R=301,L]

      Odpisz
  19. Tak samo ważne jak .htaccess jest używanie rel-canonical dla danego wpisu, ale pod dwoma różnymi linkami (np. gdy dany wpis znajduje się w dwóch kategoriach). Pozdrawiam

    Odpisz
    • Tak, to jest też o tyle ważne, że dla Google to jest informacja który adres jest pierwotnym źródłem danego tekstu.

      Odpisz
  20. Co do plików index przydatne jest też umieszczenie w różnych folderach pustego pliku np index.html. Pozwala to uniknąć odnajdowania zasobów serwisu poprzez zgadywanie nazw plików.Np ktoś wpisze www. twojadomena.pl/mojefoto/ i tu wylistują mu się np wszystkie zdjęcia /popatrzy lub skopiuje…/.Umieszczając w folderze pusty plik „index” zobaczy tylko puste okno.

    Odpisz
    • Faktycznie bardzo praktyczna wskazówka 🙂 Nawet o tym nie pomyślałem. Z tego co wiem to .htaccess ma też chyba możliwość blokowania dostępu do określonych miejsc w naszej domenie. Jednak nigdy tego nie praktykowałem. A Twoja wskazówka Waldku jest genialna w swej prostocie 🙂

      Odpisz
  21. Witam,
    chciałbym przebudować kategorie produktów, tak by stare linki nadal działały i się pozycjonowały. Rozumiem, ze można w tym pliku przekierować część produktów przez jedną kategorię, a część przez inną? Czy ktoś mógłby podać jak?

    Odpisz
    • Witaj,
      Rozumiem, że chcesz zmienić kategorie i część podstron ze starych kategorii przekierować na ich wersje w nowych kategoriach. Jeśli chodzi o coś innego to mnie popraw. Niemniej jednak w takim wypadku, o którym myślę można użyć dosyć uniwersalnego przekierowania, w którym przekierowujesz z dowolnej strony w Twojej domenie na dowolną stronę (również zewnętrzną), przykładowo:

      Redirect 301 /stara-kategoria/produkt-1.htm http://twoja-domena.pl/nowa-kategoria/produkt-1.htm

      Pierwszy fragment (po liczbie 301) to stary adres podstrony. Druga część to nowy adres podstrony – tu dajemy bezwzględny adres URL (z http).

      Odpisz
      • Witam Paweł,
        Proszę doinformuj mnie gdzie należy wstawić tą formułkę: „Redirect 301 /stara-kategoria/produkt-1.htm http://twoja-domena.pl/nowa-kategoria/produkt-1.htm„. Czy idzie ona również do pliku .htaccess w katalogu głównym domeny?

        Kiedyś dokonałam „przekierowania permanentnego 301” (czyli 301 redirect) ze starych stron do analogicznych, nowych stron (nowa strona internetowa została przebudowana kompletnie, łącznie z nazwą poszczególnych podstron). Skorzystałam wówczas z innego rodzaju 301 redirect. Otóż w starych plikach .php poszczególnych podstron wpisałam formułki 301 redirect przekierowujące do (najbardziej analogicznych) nowych stron (wykasowałam stary content html, czyli zawartość stron, zostawiając jedynie formułki).
        W tym przypadku niestety trzeba zachować stary hosting strony, i płacić za hosting starej i nowej strony (stara: locate-sales.com, nowa: hal-locate.eu). O tej metodzie, którą prezentujesz również wiedziałam lecz nie wiedziałam wówczas jak ją dokładnie zastosować. Czytałam również, że metodę .htaccess można stosować do stron nie we wszystkich formatach, np. asp, bądź php. (Widzisz to było około roku temu więc dokładnie nie pamiętam w których przypadkach jaka metoda 301 redirect powinna być stosowana).
        Jeśli mógłbyś odpowiedzieć mi na pytanie wyrażone w pierwszym zdaniu mojej odpowiedzi, byłabym bardzo wdzięczna.
        Pozdrawiam,
        Joasia

        Odpisz
      • tak dokładnie, stare linki ze starymi kategoriami chciałbym, żeby działały.. czyli wypisuje wszystkie stare linki i ich nowe odpowiedniki…
        teraz widzę, że mam brzydkie adresy w stylu:
        http://www.niedopalek.pl/pl/p/M401-Menthol-MILD/76
        nie wiem po co to 'pl’ i 'p’ i jeszcze na końcu numer produktu… ale to generuje serwer, chyba nie można używając tego pliku ustawić aby teraz ten produkt miał adres http://www.niedopalek.pl/M401-Menthol-MILD
        ?
        Dzięki
        Wojtek

        Odpisz
        • Aha tu chyba chodzi bardziej o to, aby zrobić przyjazne linki z tych starych, jeśli dobrze rozumiem. W tym celu to trzeba wykorzystać mod rewrite z odpowiednim kodem sprawiającym, że stary adres jest widoczny pod nowym – bardziej przyjaznym. Kod w .htaccesie będzie różny w zależności od konstrukcji Twoich adresów URL oraz od efektu jakiego oczekujesz. Niestety to już jest wyższa jazda dla mnie i tego po prostu nie ogarniam. Najczęściej w różnych systemach CMS są wtyczki, dzięki którym można bez problemu zrobić przyjazne adresy. Musiałbyś trochę poczytać o komendach w .htaccesie i jak się robi przyjazne adresy.

          Odpisz
  22. Dzięki wielkie za bardzo przydatny artykuł. Uporządkował mi informacje o tym przekierowaniu i przykłady wpisów do .htaccess się przydadzą zapewne nie tylko dzisiaj, ale i w przyszłości.

    Odpisz
  23. Bardzo dobry wpis.
    Dodam od siebie, że dobrą strategią jest zbudowanie kilku niszowych stron o podobnej tematyce, które są pozycjonowane na inne słowa kluczowe, a po osiągnięciu dobrych rezultatów (dobre miejsce w SERP, dużo linków) można zastosować przekierowanie 301 na jedną główną domenę.
    Co do stron z www to ja miałem wpadkę z moją jedną stroną bo zacząłem ją pozycjonować z URL www, no i teraz muszę być konsekwentny.

    Odpisz
    • Bartku,
      Z tymi kilkoma domenami masz rację – stary pozycjonerski myk.
      A jeśli chodzi o www, to nie zawsze lepiej jest bez www. Nie wiem jak jest w Twoim przypadku (jaka to domena), ale czasami lepiej mieć jednak www (np. przy bardzo krótkiej domenie i/lub niewyedukowanej „internetowo” grupie docelowej).

      Odpisz
      • A czy można zrobić przekierowania z kilku stron na jedną?
        Czy zawartość tych stron musi być podobna do tej nowej strony, czy w skrajnym przypadku może to być zupełnie inny tekst, a nawet zupełnie inny temat?
        Jestem nowicjuszem w sprawach pozycjonowania i i nowym członkiem e-biznesy ale zdążyłem już poczytać trochę wpisów na temat przekierowań z www na bez www i i podobnie z html. Jestem obecny na blogowaniu – blox.pl i zauważyłem, że tam chyba wszystkie przekierowania tzn. www i html są już ustawione. Przyznam się próbowałem pozbyć się końcówki html w CSS ale zauważyłem, że jest to niemożliwe.
        Czy mam rację?

        Odpisz

TrackbackiPingbacki

  1. Przekierowanie (redirect) | Notatnik Internetowy - [...] Szersze wyjaśnienie na temat: przekierowanie 301 znajdziemy na blogu ebiznesy.pl [...]

Skomentuj merlin5000 Anuluj pisanie odpowiedzi

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

Uwaga: zasady rozsądnego komentowania.
1. Daruj sobie komentarze typu "Dobry wpis", "Gratulacje! link.pl" itp.
2. Komentuj tak, jakbyś chciał, aby u Ciebie komentowano.
3. Podawaj w formularzu Twój prawdziwy adres e-mail (jest bezpieczny!)
4. Link do Twojej strony WWW (w podpisie) pokaże się dopiero wtedy, gdy napiszesz 5-ty komentarz na ebiznesy.pl. Pamiętaj jednak, aby zawsze podawać ten sam adres mailowy (komentarze zliczane są właśnie po mailu).