Оптимальный robots.txt

8497
Казалось бы, такая очевидная вещь - составить robots.txt, однако количество ошибок при этом зашкаливает:(

Попробуем разобраться с основными моментами.


1. Что такое файл robots.txt

Яндекс:
Robots.txt — текстовый файл, расположенный на сайте, который предназначен для роботов поисковых систем. В этом файле веб-мастер может указать параметры индексирования своего сайта как для всех роботов сразу, так и для каждой поисковой системы по отдельности.

Каждый по своему понимает это определение, однако важно вынести для себя всего одну мысль - это набор правил по которым поисковый робот не будет индексировать указанный раздел или страницу сайта. Не нужно писать в нем лишнего, достаточно ограничится именно тем набором правил который нужен именно для вашего сайта.

2. Указываем User-agent

С помощью директивы User-agent мы указываем к какому именно поисковому роботу мы обращаемся своим набором правил. Эта директива позволяет создать уникальные правила под робота Яндекса, Гугла и прочих поисковиков.

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

В качестве примера будем писать универсальный robots.txt для всех поисковиков.

Код PHP:
User-agent: *
Таким образом мы обратились ко всем поисковым ботам зашедшим к нам на сайт. Для обращения к конкретному боту - надо указывать его имя

Код PHP:
User-agent: Yandex
или
Код PHP:
User-agent: Googlebot
Полный список поисковых роботов можно посмотреть здесь

Для более плотной работы с конкретным поисковиком, нужно изучить полный список роботов представленных в справке поисковика. Например Яндекс дает следующий список роботов:

'YandexBot' — основной индексирующий робот;
'YandexMedia' — робот, индексирующий мультимедийные данные;
'YandexImages' — индексатор Яндекс.Картинок;
'YandexCatalog' — "простукивалка" Яндекс.Каталога;
'YandexDirect' — робот, индексирующий страницы сайтов, участвующих в Рекламной сети Яндекса;
'YandexBlogs' — робот поиска по блогам, индексирующий комментарии постов;
'YandexNews' — робот Яндекс.Новостей;
'YandexPagechecker' — робот, обращающийся к странице при валидации микроразметки через форму «Валидатор микроразметки»;

Важно: Персональное обращение к роботу имеет больший приоритет чем общее и оно будет проигнорированно:

Правила указанные для
Код PHP:
User-agent: *
имеющие пересекающиеся указания в
Код PHP:
User-agent: Yandex
будут проигнорированы.

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

Пример:
Код PHP:
User-agent: *
Disallow: /gallery

User-agent: YandexImages
Allow: /gallery
Мы запретили всем роботам индексировать Галерею, но роботу Яндекс.Картинок разрешили индексировать картинки в этом разделе сайта.

3. Указываем главное зеркало сайта. Директива Host

Мы разобрали что писать в начале файла robots.txt, теперь посмотрим что написать в конце. Директива Host нужна для указания главного зеркала сайта. Каждый сайт доступен как минимум по двум адресам с www и без www.
Определимся какой из урлов у нас будет главным (допустим с www) и запишем его:

Код PHP:
User-agent: *

Host: instantcms.ru
Таким образом получили минимально необходимый robots.txt
Директива Host работает только для Яндекса. Гугл сам вполне корректно определяет главное зеркало сайта. Удачным решением будет добавить сайт в панель вебмастера в Гугле и в Яндексе и продублировать там эту информацию.

Когда мы указали главное зеркало сайта, мы подразумеваем что все ссылки на сайте формируются в соответствии с главным зеркалом сайта, однако пользователи на сторонних ресурсах могут ссылаться на ваш домен без www. В результате мы теряем часть ссылочной массы: это и ТИЦ, и ПР, и ссылочное.

самый простой способ - это 301 редирект через htaccess
Код PHP:
RewriteCond %{HTTP_HOST} ^instantcms\.ru$ [NC]
RewriteRule ^(.*)$ http://instantcms.ru/$1 [R=301,L]
301 редирект сообщает поисковому роботу что страница постоянно перемещена по следующему адресу. В результате мы не теряем ссылочное и пользователь перешедший по неправильному адресу автоматически переадресуется на правильный.

4. Запрещаем и Разрешаем индексацию. Директивы Allow и Disallow

Основные ошибки происходят в этой части, центральной, файла robots.txt
Запретить то что не нужно запрещать smile Прежде чем приступать к написанию правил - важно четко понять одну простую вещь, робот видит сайт глазами незарегистрированного посетителя. Проанализируйте (разлогинившись) ваш сайт на предмет ссылок на системные папки и страницы генерируемые под залогиненого пользователя. Очевидно же что бот не может знать структуру системных папок на вашем сервере без доступа к фтп, поэтому запрещать ему доступ к системным папкам незачем. На них нет ссылок с сайта, а если есть, то лучше их убрать :)
Таким образом мы исключаем из запрета к индексации ссылки на добавление статьи, записи в блог, объявления, добавления фото и тд. То есть все те ссылки которые может увидеть только авторизованный человек.

