SEO i .htaccess – Przydatne tricki do optymalizacji SEO

Plik .htaccess i jego zawartość potrafią doprowadzić niejedną osobę do obłędu. Nie zmienia to jednak faktu, że dzięki .htaccess możemy zdziałać prawdziwe cuda z naszą stroną internetową. Wiedza o składni .htaccess i mod_rewrite daje duże możliwości w optymalizacji i modyfikacji naszej strony pod kątem SEO. Poniżej przedstawiam kilka najważniejszych tricków w .htaccess, które powinien znać każdy pozycjoner, programista i webmaster.
Przekierowanie 301 starych podstron na nowe
Częsty przypadek – z różnych powodów trzeba zmienić adres URL podstrony. Do tego świetnie nadaje się plik .htaccess i mod_rewrite. Oto fragment kodu dla pojedynczych przekierowań:
Redirect 301 /stara-podstrona /nowa-podstrona
Powyższy kod po prostu wykonuje przekierowanie HTTP/301 adresu starego na nowy. Aby przekierować wiele podstron jednocześnie można skorzystać z wyrażenia regularnego:
RewriteRule ^stary/(.*) nowy/$1 [L,R=301]
Taki kod przekieruje 301 wszystko z folderu stary do nowy. Oczywiście można tu zastosować o wiele bardziej wyrafinowane wyrażenie regularne, dostosowane do potrzeb.
Przekierowanie na nową domenę
Zmiana domeny na nową najczęściej ma miejsce przy zmianie nazwy firmy. Przekierowanie HTTP/301 domeny może być też świetnym sposobem na uniknięcie duplicate content gdy domena ma drugi alias. Możliwości jest wiele, ja najbardziej lubię poniższe rozwiązanie:
RewriteCond %{HTTP_HOST} !^www.staradomena.pl$ RewriteRule ^(.*)$ http://www.domena.pl/$1 [R=301,L]
Istotny jest znak wykrzyknika (!). Powyższy kod działa tak: Jeżeli host jest inny niż www.domena.pl, przekieruj 301 wszystkie podstrony na www.domena.pl/$1
Jest to więc przekierowanie wszystkich podstron 1=1 ze starej domeny na nową. Jeżeli jednak chcielibyśmy przekierować całą starą domenę na stronę główną nowej domeny (np. zmiana domeny oraz CMS jednocześnie), to kod może wyglądać następująco:
RewriteCond %{HTTP_HOST} !^www.staradomena.pl$ RewriteRule ^(.*)$ http://www.domena.pl/ [R=301,L]
Ten kod przy okazji rozwiązuje poniższy problem kanoniczności domeny, czyli www i bez www.
Przekierowanie www bez www (kanoniczność domeny)
Działanie strony zarówno pod adresem domena.pl jak i www.domena.pl jest bardzo częstym błędem optymalizacyjnym spotykanym podczas audytów SEO na wielu stronach. Łatwo to wyeliminować stosując poniższą regułę:
RewriteCond %{HTTP_HOST} ^domena.pl$ RewriteRule ^(.*)$ http://www.domena.pl/$1 [R=301,L]
Działanie jest proste: Jeżeli jest host domena.pl to przekieruj 301 na www.domena.pl. Dbając o kanoniczność domeny pamiętaj także o konsekwencji linków www/bez www w kodzie strony oraz w mapie witryny sitemap.xml
Przekierowanie w drugą stronę, czyli „z www na bez www” jest równie proste:
RewriteCond %{HTTP_HOST} ^www.domena.pl$ RewriteRule ^(.*)$ http://domena.pl/$1 [R=301,L]
Przekierowanie strony na HTTPS (SSL)
Wdrażając na stronie certyfikat SSL, nasza strona powinna działać poprzez protokół HTTPS. Oznacza to, że adres naszej strony nie będzie już http://strona.pl a https://strona.pl – w takim przypadku powinniśmy wymusić przekierowanie strony bez certyfikatu, na wersję HTTPS.
Wykorzystujemy w tym celu reguły:
RewriteCond %{HTTPS} off RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Pierwsza linia to sprawdzenie czy jesteśmy na wersji HTTPS. Jeżeli nie, druga linia wymusza przekierowanie 301 dowolnej podstrony na wersję HTTPS.
Indeks plików w folderach
Dobrym nawykiem jest taka konfiguracja serwera, aby uniemożliwiał on listowanie zawartości folderów i podgląd plików wgranych na serwer. Jeżeli jednak z jakiegoś powodu chcemy umożliwić listowanie plików w folderze na serwerze, posłuży nam do tego poniższa dyrektywa w .htaccess:
Options All +Indexes
Aby ukryć pliki w folderach należy zmienić na:
Options All -Indexes
Włączenie dyrektywy pozwala pokazać stronę „Index of /” a pod spodem lista plików. To jednak nie wszystko. Mamy dodatkowe opcje, które możemy ustawić, przykładowo:
IndexIgnore *.png *.avi IndexOptions +FancyIndexing DirectoryIndex mojplik.html
Pierwsza linijka IndexIgnore *.png *.avi sprawi, że pliki z rozszerzeniami PNG i AVI nie będą widoczne. Możemy dzięki temu ukryć część plików przed niepowołanymi osobami.
Linia IndexOptions +FancyIndexing sprawia, że lista plików zawiera ikonki i w ogóle jest ładniejsza 😉 Wygląd listy można uprościć wstawiając linię IndexOptions -FancyIndexing (z minusem).
Ostatnia linijka DirectoryIndex mojplik.html pozwoli nam wyświetlić dowolny plik, zamiast listy plików w katalogu (ot taki bajer).
Zabezpieczenie przed hotlinkowaniem
Jeżeli transfer jest problemem dla Twojego serwera i nie chcesz aby ktoś wyświetlał Twoje multimedia na swojej stronie, rozwiązaniem może być zabezpieczenie przed hotlinkowaniem w .htaccess. Częstym przypadkiem jest hotlinkowanie obrazków, dlatego też na przykładzie plików typu JPG, GIF i PNG zaprezentuje jak można ustrzec się przed hotlinkiem.
W pliku .htaccess wpisujemy:
RewriteEngine On RewriteCond %{HTTP_REFERER} !^http://(.+\.)?domena\.pl/ [NC] RewriteCond %{HTTP_REFERER} !^$ RewriteRule .*\.(jpe?g|gif|bmp|png)$ /images/nohotlink.png [L]
Zakładamy, że nasza strona ma adres strona.pl 🙂 Druga linia mówi jeśli referrer (strona, która wyświetla Twoje obrazki) jest różny od strona.pl [NC] oznacza not case sensitive – nie rozróżniaj wielkości znaków. Trzecia linia oznacza jeśli referrer nie jest pusty. Ostatnia linia mówi: przekieruj wszystkie pliki JPG, JPEG, GIF, BMP i PNG do pliku /image/nohotlink.png. W pliku nothotlink.png można umieścić jakiś znaczek, że ktoś podkrada nasz transfer 🙂 [L] oznacza, że to polecenie jest już ostatnie i informuje serwer żeby nie wykonywał kolejnych.
Oczywiście zamiast podmiany obrazka na specjalny dla hotlinkujących, można zwrócić komunikat 403 Forbidden (brak dostępu). Wystarczy wtedy zamienić ostatnią linijkę kodu powyżej na następującą:
RewriteRule .*\.(jpe?g|gif|bmp|png)$ - [F]
Istnieje także możliwość zablokowania hotlinka dla konkretnej domeny. Przykładowo:
RewriteCond %{HTTP_REFERER} ^http://(.+\.)?strona1\.com/ [NC,OR] RewriteCond %{HTTP_REFERER} ^http://(.+\.)?strona2\.com/ [NC]
W tym przypadku zablokujemy przed hotlinikowaniem domeny strona1.com i strona2.com. [OR] oznacza lub.
Dedykowane strony błędów
Możliwość ustawienia własnych stron błędów serwera to chyba najprostsza czynność w .htaccess. O ile większość CMSów potrafi samodzielnie obsłużyć błąd 404 Nie znaleziono, o tyle pozostałe popularne błędy 403, 410, 500, 503 itp często pozostają domyślne z serwera, brzydkie i odstraszające użytkowników.
Tutaj kod jest prosty i nie wymaga dodatkowego komentarza. Wystarczy ustawić wcześniej przygotowane pliki błędów jak w przykładzie poniżej:
ErrorDocument 403 /403.html ErrorDocument 500 /500.html
Blokowanie adresów IP
Blokowanie dostępu do strony potrafi być bardzo przydatne, szczególnie w sytuacjach kryzysowych. Miałem już kilka sytuacji, w których jakiś serwer „męczył” mój hosting lub spamował formularze na potęgę. W takiej sytuacji wydajność naszego serwera można ocalić blokując adres IP atakującego delikwenta:
Order Allow,Deny Allow from all Deny from 12.148.209.196 Deny from 87.207.112.205
Podałem tu dwa przykładowe IP, lista może być dłuższa.
Powyższa lista jest także niejako ściągawką najbardziej przydatnych ustawień w pliku .htaccess z punktu widzenia SEO. Pamiętaj proszę, że reguły mogą się różnić w Twoim przypadku, warto więc zrozumieć ich sens aby napisać własne.
Czy pominąłem coś istotnego? Daj proszę znać co warto dopisać do tej listy. Mam nadzieję, że będzie ona przydatna!