Зеркала, хосты и прочая xyzня

Доброе утро, мои дорогие два с половиной читателя!
В эту дождливую субботу я задался вопросом – а чо? Чо не продолжаю писать про чек-лист?

Исправляюсь. Сегодня в рубрике “Очумелые ручки” потрещим за то, как может быть представлен сайт в результатах поиска.

Сайт может быть доступен по (технически) разным адресам:
site.ru
www.site.ru

Как известно, http:// – это протокол передачи данных; www – это т.н. домен верхнего уровня, аббревиатура, используемая и учитываемая при вводе адреса в адресную строку; site – это уникальное наименование домена, зарегистрированное на срок от года до…; ну и .ru или там .com – это доменная зона. Доменных зон раньше было мало (edu – для образовательных сайтов, gov – для правительственных структур, org – для всяких организаций, com – для коммерческих сайтов; и региональные зоны, типа SU (Советский Союз), RU и т.п. Сейчас зон до ядрёны фени, типа .xxx, .fm, .center и т.п.
Это что касается доменов. Есть же ещё страницы сайтов, которые также могут быть представлены по-разному.

Вот например главная страница сайта, созданного на любой CMS:
/index.php
/index.php/
/index
/index/
/

Тоже самое и с внутренними страницами.
Присовокупим сюда несколько разных вариантов доступности домена, и получаем кучу технически разных адресов одной и той же страницы сайта. Это, в принципе, уже не страшно – поисковики умнеют и научились не индексировать одну и ту же страницу по несколько раз, но в любом случае нужно представлять на сайте только один возможный вариант адреса страницы.

Как привести всё к единому знаменателю?
За управление зеркалами сайта отвечает файл robots.txt, лежащий в корневой директории сайта. Это первый файл, который запрашивает любой нормальный поисковый робот, и в нём следует указать конструкции, понятные этому роботу. Конструкции типичны, давайте их рассмотрим.

User-agent: Yandex
Disallow: /home
Disallow: /index.php/component/content/frontpage
Disallow: /component/content/frontpage
Sitemap: http://www.site.ru.ru/sitemap.xml
HOST: www.site.ru

User-agent: GoogleBot
Disallow:
Sitemap: http://www.site.ru/sitemap.xml

User-agent: *
Allow: /

User-agent – указание поисковика. Первый Яндекс (он так и представляется, когда заходит к вам в гости), второй ГуглБот от Гугля, а третий – указание на всех остальных роботов (*).
Disallow – запрет индексации определённых страниц, разделов или неопределённых страниц (через спецсимволы).
Allow – соответственно, разрешение индексации. “Allow: /” – разрешает индексировать всё на сайте.
Если в Disallow пусто – значит, можно индексировать всё; с Allow, соответственно, наоборот.

Sitemap – указание пути до карты сайта в формате XML.
HOST (читается только Яндексом) – как раз указание основного зеркала сайта. Т.е. у вас может быть несколько копий сайта под разными адресами, но основным (участвующем в поиске) будет тот, который прописан в директиве HOST.

Для robots.txt есть ещё много полезных директив, в Справке Яндекса всё толково и подробно написано.

В примере выше для Яндекса закрыты от индексации несколько адресов, ведущих на один и тот же контент – главную страницу сайта. Это особенность CMS Joomla, отдавать один контент под кучей разных адресов. Конечно, если на сайте нет ссылок с этими адресами, то и адреса не будут проиндексированы; но лучше перебздеть. Вдруг чо?

Просто несколько дублей одного и того же контента внутри сайта – это повод если не зафильтровать сайт, то исключить эти адреса и контент из поисковой выдачи. С учётом того, что это главная страница (и несёт на себе ВЧ запросы) – её исчезновение из выдачи крайне нежелательно так-то.

Это что касается зеркал сайта. С неосновными хостами (с www и без) нужно поработать на уровне сервера.

При запросе любых URL, содержащих неосновные хосты (например, http://site.ru) необходимо, чтобы сервер отдавал ответ HTTP/1.1 301 Moved Permanently.
При этом в поле Location должен быть прописан URL, содержащий основной хост ресурса (http://www.site.ru).

Иными словами, необходимо сделать полный постраничный редирект с ответом сервера HTTP/1.1 301 Moved Permanently с неосновных зеркал на основное зеркало. Файл robots.txt под редирект попадать не должен. Он должен быть доступен для обращения к нему роботов поисковой системы и отдавать HTTP/1.1 200 ОК при запросе.

Для сервера Apache это можно реализовать при помощи модуля Mod_rewrite. Для этого необходимо создать следующие правила переадресации в конфигурационном файле сервера Apache .htaccess, расположенного в корневой директории сервера:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^site\.ru$ [NC]
RewriteCond %{REQUEST_URI} !^/robots\.txt$
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]

Ссылки на всех страницах сайта должны быть одного вида.
При запросе ссылок вида http://www.site.ru/index.php и т.п. сервер должен отдавать HTTP/1.1 301 Moved Permanently. При этом в поле Location должен быть прописан URL, содержащий основной хост ресурса, т.е. http://www.site.ru/

Для этого необходимо в самый верх индексного файла вставить следующий код:

Важно: данные правила переадресации даны в качестве примера, для некоторых платформ возможно потребуется доработка данных правил.

И не забудьте переписать меню сайта, чтобы ссылки были одного вида.
И всё будет окай. Через пару-тройку недель сайт полностью переиндексируется, исчезнут возможные дубли адресов; через пару месяцев “зеркальщик” Яндекса склеит/расклеит зеркала сайта. Ну а если robots.txt и .htaccess закладывать на этапе разработки сайта – то и ждать не придётся, с первой индексацией у сайта в выдаче будет полный порядок.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *