Блог

Robots.txt для сайта

Robots.txt – служебный файл, который находится в корневом каталоге сайта и необходим, чтобы указывать поисковым системам, как работать с вашим сайтом. Когда краулер приходит на хостинг, файл robots.txt является одним из первых документов, к которому он обращается. Не смотря на то, что robots.txt есть практически у каждого сайта, проводимые мной аудиты ваших сайтов показывают, что у четверти из них robots настроен неверно, что приводит к самым печальным последствиям.

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 стоит внешняя ссылка, то она, с некоторой долей вероятности будет обработана и проиндексирована.

Если имеется второй вариант – в 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, но индексируется в Яндексе. При этом все ссылки страницы доступны для индексации.

8
  Посмотрите еще

Комментарии

  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 http://drmax.su/seoguru-2018.html#comment-778

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

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