Robots.txt для сайта

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.

Проиндексированные страницы, несмотря на запрет в robots.txt
Конец обновления от 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, но индексируется в Яндексе. При этом все ссылки страницы доступны для индексации.

16

Об авторе:

DrMax. Занимаюсь аудитами, оценкой качества YMYL проектов и SEO сайтов более 20 лет. В настоящее время провожу аудиты и реанимирую трафик сайтов, восстанавливаю позиции в органической выдаче сайтов, помогаю снять алгоритмические и ручные штрафы Google. В портфолио - продвижение несколько десятков проектов как региональных частников, так и крупнейших мировых компаний. Владелец SEO блога Drmax.su. Автор 22 книг по продвижению и аудиту сайтов.
  Посмотрите еще

Комментарии

  1. Денис  22 июня, 2018

    Спасибо хороший расклад по пунктам.

    ответ
  2. Сократ  23 июня, 2018

    Некоторые моменты про файл robots.txt были реально полезны.

    ответ
  3. Вовчик  24 июня, 2018

    Подскажите, пожалуйста, в каком файле нужно прописать

    header.php?

    ответ
    • DrMax  25 июня, 2018

      вопрос не понял 😉

      ответ
      • Вовчик  25 июня, 2018

        Имею в виду прописать этот код в каком файле:

        ответ
        • DrMax  25 июня, 2018

          Владимир, если речь идет о robots.txt — то это отдельный файл в корне сайта.
          Если идет о вставках метатегов, то можно конечно прописать и в headers.php, но придется кучу условий делать для каждого из типов страниц.
          Судя по headers.php — имеется в виду wordpres? Тогда проще поставить какой-нибудь SEO плагин типа yoast seo и там для каждого типа страниц можно указать что индексировать, что нет.

          ответ
          • Вовчик  25 июня, 2018

            Почему-то не вставляется код в форму комментариев.
            Но не важно. Вы поняли о чем я. Спасибо за ответ.
            Плагин стоит. Попробую в нем еще поковыряться. Страницы пагинации в плагине скрыты. Но периодически в сообщениях в Вебмастере.Яндекс приходят сообщения, что страницы пагинации попадают в индекс, а потом удаляются оттуда. И опять некоторые попадают, а потом удаляются. Получается, что Яндексу нужно открыть?
            Спасибо за полезную информацию.

            ответ
            • DrMax  25 июня, 2018

              Я тут отвечал уже ребятам ранее.
              Если стоит yoast seo — то после какого то весеннего обновления там был глюк, когда сбросились все настройки по этим пресловутым nofollow/noindex для разных типов записей.
              Особенно «порадовало», что сбросились настройки на медиа (картинки), а так как паразит Вордпресс по умолчанию генерирует страничку под каждую картинку, то они все пролезли в индекс толпой совершенно «тухлых» страниц с картинками.
              Что нужно было сделать:
              1. прописать ноиндекс на этих страницах с медиа
              2. дождаться деиндексации
              3. склеить страницы с медиа непосредственно с самими медиа (картинками)
              все это yoast seo позволяет делать на лету.

              чтобы страницы пагинации не попадали в индекс и не удалялись оттуда — стоит проверить, попадают ли они (страницы пагинации) в сайтмап. По симптомам очень на это похоже.

              Вот я отвечал ранее про yoast seo https://drmax.su/seoguru-2018.html#comment-778

              То что я писал в амом конце про траф с Яндекса — это отдельный случай. Для отдельного конкретного сайта. В 99% остальных случаев лучше ставить везде в метатегах noindex,follow.

              ответ
  4. Денис  21 августа, 2018

    Отличная статья, как обычно.
    Раньше закрывал страницы пагинации в robots.txt. Теперь переделаю на noindex,follow в метатегах. Не знал, что это такой важный ньюанс.

    ответ
  5. Роман  26 октября, 2018

    Добрый день. Подскажите, нужно ли прописывать в робостей отдельно для поисковых систем? Гугла/Яндекса

    ответ
    • DrMax  26 октября, 2018

      Роман, день добрый.
      Конечно, нужны 2 разные секции, отдельно под Google, отдельно под Яндекс.

      ответ
  6. Сергей  5 ноября, 2018

    Добрый день.
    Так как для гугла правильней — закрывать страницы пагинации в noindex,follow или обьединять в общую цепочку тегами prev/next?

    ответ
    • DrMax  8 ноября, 2018

      Нужно делать и то и другое.
      Гугловские тут поговаривают, что будут конструкцию noindex,follow приравнивать в скором будущем к noindex,nofollow. Посему лучше всего пагинацию нужно настривать максимально корректно.

      ответ
  7. прас  27 апреля, 2019

    Добры день подскажите пожалуйста зеленому…
    на сайте есть блок основного контента, картики+текст —картинки относятся к теме статьи, а внизу есть блок «читайте так же»
    в него выводятся картинка+анотация других материалов, я заметил что гугл закидывает к себе в поиск эти картинки ( из блока читайте так же) но присваивает их к статье на кототорой они вывелись, как можно закрыть блок читайте так же от индексации

    ответ
    • DrMax  12 мая, 2019

      Выводить хитрыми скриптами (тот же SEO хайд), либо делать ссылки PRG паттернами вот по этой методике: https://drmax.su/prg-pattern-links.html

      ответ
  8. Александр  5 ноября, 2019

    Добрый день! Не подскажите: хочу сайт запустить в Директе, но сайт под СЕО совершенно не подготовлен. Соответственно хочу закрыть временно от индексации.

    Закрыть планирую сразу двумя способами: robots.txt и мета-теги robots. Но сейчас возникла мысль, может лучше все таки одним способом, а именно — мета-теги robots. Не понятно какой способ будет поавторитетней для ПС. Для Гугла вроде более жесткий вариант в приоритете, а для Яндекса неясно. Не посоветуете, что делать в данном случае?

    И второй вопрос. Читал в одной статье, что для структуры магазина лучше всего использовать ссылки вида — сайт.ру/catalog/название-категории. И товар в виде — сайт.ру/products/название-товара

    По мнению автора статьи — такая структура дает лучшее понимание ПС, где каталог, а где продукция. Я сам посмотрел в интернети и правда чаще всего магазины сделаны по такой структуре. Не подскажите, стоит все таки делать такую структуру? Или может это уже устаревшая информация

    Заранее спасибо за ответ!

    ответ

Добавить комментарий