• Оставить заявку на консультацию по сайту

Гид по настройке robots.txt для сайта

robots.txt  

Robots.txt представляет собой текстовый файл, расположенный в корне сайта. Прописанные в нем настройки или директивы указывают поисковым роботам от Яндекса, Гугл и т.д., какие страницы следует обходить, а какие – нет.

Единого официального стандарта правильной настройки robots.txt нет. Популярный сайт robotstxt.org описывает стандарты от 1994 года и не содержит современных директив.

В идеале, если все страницы на сайте открыты для пользователей, то robots.txt не нужен. Однако по факту популярные и самописные CMS вынуждают прописывать инструкции для обхода сайта, чтобы дубли и технические страницы не попали в основной индекс.

Первоначальная настройка Robots.txt

Создавать файл robots.txt нужно в корневой директории сайта. Лежать он должен именно там. Никаких подпапок.

http://site.ru/robots.txt

Первой строкой указывается юзер-агент. По спецификации HTTP User-agent инициирует запрос, а сервер его обрабатывает. В роли юзер-агента может выступать поисковый робот, веб-браузер, утилита командной строки и т.д., поскольку все они запрашивают веб-страницу.

Директива User-agent указывает, для каких роботов будут действовать прописанные инструкции. Спецсимвол звездочка (*) задает правила сразу для всех роботов (о ее назначении мы поговорим позже).

User-agent: *
User-agent: YandexBot
User-agent: Googlebot

Директива «Disallow»

Директива «disallow» закрывает от индексации страницы, разделы или весь сайт целиком. В файле должна присутствовать хотя бы одна директива для корректной обработки robots.txt поисковой системой.

User-agent: *
Disallow: /nenuzhnaya-stranica

Директива «/nenuzhnaya-stranica» блокирует все страницы, которые начинаются с этого урла:

http://site.ru/nenuzhnaya-stranica
http://site.ru/nenuzhnaya-stranica?nuzhnost=0
http://site.ru/nenuzhnaya-stranica/pofigu
http://site.ru/nenuzhnaya-stranica-i-kak-ee-zapretit-indeksirovat

Однако данное правило не распространится на подкатегорию уровнем выше:

http://site.ru/subdir/nenuzhaya-stranica
Причина проста: директива «disallow» сравнивает строки в url, если урл страницы и директивы совпадают, то путь блокируется с указанного слеша.

Директива «Allow»

«Allow» не входит в официальный стандарт, однако поддерживается большинством поисковых систем. Директива создает исключения для правил «disallow». Ее используют в тех случаях, когда хотят заблокировать весь раздел, оставив в нем только 1 страницу.

User-agent: *
Allow: /nichego-poleznogo-tut-net/krome-etoi-stranici
Disallow: /nichego-poleznogo-tut-net/

В итоге заблокируются:

http://site.ru/nichego-poleznogo-tut-net/
http://site.ru/nichego-poleznogo-tut-net/kakaya-to-stranica
http://site.ru/nichego-poleznogo-tut-net/eshe-kakaya-to-stranica
http://site.ru/nichego-poleznogo-tut-net/?x=y

Но будут просканированы:

http://site.ru/nichego-poleznogo-tut-net/krome-etoi-stranici
http://site.ru/nichego-poleznogo-tut-net/krome-etoi-stranici-potomu-chto-ya-tak-skazal
http://site.ru/nichego-poleznogo-tut-net/krome-etoi-stranici/eto-realnaya-directoria
http://site.ru/nichego-poleznogo-tut-net/krome-etoi-stranici?a=b&c=d
Принцип работы директивы «allow» аналогичен «disallow»: строка команды сравнивается с началом пути url, и при полном совпадении страница с последующей вложенностью будет просканирована.

Спецсимволы

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

Звездочка (*)

Символ «*» используется в случае, когда нужно заблокировать страницы, в которых часть пути или переменная неизвестны.

