Зеркала, хосты и прочая 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 не будет опубликован. Обязательные поля помечены *