Пример плохого файла:
User-Agent: * -Обозначили что правила распространяются на всех роботов
Disallow: /admin -Зачем то показали где у нас админка. ссылок на нее нет, где она знает только админ
Disallow: /actions - системная папка, ссылок прямых на нее нет
Disallow: /cache - системная папка, ссылок прямых на нее нет
Disallow: /backups - системная папка, ссылок прямых на нее нет
Disallow: /core - системная папка, ссылок прямых на нее нет
Disallow: /dump - системная папка, ссылок прямых на нее нет, при этом мы указали где искать дампы базы данных нашего сайта :(
Disallow: /wysiwyg - системная папка, ссылок прямых на нее нет
Disallow: /includes - системная папка, ссылок прямых на нее нет
Disallow: /modules - системная папка, ссылок прямых на нее нет
Disallow: /filters - системная папка, ссылок прямых на нее нет
Disallow: /languages - системная папка, ссылок прямых на нее нет
Disallow: /install - системная папка, нужно её вообще сразу удалять после установки
Disallow: /users - Список пользователей и Профили пользователей. Смысла закрывать от индексации нет. Если у вас спам в профилях - спам убирается другими способами, а вот так мы лишили себя большого количества страниц которые могут пригодится и в ссылочных биржах и в выдаче. В профилях кроме спама есть и контент по которому может быть траффик из поисковиков.
Disallow: /registration -Страница регистрации. Смысла в этой странице для поисковика нет. Стоит ли запретить её? Если посмотреть анализатором ПР страницы сайта, то мы увидим что это одна из внутренних страниц которая имеет больший ПР на сайте чем остальные(как разделы сайта), поскольку практически каждая страница сайта на нее ссылается. Убрать ли страницу или оставить и использовать для поднятия низкочастотных запросов за счет внутреннеё перелинковки? - на выбор.
Disallow: /login -Страница логина. Как и выше.
Disallow: /search - Страница поиска. Эта строка говорит поисковым роботам, что искать в результатах поиска не нужно. Однако если у вас нет ссылок на результат поиска - можно не закрывать эту страницу.
Disallow: /search/tag - Теги следует закрывать от индексации. Какими они не были бы красивыми smile но по ним отдается дублированный контент. Хотя есть случаи когда теги используют для группировки контента и оставляют открытыми.
Disallow: /go/ - Страница редиректа внешних ссылок. Запрещаем.

Итого из этого длинного списка, по делу оказалось лишь 3 строчки, остальное бесполезно и местами даже опасно (раскрытие путей к дампам базы данных, к админке и системным каталогам)

Пока закончим на основах, что бы было понимание того что делаем и почему так. В следующий раз будем разбирать дубликаты страниц и как их удалить из выдачи.
якорь на коментарий | Оптимальный robots.txt - часть 2
Комментарии (48)
soxom 27 января 2012 в 18:13 +1
1) Думаю, что если бы вы сами не написали, про пути к дампам базы и системных каталогам, их никто бы и не додумался написать )))
2) Про профили... Ну это пусть уж сам вебмастер решает.
3) Гнать вес на Логин и регистрацию - это извращение
4) Про то, зачем закрывать поиск, тэги и индексный файл:
http://www.google.ru/search?q=site:http://instantcms.ru/search&hl=ru&lr=&newwindow=1&prmd=imvns&ei=HbAiT__ZBKeB4gSc_NW8CA&start=110&sa=N&biw=1280&bih=909

