Всем добра! Возможно, сегодня я не скажу ничего нового, и вся изложенная ниже информация находится в свободном доступе в Помощи Яндекса, но, как показывает практика, очень мало людей ею пользуется, да и вообще задумывается о её существовании. Поэтому, дабы развеять сумрак над тем, что же все-таки должно быть написано в robots.txt, я приведу здесь материалы из Помощи Яндекса со своими личными комментариями.
Robots.txt – файл предназначенный исключительно для поисковых машин. Исторически сложилось, что в рунете на данный момент существуют лишь два основных поисковика: Яндекс и Гугл, синтаксис написания robots.txt для них несколько различен, но сегодня я затрону только сторону Яндекса. Забегая немного вперед, скажу, что писать файл только лишь с директивой User-agent: * (правила для всех роботов) как бы сразу для Гугла и Яндекса – в корне не верно. В принципе, сайт может жить и вовсе без файла robots.txt, вот только в выдаче он себя чувствовать будет ох как неуверенно.
На чем же основана работа файла robots.txt и для чего он нужен?
Поисковая индексация происходит в два этапа (далее говорим исключительно о Яндексе): сначала на сайт приходит «быстрый» робот и смотрит, что же на нем изменилось с его последнего визита. Далее он планирует список и передает его основному индексирующему роботу, который, придя ночью, и занесёт новые статьи в базу Яндекса. Перед началом своей работы он запрашивает файл robots.txt и, если таковой не находится, либо он не текстовый, или сервер возвращает статус отличный от 200 ОК, то робот думает, что ему можно смотреть абсолютно все! А хотим ли мы ему все показать? Обшарпанные задние стены принято прятать за красивым передним фасадом, а забранный роботом «мусор» отнюдь не упрочит наших позиций. Что же мы отнесем к мусору?
Во-первых: все внутренняя структура движка сайта – это то, что Яндексу не нужно, а файлов много и пока робот их будет перебирать на наличие зерна истины, доберётся он до значимых статей ох как не скоро.
Во-вторых: страницы с дублирующей информацией, к примеру – версии для печати. Робот забрал одну, на вторую повесил ярлык неуникальной. Общее впечатление о сайте печально.
В-третьих: результаты поиска. Если вы реализовали у себя такой функционал – немедленно закрывайте в robots.txt, поисковики очень не любят, когда кто-то посягает на их хлеб!
Далее: все страницы не несущие важной информации. Например – демо материалы. В идеале у вас должно остаться минимальное количество страниц – только уникальная информация, которую вы хотите увидеть в дальнейшем в выдаче.
Поисковые роботы Яндекса
Директиву User-agent я упоминал выше. Её назначение – определить перечень правил для конкретного робота, к слову, только у Яндекса их более десятка: YandexBot, YandexMedia, YandexImages, YandexCatalog, YaDirectFetcher, YandexBlogs.… По синтаксису можно написать свод правил для каждого робота в отдельности, но это тонкая настройка и стезя истинных гуру оптимизации. Мы же с вами можем ограничиться просто - User-agent: Yandex.
Как это работает:
User-agent: YandexBot # данный свод правил использует только основной индексирующий робот
Disallow: /*id=17
User-agent: Yandex
Disallow: /*id=21 # будет использована всеми роботами Яндекса, но основной индексирующий не обратит на неё никакого внимания (т.е. /*id=21 – видимая для него директория, также как и /*id=17 для всех остальных)
User-agent: * # вообще не будет использована роботами Яндекса
Disallow: /admin
Разрешить или запретить?
Когда мы запрещаем что-то для индексации, то пользуемся директивой Disallow: /путь. Здесь есть одна очень серьёзная заковырка:
User-agent: Yandex
Disallow: /
Запретит индексацию всего сайта Яндексом. Поэтому будьте очень внимательны! К слову, наличие такой строчки в robots.txt может привести к мгновенному исчезновению сайта из выдачи. Вот вам простая ситуация: вы владелец сайта, вести который вы поручаете администратору. По истечении некоторого времени вы расходитесь во взглядах и увольняете администратора, а через пару дней с ужасом осознаёте, что сайт просто испарился из выдачи! А дело все просто: админ, будучи зол на вас, заменяет всё в robots.txt одной выше представленной строчкой и пишет в поддержку Яндекса письмо с просьбой удалить сайт из выдачи на основании анализа robots.txt. На подобные письма Яндекс реагирует мгновенно, а восстановить потерянные позиции потом совсем не просто, так что делайте выводы!
По стандарту, директивы User-agent между собой следует отделять пустой строкой. Символ # используется для комментариев и текст после него и до следующего перевода строки учитываться не будет. При помощи директивы Allow мы явным образом указываем разделы, нуждающиеся в индексации:
User-agent: Yandex
Allow: /cat
Disallow: /
# запрещает индексировать всё, кроме страниц, начинающихся с "/cat"
Если оставить соответствующие директивы пустыми, то робот их учтет следующим образом:
User-agent: Yandex
Disallow: # то же, что и Allow: /
User-agent: Yandex
Allow: # то же, что и Disallow: /
Для указания регулярных выражений в robots.txt используются два символа: * и $. Символ * означает «любое выражение», т.е. позволяет указать группу путей:
User-agent: Yandex
Disallow: /demo/*.js # запрещает "/demo/ex.js"
# и "/demo/promo1/test.js"
Disallow: /*demo # запрещает не только "/demo",
# но и "/lesson-1/demo"
Механизм работы очень схож с тем, как мы производим поиск файла, не зная его точного имени, а лишь его часть или знаем имя, но не знаем разрешение.
По умолчанию * добавляется в конце любого пути и обозначает пустую строку:
Disallow: /bin* то же самое, что и Disallow: /bin
Чтобы избавиться от неё избавиться, используется символ $:
User-agent: Yandex
Disallow: /demo$ # запрещает "/demo",
# но не запрещает "/demo.html"
Следует помнить, что $ не отменяет явно указанную *:
User-agent: Yandex
Disallow: /demo$ # запрещает только "/demo"
Disallow: /demo*$ # так же, как "Disallow: /demo"
# запрещает и /demo.html и /demo
Директивы host и sitemap
Robots.txt – первый файл, который рассматривается роботом при посещении вашего сайта, поэтому не лишним будет указать в нем путь к карте сайта, если таковая имеется. Если же карты сайта нет, то советую не откладывать с её написанием, а лучше подключить скрипт для её генерации. Пусть даже у вас логичная и понятная структура сайта, и карта вроде бы как и не нужна – её наличие напрямую повлияет на скорость индексирование новых страниц, т.к. мы сэкономим роботу время на анализ ресурса.
User-agent: Yandex
Sitemap: http://mysite.com/sitemap.xml
Отсутствие директивы sitemap не повлечет за собой каких-либо последствий, если не учитывать фактор времени, а вот без директивы host обойтись невозможно. Ссылки на сайт могут стоять как с www так и без них, пользователям это все равно, а вот робот воспринимает www.site.ru и site.ru как два различных сайта, следовательно в выдаче появляется путаница и ссылки поставленные на адрес с www не будут учитываться для адреса без www – их эффективность упадет вдвое. А если у нас не один домен, а три-четыре и все ведут на одну и ту же страницу? Директива host нам позволяет указать главное зеркало.
User-Agent: *
Host: falbar.one # указали и все ссылки на www.falbar.one автоматически перенеслись на главное зеркало
Учитывая всю важность этой директивы, её лучше указывать самой первой в robots.txt. Если вы случайным образом укажете несколько директив host – использоваться будет только первая. При необходимости в ней можно указывать еще и порт, вот так:
User-Agent: *
Host: falbar.one:8080
Проблема загруженных серверов
Пару лет назад, когда производительные мощности серверов были не столь внушительны, могла возникать проблема задержки обработки запросов, что крайне затрудняло индексацию сайта. Для решения этой проблемы была введена директива Crawl-delay, позволяющие указать роботу временные интервалы, через которые лучше обращаться к серверу.
User-agent: Yandex
Crawl-delay: 2 # задает таймаут в 2 секунды
Ещё одна директива, она же последняя, которую могут распознать роботы Яндекса, - Clean-param. Она позволяет очистить адреса страниц от различных идентификаторов (сессий, рефереров, пользователей и т.п.). Так как самому ещё ей пользоваться не приходилось - прокомментировать не могу, а подробно она описана здесь.
Собственно, вот и все, что может находиться в файле robots.txt для Яндекса. Напоследок хотелось бы развеять один миф по поводу сокрытия «маленьких преступлений» при помощи robots.txt. Как черным по белому написано в Помощи Яндекса: некоторые роботы могут игнорировать рекомендации файла robots.txt. Так что спите спокойно, Яндекс прекрасно знает обо всем неуникальном, запрещённом и вредоносном контенте на вашем сайте, вот только санкций к вам применять не будет – вы уже сами пришли с явкой с повинной, расписав свои огрехи в robots.txt. Да и полный список всех роботов явно не обнародован, а мы знаем только о тех, о которых нам знать позволено. Как же показывает наблюдение серверных логов – роботы перелопачивают абсолютно все и по нескольку раз!