Robots.txt — служебный файл, который находится в корневом каталоге сайта и необходим, чтобы указывать поисковым системам, как работать с вашим сайтом. Когда краулер приходит на хостинг, файл robots.txt является одним из первых документов, к которому он обращается. Не смотря на то, что robots.txt есть практически у каждого сайта, проводимые мной аудиты ваших сайтов показывают, что у четверти из них robots настроен неверно, что приводит к самым печальным последствиям.
Текст с обновлением от 17/10/2018
Robots.txt в большинстве случаев используется для исключения дубликатов, служебных страниц, удаленных страниц и других ненужных страниц из индекса поисковых систем. Кроме того, именно через robots.txt можно указать адрес карты сайта (sitemap.xml). В некоторых случаях к robots.txt прибегают для того, чтобы закрыть сайт от нежелательной поисковой системы.
Правильное манипулирование robots.txt позволяет перенаправить бота ПС на нужные страницы, не разрешая создавать дубли контента, приводящие к понижению позиций.
Файл robots.txt должен:
- располагаться строго в корне сайта,
- он должен быть единственным,
- число директив (команд) не должно превышать 1024,
- размер не превышать 500kB (для Google).
В соответствии со стандартом перед каждой директивой User-agent рекомендуется вставлять пустой перевод строки.
Символ # предназначен для описания комментариев. Все, что находится после этого символа и до первого перевода строки не учитывается.
Если файл robots.txt отсутствует, не является текстовым или на запрос робота возвращается HTTP-статус отличный от 200 OK, робот считает, что доступ к документам не ограничен и можно индексировать все в пределах сайта.
Содержание файла robots.txt
Файл должен содержать обычный текст в кодировке UTF-8, состоящий из записей (строк), разделенных символами возврата каретки, возврата каретки/перевода строки или перевода строки.
Выполняются только действительные записи, остальное содержание игнорируется. Например, при получении страницы HTML будут учитываться только действительные строки, а остальное содержание – игнорироваться без предупреждения или сообщения об ошибке.
При использовании кодировки, в которой присутствуют символы, не входящие в таблицу UTF-8, синтаксический анализ содержания файла может быть выполнен неправильно.
Отметка последовательности байтов (BOM) в начале файла robots.txt игнорируется. Добавлять ее не обязательно.
Файл состоит из одной или нескольких директив User-agent, которые предназначены для описания директив для разных роботов, директив Disallow и Allow, которые служат для запрета или разрешения индексации и межсекционной директивы sitemap.
Яндекс ранее использовал директиву host, которая ранее указывала на главное зеркало сайта, а ныне не используется. Также Яндекс изобрел директиву Clean-param, которая служит для очистки динамических параметров урла и снижения нагрузки на хостинг.
Директива Disalow служит для запрета индексации, Allow — для разрешения индексации.
Каждая запись состоит из поля, двоеточия и значения. Использование пробелов не обязательно, но рекомендуется для удобства чтения. Комментарии могут размещаться в любом месте файла и должны обозначаться символом #. Все содержание, расположенное после этого знака до конца строки, расценивается как комментарий и игнорируется.
Общий формат: «<поле>:<значение><#комментарий (не обязательно)>«.
Пробелы в начале и конце записи игнорируются.
Для элемента <поле> регистр не учитывается. Элемент <значение> может быть чувствительным к регистру (в зависимости от элемента <поле>).
Обработка элементов <поле> с простыми ошибками или опечатками (useragent вместо user-agent и т. п.) не описана. Некоторые агенты пользователя обрабатывают такие ошибки правильно.
Кто главней: robots.txt или мета-теги robots
Закрыть страницы сайта от индексирования можно несколькими способами, в том числе прописать метатег robots, где можно указать следующие директивы (в нотации для Google):
- all — Нет ограничений на индексирование и показ контента. Эта директива используется по умолчанию и не влияет на работу поисковых роботов, если нет других указаний.
- noindex — Не отображать эту страницу, а также ссылку «Сохраненная копия» в результатах поиска.
- nofollow — Не выполнять переход по ссылкам на этой странице.
- none — Аналогично метатегам noindex, nofollow.
- noarchive — Не отображать ссылку «Сохраненная копия» в результатах поиска.
- nosnippet — Не отображать расширенное описание этой веб-страницы в результатах поиска.
- notranslate — Не предлагать перевод этой страницы в результатах поиска.
- noimageindex — Не индексировать изображения на этой странице.
- unavailable_after: [RFC-850 date/time] — Не отображать эту страницу в результатах поиска после указанного времени/даты. Время/дату следует указать в формате RFC 850.
Очень часто возникают противоречия между директивами в robots.txt и метатегом на странице. Например, в robots.txt страница закрыта для индексирования, а метатегом robots страница открыта для индексации. Что происходит в этом случае?
Для Google выполняется такое правило: «метатеги robots обнаруживаются при сканировании URL. Если сканирование страницы запрещено файлом robots.txt, то директивы, касающиеся индексирования или показа контента, будут проигнорированы. Чтобы обеспечить обязательное выполнение директив, не следует запрещать сканирование URL, для которых они заданы».
Однако, необходимо понимать, что robots.txt — это набор рекомендованных, в не обязательных правил для Google. Поэтому, если на страницу, открытую для индексации и закрытую в robots.txt стоит внешняя ссылка, то она, с некоторой долей вероятности будет обработана и проиндексирована.
Обновлено 17/10/2018
Google уточнил это положение. Теперь страница может быть проиндексирована, если на неё есть любая ссылка (внешняя или внутренняя), несмотря на запрет в Robots.txt. Гарантировано заблокировать индексацию можно либо используя «noindex», либо запретить анонимный доступ к странице с помощью авторизации. Источник тут.
Недаром в новой поисковой консоли есть отчет «Покрытие», где можно посмотреть проиндексированные страницы, несмотря на блокировку в Robots.
Конец обновления от 17/10/2018
Если имеется второй вариант — в robots.txt запретов на индексацию нет, но метатеги указывают на noindex, то краулер откроет такую страницу, прочитает метатеги и индексировать страницу не будет. Google всегда выполняет наиболее строгую директиву.
Отсюда вывод: устраняйте несогласованность между метатегами и robots.txt, чтобы лучше понимать какие разделы сайта и какие внутренние ссылки закрыты от индексирования.
Интересен вариант несогласованности между метатегами на странице. Так, для Яндекса, если робот обнаруживает конфликт между несколькими мета-тегами, он учтет положительное значение:
<meta name=»robots» content=»all»/>
<meta name=»robots» content=»noindex, follow»/>
<!—Робот выберет значение all, текст и ссылки будут проиндексированы.—>
C Google иная ситуация — он выполняет наиболее строгую директиву. То есть, для приведенного выше примера робот проиндексирует только ссылки, но не контент.
Типичные ошибки в robots.txt
1. Имя файла содержит заглавные буквы
Файл должен называться robots.txt, а не Robots.txt или ROBOTS.TXT.
2. Использование файла robot.txt вместо robots.txt
Еще раз – файл должен называться robots.txt.
3. Перепутанные инструкции
Одна из самых распространённых ошибок в robots.txt – перепутанные между собой инструкции. Например:
Disallow: Yandex
Правильно писать вот так:
User-agent: Yandex
Disallow: /
4. Указание нескольких каталогов в одной инструкции disallow
Многие владельцы сайтов пытаются поместить все запрещаемые к индексации каталоги в одну инструкцию Disallow:
Disallow: /css/ /cgi-bin/ /images/
Такая запись нарушает стандарт, и невозможно угадать, как ее обработают разные роботы. Правильно надо писать так:
Disallow: /css/
Disallow: /cgi-bin/
Disallow: /images/
5. Пустая строка в user-agent
Так неправильно:
User-agent:
Disallow:
Так правильно:
User-agent: *
Disallow:
6. Зеркала сайта и URL в директиве Host
Чтобы указать, какой сайт является главным, а какой — зеркалом (дублем), для Google используются 301 редирект и внесение информации в Google Search Console, а для Яндекса — директива host. Правда эта директива была отменена весной 2018 года, но многие продолжают её использовать.
С точки зрения поисковых систем http://www.site.ru , http://site.ru , https://www.site.ru и https://site.ru — четыре разных сайта. Несмотря на то что визуально для людей это одно и то же, поисковая система принимает решение самостоятельно, какой сайт отображать в результатах выдачи, а какой — нет. Казалось бы, в чем проблема? Их может быть несколько:
- поисковик Яндекс принял решение оставить у себя в индексе сайт с www, a Google решил оставить без www;
- ссылки с других ресурсов, которые имеют влияние на ранжирование, ссылаются на сайт с www, а в индексе поисковика остался сайт без www.
Чтобы таких проблем не возникло, на этапе технической оптимизации принудительно сообщаем поисковикам, какой вариант сайта — с www или без, с https или без него — для нас предпочтительнее, и избавляем себя от возможных проблем в дальнейшем.
Итак, для протокола http следует писать без аббревиатуры протокола передачи гипертекста, то есть без http:// и без закрывающего слеша /
Неправильно:
User-agent: Yandex
Disallow: /cgi-bin
Host: http://www.site.ru/
Правильно:
User-agent: Yandex
Disallow: /cgi-bin
Host: www.site.ru
Однако, если ваш сайт с https, то правильно писать вот так:
User-agent: Yandex
Disallow: /cgi-bin
Host:https:// www.site.ru
Директива host Является корректной только для робота Яндекса, межсекционной. Поэтому, желательно, секцию Яндекса описывать после всех других секций.
Напомню еще раз, директива host стала необязательной. Теперь главное зеркало можно установить в Яндекс вебмастере.
7. Использование в Disallow символов подстановки
Иногда хочется написать что-то вроде:
User-agent: *
Disallow: file*.html
для указания все файлов file1.html, file2.html, file3.html и т.д. На сегодняшний день — это вполне допустимо как для робота Яндекс так и Google.
Более того, Яндекс по умолчанию к концу каждого правила, описанного в файле robots.txt, приписывается спецсимвол *. Пример:
User-agent: Yandex
Disallow: /cgi-bin* # блокирует доступ к страницам
# начинающимся с ‘/cgi-bin’
Disallow: /cgi-bin # то же самое
Чтобы отменить * на конце правила, можно использовать спецсимвол $, например:
User-agent: Yandex
Disallow: /example$ # запрещает ‘/example’,
# но не запрещает ‘/example.html’
User-agent: Yandex
Disallow: /example # запрещает и ‘/example’,
# и ‘/example.html’
Спецсимвол $ не запрещает указанный * на конце, то есть:
User-agent: Yandex
Disallow: /example$ # запрещает только ‘/example’
Disallow: /example*$ # так же, как ‘Disallow: /example’
# запрещает и /example.html и /example
8. Редирект на страницу 404-й ошибки
Довольно часто, на сайтах без файла robots.txt при запросе этого файла делается переадресация на другую страницу.
Иногда такая переадресация происходит без отдачи статуса 404 Not Found. Пауку самому приходится разбираться, что он получил – robots.txt или обычный html-файл. Эта ситуация вряд ли создаст какие-то проблемы, но все-таки лучше всегда класть в корень сайта пустой файл robots.txt.
9. Заглавные буквы — это плохой стиль
USER-AGENT: GOOGLEBOT
DISALLOW:
Хотя по стандарту robots.txt и нечувствителен к регистру, часто к нему чувствительны имена файлов и директорий. Кроме того, написание robots.txt сплошь заглавными буквами считается плохим стилем.
10. Перечисление всех файлов
Еще одной ошибкой является перечисление каждого файла в директории:
User-agent: *
Disallow: /AL/Alabama.html
Disallow: /AL/AR.html
Disallow: /Az/AZ.html
Disallow: /Az/bali.html
Disallow: /Az/bed-breakfast.html
Вместо этого можно просто закрыть от индексации директорию целиком:
User-agent: *
Disallow: /AL/
Disallow: /Az/
11.Использование дополнительных директив в секции *
Некоторые роботы могут неправильно отреагировать на использование дополнительных директив. Это значит, что не стоит использовать дополнительные директивы в секции «*».
То есть рекомендуется создавать специальные секции для нестандартных директив, таких как host.
Так неправильно:
User-agent: *
Disallow: /css/
Host: www.example.com
А вот так – правильно:
User-agent: *
Disallow: /css/
User-agent: Yandex
Disallow: /css/
Host: www.example.com
12. Отсутствие инструкции Disallow
Даже если мы хотим просто использовать дополнительную директиву и не хотим ничего запрещать, лучше всего указать пустой Disallow. По стандарту инструкция Disallow является обязательной, и робот может «неправильно вас понять».
Так неправильно:
User-agent: Yandex
Host: www.example.com
Так правильно:
User-agent: Yandex
Disallow:
Host: www.example.com
13. Отсутствие слешей при указании директории
Как в этом случае поступит робот?
User-agent: Yandex
Disallow: john
По стандарту, он не будет индексировать файл с именем «john» и директорию с именем «john». Для указания только директории надо писать так:
User-agent: Yandex
Disallow: /john/
14. Неправильный HTTP-заголовок
Сервер должен возвращать в HTTP-заголовке для robots.txt «Content-Type: text/plain» а, например, не «Content-Type: text/html». Неправильный заголовок может привести к тому, что некоторые роботы не обработают файл.
15. Логические ошибки
Зачастую при разветвленной структуре сайта возникают логические ошибки в определении того, что и как нужно блокировать от индексации.
Для Google: На уровне группы, в частности для директив allow и disallow, самое строгое правило, учитывающее длину записи [путь], будет важнее менее строгого и более короткого правила. Порядок очередности правил с подстановочными знаками не определен.
Яндекс: Директивы Allow и Disallow из соответствующего User-agent блока сортируются по длине префикса URL (от меньшего к большему) и применяются последовательно. Если для данной страницы сайта подходит несколько директив, то робот выбирает последнюю в порядке появления в сортированном списке. Таким образом, порядок следования директив в файле robots.txt не влияет на использование их роботом.
Исходный robots.txt:
User-agent: Yandex
Allow: /catalog
Disallow: /
Сортированный robots.txt:
User-agent: Yandex
Disallow: /
Allow: /catalog
# разрешает скачивать только страницы, начинающиеся с ‘/catalog’
Исходный robots.txt:
User-agent: Yandex
Allow: /
Allow: /catalog/auto
Disallow: /catalog
Сортированный robots.txt:
User-agent: Yandex
Allow: /
Disallow: /catalog
Allow: /catalog/auto
# запрещает скачивать страницы, начинающиеся с ‘/catalog’,
# но разрешает скачивать страницы, начинающиеся с ‘/catalog/auto’.
При конфликте между двумя директивами с префиксами одинаковой длины в Яндексе приоритет отдается директиве Allow, в Google — Disallow.
В любом случае протестируйте ваш robots.txt на конфликты в обоих вебмастерах.
Необычная ситуация с индексированием
В ходе выполнения аудита одного коммерческого сайта была замечена странная ситуация с пагинацией страниц: если страницы пагинации закрывались от индексации, то падал трафик с Яндекса, но возрастал с Google. Если страницы пагинации открывались для индексации, то раз в 5 вырастал трафик с Яндекса и при этом практически исчезал из Google.
Пришлось, как временную затычку, убирать блокирование пагинации из robots.txt (что уже правильно — нельзя страницы пагинации там закрывать) и прописывать такую конструкцию в заголовке страницы:
<meta name=«robots» content=«noindex, follow»/>
<meta name=«yandex» content=«index»/>
Таким образом, контент страницы пагинации не индексируется в Google, но индексируется в Яндексе. При этом все ссылки страницы доступны для индексации.
Окт
2018
Об авторе:
DrMax. Занимаюсь аудитами, оценкой качества YMYL проектов и SEO сайтов более 20 лет. В настоящее время провожу аудиты и реанимирую трафик сайтов, восстанавливаю позиции в органической выдаче сайтов, помогаю снять алгоритмические и ручные штрафы Google. В портфолио - продвижение несколько десятков проектов как региональных частников, так и крупнейших мировых компаний. Владелец SEO блога Drmax.su. Автор 22 книг по продвижению и аудиту сайтов.