instantcms.ru%2Findex.php&hl=ru&newwindow=1&biw=1280&bih=909&num=10&lr=&ft=i&cr=&safe=images" target="_blank">http://www.google.ru/search?q=site%3Ahttp%3A%2F%2Finstantcms.ru%2Findex.php&hl=ru&newwindow=1&biw=1280&bih=909&num=10&lr=&ft=i&cr=&safe=images

Disallow: /search - Страница поиска. Эта строка говорит поисковым роботам, что искать в результатах поиска не нужно. Однако если у вас нет ссылок на результат поиска - можно не закрывать эту страницу. Disallow: /search/tag - Теги следует закрывать от индексации. Какими они не были бы красивыми но по ним отдается дублированный контент. Хотя есть случаи когда теги используют для группировки контента и оставляют открытыми.
Второй, глупо вписывать, если вы вписали первый ))) /search/tag итак запрещен, если вы запретили /search
picaboo 27 января 2012 в 18:55 0
Если не закрыт поиск, то теги надо закрыть обязательно. Поэтому и второе правило для тех кто не запретил поиск

3 не извращение, кому надо закроет, но и от открытого вреда нет и пользу можно извлечь

Это вообще был разбор роботса одного из форумчан, яркий пример когда закрыто все. У большинства так.
nedoriko 27 января 2012 в 20:53 0
ну лично я поиск не могу закрыть. у меня в поиске игры лежат. просто начинал делать на инстанте и не знал как новый компонент сделать. вот в поиск их и определил.
soxom 28 января 2012 в 00:36 0
Так разрешите allow ))) Я не заню что это за игры, если дадите ссылку, помогу открыть для индексации
Моделист 28 января 2012 в 01:28 0
Один вопрос: С каких пор появилась директива "Allow"?
Насколько я помню спецификации, такой директивы не было и нет. Можно только запретить.
Если проще то: что не запрещено, то разрешено.
nedoriko 28 января 2012 в 01:39 +1
эти игры
Моделист:
что не запрещено, то разрешено.
я тоже этим методом пользуюсь.
вот мой робот.тхт
User-Agent: *
Disallow: /login/
Disallow: /admin/
Disallow: /registration/
Disallow: /search/tag/
Host: www.svoi-vzglyad.ru
Sitemap: http://www.svoi-vzglyad.ru/sitemap.xml
picaboo 28 января 2012 в 03:10 +3
У вас ошибка в роботсе. Директива Host должна идти последней в секции, поскольку она толька для Яндекса является родной, у остальных её нет в спецификации. Поэтому для других ботов это будет ошибочной директивой и они могут споткнуться на ней и дальше эту секцию не принимать. Sitemap может быть проигнорирован.
nedoriko 28 января 2012 в 10:53 0
спасибо. поправлю.
soxom 28 января 2012 в 13:30 0
Хороший совет! +
soxom 28 января 2012 в 13:34 0
Добавьте данную строчку в ваш роботс и считайте что закрыли поиск ))) И он нисколько не помешает индексации игр...

Disallow: /index.php
picaboo 28 января 2012 в 13:55 0
Я у себя вообще закрываю всегда *.php
При включеном чпу - дублей всегда куча убирается
reload 28 января 2012 в 21:27 0
С каких пор появилась директива "Allow"?
из yandex.ru/webmaster:
Чтобы разрешить доступ робота к некоторым частям сайта или сайту целиком, используйте директиву 'Allow'.
Директивы Allow-Disallow без параметров:
User-agent: Yandex
Disallow:

# то же, что и Allow: /

User-agent: Yandex
Allow:

