SEO

Автор: Евгений Рыжков Дата публикации: 21.07.2011

Склеиваем зеркала

Для пользователя сайт http://www.site-name.com/ и http://site-name.com/ — это один и то же сайт, для поисковых роботов — два разных. Что не очень хорошо. Для решения этой проблемы производим «склеивание» сайта, пописывая правила в .htaccess для 301-й редиректа с адреса с www на без www:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} ^www.site-name.com [NC]
RewriteRule (.*) http://site-name.com/$1 [R=301,L]
</IfModule>

Заметка

В последующих примерах кода будут упущены строки

<IfModule mod_rewrite.c>
RewriteEngine On
...
</IfModule>

Все правила должны находится внутри <IfModule mod_rewrite.c>...</IfModule> и быть после RewriteEngine On.

Можно делать так же наоборот — переадресовывать на домен с www:

RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www.site-name.com [NC]
RewriteRule (.*) http://www.site-name.com/$1 [R=301,L]

Переадресация с файла index

Ситуация аналогичная с наличием www, только теперь это касается главной страницы сайта: http://site-name.com/ и http://site-name.com/index.php — одна и та же страница. Делаем редирект с index.php на корневой каталог:

RewriteRule ^index.php$ http://www.site-name.com/$1 [R=301,L]

Данный вариант заработал у меня как-то кривовато. Вот этот показал себя лучше:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/
RewriteRule ^index.php$ http://site-name.com/ [R=301,L] 

Аналогично можно избавится от index.php для любой директории:

RewriteBase /directory-name/
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /directory-name/index.php HTTP/
RewriteRule ^index.php$ http://site-name.com/directory-name/ [R=301,L] 

Переадресация со старых и битых ссылок

Поисковики не очень любят, когда на сайте присутствуют битые ссылки. Чтобы направить роботов по верному пути используем тот же 301-й редирект (перемещен навсегда):

Redirect 301 /old-url/file.html http://site-name/new-url/file.html

Следует отметить, что старая ссылка может быть указана с относительным адресом, новая должна иметь полный.

Удаляем категорию из url

Многие CMS имеют древовидную организацию файлов: создаем категорию, в которой подкатегорию, в которой потом конечный документ. В итоге мы имеем довольно длинные URL, например, http://site-name.com/category/subcategory/file-name.html. Длинный URL — это не всегда удобно и несколько страдает SEO. Сокращаем URL, «выбрасывая» категории из URL:

RewriteRule ^category/subcategory/(.+)$ http://site-name.com/ [R=301,L]

Данный прием нужно применять обдуманно, иначе может пострадать юзабилити.

Страницы с ошибками

Если пользователь или робот попал на несуществующую страницу, или пользователь не прошел аутентификацию, или произошла серверная ошибка — грамотным решением будет перенаправить посетителя на страницу, с описанием ошибки:

  • 403 — пользователь не прошел аутентификацию (доступ запрещен);
  • 404 — запрашиваемый документ (файл, директория) не найден;
  • 500 — внутренняя ошибка сервера (причины могут быть разными).
ErrorDocument 403 /path-to/403.html
ErrorDocument 404 /path-to/404.html
ErrorDocument 500 /path-to/500.html

По теме