Disallow: /users/*/settings

Данный спецсимвол означает и заменяет собой любую последовательность символов. В результате такой директивы заблокируются следующие пути:

http://site.ru/users/petya/settings
http://site.ru/users/vanya/settings
http://site.ru/users/sasha/settings
http://site.ru/users/dima/settings

Доллар («$»)

Спецсимвол «$» обозначает конец строки.

Disallow: /nenuzhnaya-stranica$

Данная директива заблокирует только урл «/nenuzhnaya-stranica». Все, что идет дальше, будет просканировано:

http://site.ru/nenuzhnaya-stranica-i-kak-perestat-ix-sozdavat
http://site.ru/nenuzhnaya-stranica/
http://site.ru/nenuzhnaya-stranica?a=b

Как сразу заблокировать и разрешить все

Весь сайт блокируется всего 2 строчками:

User-agent: *
Disallow: /

Если запрещать нечего, а в логах сервера не хочется видеть ошибки в запросах получения robots.txt, используйте пустую директиву «disallow», либо просто не заполняйте сам файл.

User-agent: *
Disallow:

Как указать карту сайта и зеркало через Sitemap и Host

Директива Sitemap указывает точное расположение xml-карты сайта.

Sitemap: http://site.ru/sitemap.xml

Директива Host указывает основное зеркало сайта (с www или без www), но распознается только роботом Яндекса.

User-agent: Yandex
Host: site.ru

Основные ошибки составления robots.txt

Большинство ошибок настройки robots.txt связаны со скрытием определенных директорий, случайной блокировкой страниц, отсутствием файла на поддоменах, блокировкой сторонних краулеров и т.д.

Блокировка сторонних краулеров

На некоторых сайтах можно встретить забавные директивы для сторонних роботов:

User-agent: DataCha0s/2.0
Disallow: /
User-agent: ExtractorPro
Disallow: /
User-agent: EmailSiphon
Disallow: /
User-agent: EmailWolf 1.00
Disallow: /

Напоминает анекдот про ежика, который оставил записку под елкой: «Ежик водку не брал».
Директивы в robots.txt исполняются в добровольно-принудительном порядке только «вежливыми» поисковыми роботами. Сторонних роботов лучше блокировать по user-agent или ip.

Скрытие директорий

Не менее забавным выглядят попытки скрытия от пользователей секретных файлов и директорий:

User-agent: *
Disallow: /sovershenno-secretno/
Disallow: /lichnie-photo.jpg
Disallow: /vse-paroli-v-odnom-faile.csv

Это как хранить пароли на магнитной доске во время коллективного фото. Хотите скрыть страницу – поставьте на нее пароль.

Случайная блокировка нужных страниц

Страницу входа в административную часть сайта обычно закрывают от индексации. Если мы будем блокировать урл «http://site.ru/admin/» следующей директивой:

Disallow: /admin

То распрощаемся со страницей, которая начинается с аналогичных символов — «http://site.ru/administrativnie-narushenia.html». Чтобы этого избежать, либо рвите строку через спецсимвол «$», либо добавляйте слеш в конце.

Disallow: /admin$
Disallow: /admin/

Блокировка поддоменов

Если на сайте несколько поддоменов (msk.site.ru, spb.site.ru и т.д.), то работать с ними в robots.txt основного домена будет ошибкой. Поскольку поддомен расценивается поисковой системой как отдельный сайт, то и файлы robots.txt нужно располагать в корне поддоменов согласно их количеству.

http://spb.site.ru/robots.txt
http://msk.site.ru/robots.txt

Регистрозависимость

Директивы чувствительны к регистру, поэтому путь лучше копировать прямиком из url, чем вбивать вручную.

Disallow: /pulya/
Disallow: /Pulya/
Disallow: /PULYA/

Последовательность исполнения директив по User-agent

Указанный в user-agent конкретный поисковый бот подчиняется директивам под ним до следующего упоминания user-agent. Поэтому, если вы хотите, чтобы страница была открыта только для 1 поискового робота, но закрыта для остальных, не стоит прописывать лишь 1 строку директивы:

User-agent: *
Disallow: /admin/
Disallow: /privat/
Disallow: /ne-skanirovat/
User-agent: Googlebot
Allow: /ne-skanirovat/krome-etogo

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

User-agent: *
Disallow: /admin/
Disallow: /privat/
Disallow: /ne-skanirovat/
User-agent: Googlebot
Disallow: /admin/
Disallow: /privat/
Disallow: /ne-skanirovat/
Allow: /ne-skanirovat/krome-etogo

Практики составления Robots.txt

Что приоритетнее «allow» или «disallow»?

Как вы уже знаете, директива «disallow» блокирует сразу всю директорию, а «allow» — разблокирует часть урлов, которые в нее входят. А что если URL подпадает сразу под две директивы, какую тогда выберет робот?

Поисковые роботы по-разному обработают данную инструкцию. Гугл, в частности, отдаст приоритет записи с более длинным урл. Если длина одинакова, приоритет будет за «allow».

Данная директива

User-agent: *
Allow: /plohaya-papka/horoshaya-stranica
Disallow: /plohaya-papka/

Просканирует:

http://site.ru/plohaya-papka/horoshaya-stranica
http://site.ru/plohaya-papka/horoshaya-stranica-s-trudnoi-navigaciei
http://site.ru/plohaya-papka/horoshaya-stranica?x=y

И запретит индексацию:

http://site.ru/plohaya-papka/
http://site.ru/plohaya-papka/eshe-stranica

Пример посложнее

Заблокирует ли директива ниже страницу «http://site.ru/teststranica»?

User-agent: *
Allow: /test
Disallow: /*stranica

Да, потому как путь «/test» состоит из 5 символов, а «/*stranica» — из 10.

Блокировка динамических параметров

Для блокировки динамического параметра (например, «id», если он встречается первым), необходимо указывать вопросительный знак в инструкции. Чтобы заблокировать страницы типа «http://site.ru/somepage.php?id=123», необходимо прописать:

Disallow: /*?id=

Если же «id» в урл стоит не в начале, то вместо вопросительного знака ставится амперсанд, который служит разделителем между параметрами. Таким образом урл «http://site.ru/somepage.php?a=b&id=123» блокируется следующим образом:

Disallow: /*&id=

Если же не хотите заморачиваться и искать местоположение «id», то прописывайте сразу 2 инструкции:

Disallow: /*?id=
Disallow: /*&id=

Яндекс использует свою директиву для блокировки динамических параметров. Clean-param имеет несколько отличный синтаксис – «p0[&p1&p2&..&pn] [path]». Директива будет выглядеть следующим образом:

Clean-param: id /somepage.php

Блокировка URL с небезопасными символами

Иногда на стороне сервера код шаблона может передавать в урле небезопасные символы — «http://site.ru/search?q=<% var_name %>». Если попробовать закрыть путь через директиву:

User-agent: *
Disallow: /search?q=<% var_name %>

То тестировщик Гугл покажет, что страница все еще открыта для индексации. Дело в том, что все юзер-агенты, включая поисковых роботов, автоматически кодируют небезопасные URL в символы. В роли таких символов могут выступать: знаки «больше» и «меньше», одинарные и двойные кавычки, а так же символы, не входящие в набор ASCII.

Поэтому корректнее будет заблокировать следующий автоматически генерирующийся путь:

User-agent: *
Disallow: /search?q=%3C%%20var_name%20%%3E

Как заблокировать урлы со знаком «$»

Как известно, спецсимвол «$» рвет строку. Для того, чтобы заблокировать урл «http://site.ru/store?price=$10», понадобится сноровка. Если использовать директиву:

Disallow: /*$

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

Disallow: /*$*

Обрамленный «звездочками с двух сторон, знак «доллар» теряет свое назначение. В итоге заблокируются все урлы, в которых есть знак «$».

Проверка ошибок robots.txt

Проанализировать и выявить ошибки настройки robots.txt можно в валидаторе Яндекс или Гугл. Теперь, после прочтения инструкции, вы сможете самостоятельно устранить основные проблемы. Если нет – обращайтесь за консультацией.

Итоги по содержимому robots.txt

Файл robots.txt должен быть расположен в корне сайта, содержать user-agent и не использоваться для блокировки секретных директорий и сторонних краулеров. Поскольку поисковые роботы обрабатывают некоторые директивы по-разному, не ленитесь и обращайтесь к мануалам от Яндекса и Гугла.

author

Андрей Кусков

SEO

Поисковый маркетинг и веб-аналитика.

Комментарии (0)

    © Web-Ux. Все права защищены. Копирование информации с сайта возможно только с указанием ссылки на первоисточник. Политика конфиденциальности.