# то же, что и Disallow: /
Алфей 27 января 2012 в 18:34 0
Пример плохого файла:
А пример хорошего файла можно глянуть?!
picaboo 27 января 2012 в 18:56 0
Пример сделаем во второй части. Задача стоит не скопипастить и забыть, а научится понимать этот инструмент и использовать его
reload 27 января 2012 в 19:05 0
а что скажите о:
Disallow: /upload/userfiles/
на это ссылки есть?
просто заметил когда-то в выдаче файлы пользователей)
решил закрыть - правильно ли решил, или без разницы?)
soxom 28 января 2012 в 00:37 0
Это реально без особой разницы. Если закрыли, хуже не будет, но и бонусы не получите
reload 28 января 2012 в 02:12 0
Да не бонусы ведь хотел получить)
а скрыть возможно "конфиденциальную" информацию от попадания в массы)
picaboo 28 января 2012 в 03:10 0
Надо скрыть - скрывайте ;)
reload 28 января 2012 в 15:03 0
Я у себя вообще закрываю всегда *.php
picaboo, случайно не подскажешь, возможно ли одной строкой скрыть все *.php
или так и писать
Disallow: *.php
нужны для каждой директории слеши?
сенкс.
picaboo 28 января 2012 в 15:18 0
Disallow: *.php
скроет все урлы в которых будет встречаться ".php"

счас дописываю вторую часть - там с примерами расскажу.
TheSteek 28 января 2012 в 17:55 0
robots.txt для google

посмотрите))), а у vk.com робота.тхт нет))
TheSteek 28 января 2012 в 17:58 0
Allow: - для того если ссылки на сайте нет, робот соответственно не видит раздел , а индексация нужна. Так?
nedoriko 13 апреля 2012 в 19:19 0
я тоже оллов так понимаю. но вот работает он или нет. я незнаю
reload 28 января 2012 в 20:33 0
Вот еще интересная штука.
Disallow: /search/tag/
У меня на одном сайте теги закрыты с самого запуска и гугл их не индексирует
а вот яша мало того что индексирует так еще и в выдаче выдает
может яша имел наши роботсы?
Rainbow 29 января 2012 в 00:13 0
А пример хорошего файла можно глянуть?!

Вот мой файл:

Код PHP:
User-Agent: Googlebot
Allow: /


User-agent: Yandex
Allow: /

User-Agent: *
Allow: /

User-agent: * 
Disallow: /admin/
Disallow: /backups/
Disallow: /backup/
Disallow: /board/
Disallow: /components/
Disallow: /wysiwyg/
Disallow: /includes/
Disallow: /modules/
Disallow: /filters/
Disallow: /languages/
Disallow: /users/
Disallow: /core/


Host: ваш_сайт.com
Sitemap: http://ваш_сайт.com/sitemap.xml
Функцию alloow понимает только Google
Мой сайт в топе...

так вот, чтобы не флудить у меня с таким
picaboo 29 января 2012 в 00:18 +1
У вас не рабочий роботс. Перечитайте что я пометил важным в пункте 2, а так же выше про ошибку с host
nedoriko 29 января 2012 в 11:05 0
ну вот. я не единственный кто такой порядок сделал
Host:
Sitemap:
ну так может голосование сделаем))) как всетаки правильней?
Lana 29 января 2012 в 11:52 0
Только о нашем голосовании ничего поисковикам будет не известно )
Специально поменяла местами и проверила - http://webmaster.yandex.ua/robots.xml
написало что Яндескс использует все мои строки вмеспоте с
Host: ***
Sitemap: ***
Так что хотя я тоже думала что host последняя директива - видимо возможен и такой вариант.
soxom 29 января 2012 в 15:45 +1
Не будет трагедией если хост будет прописан перед картой сайта, но существует такая возможность, что Яндекс все будет видеть и использовать, а Гугл нет. Об этом писал Пикабу выше... Это конечно скорее всего миф, но лучше все-таки подстраховаться и поставить хост в робтсе последним
Евгений Фоменко 27 мая 2012 в 13:11 0
Поисковые системы, в частности гугл, имеет оперативы, больше, чем необходимо для хранения всего интернета, неужели вы думаете, что у них не нашлось человека, который предусмотрел такой распространенный случай? Это вы спотыкаться можете, гугл - это алгоритм, который явно не троли делают. не забивайте дурным голову!
Rainbow 29 января 2012 в 01:10 0
У вас не рабочий роботс. Перечитайте что я пометил важным в пункте 2, а так же выше про ошибку с host
Он вполне рабочий (проверен), но этот файл не руководство для каждого ( доска, закрыта) но он просто как должен устроен ...

А насчет не рабочий извини уже проверен временем, ....
picaboo 29 января 2012 в 01:37 0
В нем ничего не запрещается, а хост указан неверно. Эффект от вашего роботса - равен его отсутствию. ;)
Rainbow 29 января 2012 в 01:10 0
У вас не рабочий роботс. Перечитайте что я пометил важным в пункте 2, а так же выше про ошибку с host
Он вполне рабочий (проверен), но этот файл не руководство для каждого ( доска, закрыта) но он просто как должен устроен ...

А насчет не рабочий извини уже проверен временем, ....
soxom 29 января 2012 в 16:03 0
Здесь полностью согласен с пикабу... Ваш роботс практически бесполезен для сайта. Он не будет мешать развитию сайта, но и не поможет
Алфей 29 января 2012 в 10:38 0
Получается в этом деле тоже, сколько людей - столько мнений, и у каждого правильное.
Rainbow 29 января 2012 в 18:07 0
Для джумлы проще, но для обширного инстанта, немного сложней,
Вообще общие правила ( и я согласен с замечаниями) можно найти в поиске Яши "robots.txt" вот скрин об ошибках

Но... по моим запросам и ключевым он вылез в топ (может можно улучшить, но пока устраивает), поэтому мнения здесь наверно не очень уж важны,
Но у меня только уникальный контент
reload 29 января 2012 в 21:52 +3
Роботс и топ не совсем взаимосвязаны.
просто с правильным роботсом вы показываете что именно важно для индексирования и что индексировать не нужно
этим вы как минимум уменьшите нагрузку на сервер при постоянных сканированиях вашего сайта.
Попадание в топ зависит по большей степени от правильного написания статей ну и поведенчиского фактора и часто от частоты добавляемого материала + конечно внутренняя и внешняя оптимизация - здесь роботс играет не значитильную роль)
В роботсе нет смысла вначале открывать полный доступ гоше, потом яше а потом вообще всем после чего скрывать не нужные разделы - достаточно указать какие разделы вы закрываете для всех роботов через директиву User-agent: *
все остальное разрешено по умолчанию.
Если робот в директиве находит свое имя - остальные правила он игнорирует!!!
От сюда вывод - у вас сайт не имеет скрытых от индексации разделов для яши и гоши!!! все остальные роботы подчиняются условиям общей директивы!!!
Яша директиву Host: понимает в любом месте, но возможно ее непонимание другими робатами - поэтому другие дойдя до Host: и не прочитав ее просто проигнорируют все остальные правила!!! так что Host: лучьше писать последним иначе вашу карту не все роботы увидят (если конечно вы сами не скармливали ее))

вот как то так)
soxom 29 января 2012 в 23:02 0
Подробней и не напишешь ))
Евгений Фоменко 27 мая 2012 в 13:14 0
Директива host тоже получается исключительно ради понтов приклеена ибо если мы ставим 301 редирект с www на не-www, то какой бот вообще сможет проиндексировать www.site? Называется отсортируйте документы и сожгите.
SJen 27 мая 2012 в 14:15 0
директива host исключительно ради Яндекса, который ее придумал.
Rainbow 6 февраля 2012 в 22:21 0
Роботс и топ не совсем взаимосвязаны. просто с правильным роботсом вы показываете что именно важно для индексирования и что индексировать не нужно этим вы как минимум уменьшите нагрузку на сервер при постоянных сканированиях вашего сайта. Попадание в топ зависит по большей степени от правильного написания статей ну и поведенчиского фактора и часто от частоты добавляемого материала + конечно внутренняя и внешняя оптимизация - здесь роботс играет не значитильную роль) В роботсе нет смысла вначале открывать полный доступ гоше, потом яше а потом вообще всем после чего скрывать не нужные разделы - достаточно указать какие разделы вы закрываете для всех роботов через директиву User-agent: * все остальное разрешено по умолчанию. Если робот в директиве находит свое имя - остальные правила он игнорирует!!! От сюда вывод - у вас сайт не имеет скрытых от индексации разделов для яши и гоши!!! все остальные роботы подчиняются условиям общей директивы!!! Яша директиву Host: понимает в любом месте, но возможно ее непонимание другими робатами - поэтому другие дойдя до Host: и не прочитав ее просто проигнорируют все остальные правила!!! так что Host: лучьше писать последним иначе вашу карту не все роботы увидят (если конечно вы сами не скармливали ее)) вот как то так)

Проанализировав Ваш пост, начал искать истину на сайтах по рекомендациям по созданию роботс пришел к выводу, что Вы правы ... большой плюс и Вам и Особенно soxom за поднятую тему.
Nivil 22 ноября 2012 в 09:43 0
У меня такой
User-agent: Yandex
Disallow: /login/
Disallow: /admin/
Disallow: /registration/
Disallow: /search/tag/
Host: www.promanual.ru
User-Agent: *
Disallow: /login/
Disallow: /admin/
Disallow: /registration/
Disallow: /search/tag/
Sitemap: http://www.promanual.ru/sitemap.xml
picaboo 22 ноября 2012 в 09:50 0
User-Agent: *
Disallow: /login/
Disallow: /admin/
Disallow: /registration/
Disallow: /search/tag/
Sitemap: http://www.promanual.ru/sitemap.xml
Host: www.promanual.ru

можно укоротить, смысл не изменится
Clear 16 мая 2013 в 13:51 0
думается что еще забыта корзина /price/cart.html и /catalog/viewcart.html - ну кому надо конечно )
А ну и еще /passremind.html итого получили дополнительные три строчки

Disallow: /price/cart.html
Disallow: /catalog/viewcart.html
Disallow: /passremind.html

Может еще что то есть ?
nedoriko 27 августа 2013 в 22:44 0
обратил внимание что в яндекс вебмастере на некторых моих сайтах выбиваются страницы из поиска. заглянул к себе в фтп и заметил что мои роботы.тхт кудато делись.
вот и решил по новой их сосдать. но при этом задумался о моих поддоменах.
вопрос: как роботов в поддомен отправить? и надо ли прописывать www и http?
dChirkis 31 марта 2015 в 14:46 +2
Для меня вопрос вновь актуален для 2 версии.
AS31 28 октября 2016 в 01:43 0
Не судите строго, я новичок в этом деле.
У меня такой robots.txt


User-agent: *
Disallow: /
Disallow: /index.php$
Allow: /board
Allow: /sitemap.xml
Allow: /sitemap_content_board.xml
Allow: /sitemap_content_pages.xml
Sitemap: http://сайт.ru/sitemap.xml
Host: http://сайт.ru/
AS31 29 октября 2016 в 22:07 0
Прочитав все за и против касающееся robots.txt и учитывая то что написано выше и пример плохого файла, составил свой
И он получился такой, мой сайт на тематику объявления:

User-agent: *
Disallow: /backup*
Disallow: /components/
Disallow: /search/
Disallow: /search/tag/
Disallow: /rss/
Disallow: /go/
Disallow: /index.php$
Sitemap: http://САЙТ.ru/sitemap.xml
Sitemap: http://САЙТ.ru/sitemap_content_board.xml
Sitemap: http://САЙТ.ru/sitemap_content_pages.xml
Host: http://САЙТ.ru/

Проверил в Яндексе и никаких ошибок и все 4 http адреса пометил зеленой галочкой.
Если что то не так поправьте...