Главная / Технический аудит / Robots.txt для сайта - правильная настройка

Robots.txt для сайта - правильная настройка

Всем нужны инструкции для работы, поисковые системы не исключения из правил, поэтому и придумали специальный файл под названием robots.txt. Этот файл должен лежать в корневой папке вашего сайта, или он может быть виртуальным, но обязательно открываться по запросу: www.вашсайт.ru/robots.txtПоисковые системы уже давно научились отличать нужные файлы html, от внутренних наборов скриптов вашей CMS системы, точнее они научились распознавать ссылки на контентные статьи и всяких хлам. Поэтому многие вебмастера уже забывают делать роботс для своих сайтов и думают, что все и так хорошо будет. Да они правы на 99%, ведь если у вашего сайта нет этого файла, то поисковые системы безграничны в своих поисках контента, но случаются нюансы, над ошибками которых, можно позаботиться заранее. Если у вас возникли проблемы с этим файлом на сайте, пишите комментарии к этой статье и я быстро помогу вам в этом, абсолютно бесплатно. Очень часто вебмастера делают мелкие ошибки в нем, что приносит сайту плохую индексацию, или вообще исключение из индекса.

Для чего нужен robots.txt

Файл robots.txt создается для настройки правильной индексации сайта поисковым системам. То есть в нем содержатся правила разрешений и запретов на определенные пути вашего сайта или тип контента. Но это не панацея. Все правила в файле robots не являются указаниями точно им следовать, а просто рекомендация для поисковых систем. Google например пишет:
Нельзя использовать файл robots.txt, чтобы скрыть страницу из результатов Google Поиска. На нее могут ссылаться другие страницы, и она все равно будет проиндексирована.
Поисковые роботы сами решают что индексировать, а что нет, и как себя вести на сайте. У каждого поисковика свои задачи и свои функции. Как бы мы не хотели, этим способ их не укротить. Но есть один трюк, который не касается напрямую тематики этой статьи. Чтобы полностью запретить роботам индексировать и показывать страницу в поисковой выдаче, нужно написать:
<meta name="robots" content="noindex" />
Вернемся к robots. Правилами в этой файле можно закрыть или разрешить доступ к следующим типам файлов:
  • Неграфические файлы. В основном это html файлы, на которых содержится какая-либо информация. Вы можете закрыть дубликаты страниц, или страницы, которые не несут никакой полезной информации (страницы пагинации, страницы календаря, страницы с архивами, страницы с профилями и т.д.).
  • Графические файлы. Если вы хотите, чтобы картинки сайта не отображались в поиске, вы можете это прописать в файле robots.
  • Файлы ресурсов. Также с помощью robots вы можете заблокировать индексацию различных скриптов, файлы стилей CSS и другие маловажные ресурсы. Но не стоит блокировать ресурсы, которые отвечают за визуальную часть сайта для посетителей (например, если вы закроете css и js сайта, которые выводят красивые блоки или таблицы, этого не увидит поисковой робот, и будет ругаться на это).
Чтобы наглядно показать, как работает robots, посмотрите на картинку ниже:
Как работает robots.txt
Поисковой робот, следуя на сайт, смотрит на правила индексации, затем начинает индексацию по рекомендациям файла.
Как работает роботс 2
В зависимости от настроек правил, поисковик знает, что можно индексировать, а что нет.

Синтаксис файла robots.txt

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

Директива User-agent

User-agent - Этой директивой вы задает название роботу, которому следует использовать рекомендации в файле. Этих роботов официально в мире интернета - 302 штуки. Вы конечно можете прописать правила для всех по отдельности, но если у вас нет времени на это, просто пропишите:
User-agent: *
*-в данном примере означает "Все". Т.е. ваш файл robots.txt, должен начинаться с того, "для кого именно" предназначен файл. Чтобы не заморачиваться над всеми названиями роботов, просто пропишите "звездочку" в директиве user-agent. Приведу вам подробные списки роботов популярных поисковых систем: Google - Googlebot - основной робот
Остальные роботы Google
Googlebot-News - робот поиска новостейGooglebot-Image - робот картинокGooglebot-Video - робот видеоGooglebot-Mobile - робот мобильной версииAdsBot-Google - робот проверки качества целевой страницыMediapartners-Google - робот сервиса AdSense
Яндекс - YandexBot — основной индексирующий робот;
Остальные роботы Яндекса
YandexDirect — скачивает информацию о контенте сайтов-партнеров Рекламной сети, чтобы уточнить их тематику для подбора релевантной рекламы, интерпретирует robots.txt особым образом;YandexDirectDyn — робот генерации динамических баннеров, интерпретирует robots.txt особым образом;YandexMedia — робот, индексирующий мультимедийные данные;YandexImages — индексатор Яндекс.Картинок;YaDirectFetcher — робот Яндекс.Директа, интерпретирует robots.txt особым образом;YandexBlogs — робот поиск по блогам, индексирующий посты и комментарии;YandexNews — робот Яндекс.Новостей;YandexPagechecker — валидатор микроразметки;YandexMetrika — робот Яндекс.Метрики;YandexMarket— робот Яндекс.Маркета;YandexCalendar — робот Яндекс.Календаря.

Директивы Disallow и Allow

Disallow - самое основное правило в robots, именно с помощью этой директивы вы запрещаете индексировать определенные места вашего сайта. Пишется директива так:
Disallow:
Очень часто можно наблюдать директиву Disallow: пустую, т.е. якобы говоря роботу, что ничего не запрещено на сайте, индексируй что хочешь. Будьте внимательны! Если вы поставите / в disallow, то вы полностью закроете сайт для индексации. Поэтому самый стандартный вариант robots.txt, который "разрешает индексацию всего сайта для всех поисковых систем" выглядит так:
User-Agent: *
Disallow:
Если вы не знаете что писать в robots.txt, но где-то слышали о нем, просто скопируйте код выше, сохраните в файл под названием robots.txt и загрузите его в корень вашего сайта. Или ничего не создавайте, так как и без него роботы будут индексировать все на вашем сайте. Или прочитайте статью до конца, и вы поймете, что закрывать на сайте, а что нет.
По правилам robots, директива disallow должна быть обязательна.
Этой директивой можно запретить как папку, так и отдельный файл. Если вы хотите запретить папку вам следует написать:
Disallow: /papka/
Если вы хотите запретить определенный файл:
Disallow: /images/img.jpg
Если вы хотите запретить определенные типы файлов:
Disallow: /*.png$
!Регулярные выражения не поддерживаются многими поисковыми системами. Google поддерживает.Allow - разрешающая директива в Robots.txt. Она разрешает роботу индексировать определенный путь или файл в запрещающей директории. До недавнего времени использовалась только Яндексом. Google догнал это, и тоже начал ее использовать. Например:
Allow: /content
Disallow: /
эти директивы запрещают индексировать весь контент сайта, кроме папки content. Или вот еще популярные директивы в последнее время:
Allow: /themplate/*.js
Allow: /themplate/*.css
Disallow: /themplate
эти значения разрешают индексировать все файлы CSS и JS на сайте, но запрещают индексировать все в папке с вашим шаблоном. За последний год Google очень много отправил писем вебмастерам такого содержания:
Googlebot не может получить доступ к файлам CSS и JS на сайте
И соответствующий комментарий: Мы обнаружили на Вашем сайте проблему, которая может помешать его сканированию. Робот Googlebot не может обработать код JavaScript и/или файлы CSS из-за ограничений в файле robots.txt. Эти данные нужны, чтобы оценить работу сайта. Поэтому если доступ к ресурсам будет заблокирован, то это может ухудшить позиции Вашего сайта в Поиске. Если вы добавите две директивы allow, которые написаны в последнем коде в ваш Robots.txt, то вы не увидите подобных сообщений от Google.

Использование спецсимволов в robots.txt

Теперь про знаки в директивах. Основные знаки (спецсимволы) в запрещающих или разрешающих это /,*,$Про слеши (forward slash) "/"Слеш очень обманчив в robots.txt. Я несколько десятков раз наблюдал интересную ситуацию, когда по незнанию в robots.txt добавляли:
User-Agent: *
Disallow: /
Потому, что они где-то прочитали о структуре сайта и скопировали ее себе на сайте. Но, в данном случае вы запрещаете индексацию всего сайта. Чтобы запрещать индексацию именно каталога, со всеми внутренностями вам обязательно нужно ставить / в конце. Если вы например пропишите Disallow: /seo, то абсолютно все ссылки на вашем сайте, в котором есть слово seo - не будут индексироваться. Хоть это будет папка /seo/, хоть это будет категория /seo-tool/, хоть это будет статья /seo-best-of-the-best-soft.html, все это не будет индексироваться.
Внимательно смотрите на все / в вашем robots.txt
Всегда в конце директорий ставьте /. Если вы поставите / в Disallow, вы запретите индексацию всего сайта, но если вы не поставите / в Allow, вы также запретите индексацию всего сайта. / - в некотором понимании означает "Все что следует после директивы /".Про звездочки * в robots.txtСпецсимвол * означает любую (в том числе пустую) последовательность символов. Вы можете ее использовать в любом месте robots по примеру:
User-agent: *
Disallow: /papka/*.aspx 
Disallow: /*old
Запрещает все файлы с расширением aspx в директории papka, также запрещает не только папку /old, но и директиву /papka/old. Замудрено? Вот и я вам не рекомендую баловаться символом * в вашем robots.
По умолчанию в файле правил индексации и запрета robots.txt стоит * на всех директивах! 
Про спецсимвол $Спецсимвол $ в robots заканчивает действие спецсимвола *. Например:
Disallow: /menu$
Это правило запрещает '/menu', но не запрещает '/menu.html', т.е. файл запрещает поисковым системам только директиву /menu, и не может запретить все файлы со словом menu в URL`е.

Директива host

Правило host работает только в Яндекс, поэтому является не обязательным, оно определяет основной домен из ваших зеркал сайта, если таковы есть. Например у вас есть домен dom.com, но и так же прикуплены и настроены следующие домены: dom2.com, dom3,com, dom4.com и с них идет редирект на основной домен dom.com Чтобы Яндексу быстрее определить, где из них главных сайт (хост), пропишите директорию host в ваш robots.txt:
Host: staurus.net
Если у вашего сайта нет зеркал, то можете не прописывать это правило. Но сначала проверьте ваш сайт по IP адрессу, возможно и по нему открывается ваша главная страница, и вам следует прописать главное зеркало. Или возможно кто-то скопировал всю информацию с вашего сайта и сделал точную копию, запись в robots.txt, если она также была украдена, поможет вам в этом.
Запись host должны быть одна, и если нужно, с прописанным портом. (Host: staurus.net:8080)

Директива Crawl-delay

Эта директива была создана для того, чтобы убрать возможность нагрузки на ваш сервер. Поисковые роботы могут одновременно делать сотни запросов на ваш сайт и если ваш сервер слабый, это может вызвать незначительные сбои. Чтобы такого не произошло, придумали правило для роботов Crawl-delay - это минимальный период между загрузками страницы вашего сайта. Стандартное значение для этой директивы рекомендуют ставить 2 секунды. В Robots это выглядит так:
Crawl-delay: 2
Эта директива работает для Яндекса. В Google вы можете выставить частоту сканирования в панеле вебмастера, в разделе Настройки сайта, в правом верхнем углу с "шестеренкой".

Директива Clean-param

Этот параметр тоже только для Яндекса. Если адреса страниц сайта содержат динамические параметры, которые не влияют на их содержимое (например: идентификаторы сессий, пользователей, рефереров и т. п.), вы можете описать их с помощью директивы Clean-param. Робот Яндекса, используя эту информацию, не будет многократно перезагружать дублирующуюся информацию. Таким образом, увеличится эффективность обхода вашего сайта, снизится нагрузка на сервер. Например, на сайте есть страницы: www.site.com/some_dir/get_book.pl?ref=site_1&book_id=123 www.site.com/some_dir/get_book.pl?ref=site_2&book_id=123 www.site.com/some_dir/get_book.pl?ref=site_3&book_id=123 Параметр ref используется только для того, чтобы отследить с какого ресурса был сделан запрос и не меняет содержимое, по всем трем адресам будет показана одна и та же страница с книгой book_id=123. Тогда, если указать директиву следующим образом:
User-agent: Yandex
Disallow:
Clean-param: ref /some_dir/get_book.pl
робот Яндекса сведет все адреса страницы к одному: www.site.com/some_dir/get_book.pl?ref=site_1&book_id=123, Если на сайте доступна страница без параметров: www.site.com/some_dir/get_book.pl?book_id=123 то все сведется именно к ней, когда она будет проиндексирована роботом. Другие страницы вашего сайта будут обходиться чаще, так как нет необходимости обновлять страницы: www.site.com/some_dir/get_book.pl?ref=site_2&book_id=123 www.site.com/some_dir/get_book.pl?ref=site_3&book_id=123
#для адресов вида:
www.site1.com/forum/showthread.php?s=681498b9648949605&t=8243
www.site1.com/forum/showthread.php?s=1e71c4427317a117a&t=8243

#robots.txt будет содержать:
User-agent: Yandex
Disallow:
Clean-param: s /forum/showthread.php

Директива Sitemap

Этой директивой вы просто указываете месторасположение вашего sitemap.xml. Робот запоминает это, "говорит вам спасибо", и постоянно анализирует его по заданному пути. Выглядит это так:
Sitemap: //staurus.net/sitemap.xml

Общие вопросы и рекомендации по robots

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

Правильный robots.txt

Очень много но в этом слове "правильный", ведь для одного сайта на одной CMS он будет правильный, а на другой CMS - будет выдавать ошибки. "Правильно настроенный" для каждого сайта индивидуальный. В Robots.txt нужно закрывать от индексации те разделы и те файлы, которые не нужны пользователям и не несут никакой ценности для поисковиков. Самый простой и самый правильный вариант robots.txt
User-Agent: *
Disallow: 
Sitemap: //staurus.net/sitemap.xml

User-agent: Yandex
Disallow: 
Host: site.com
В этом файле стоят такие правила: настройки правил запрета для всех поисковых систем (User-Agent: *), полностью разрешена индексация всего сайта ("Disallow:" или можете указать "Allow: /"), указан хост основного зеркала для Яндекса (Host: site.ncom) и месторасположение вашего Sitemap.xml (Sitemap: .

Robots.txt для WordPress

Опять же много вопросов, один сайт может быть интернет-магазинов, другой блог, третий - лендинг, четвертый - сайт-визитка фирмы, и это все может быть на CMS WordPress и правила для роботов будут совершенно разные. Вот мой robots.txt для этого блога:
User-Agent: *
Allow: /wp-content/uploads/
Allow: /wp-content/*.js$
Allow: /wp-content/*.css$
Allow: /wp-includes/*.js$
Allow: /wp-includes/*.css$
Disallow: /wp-login.php
Disallow: /wp-register.php
Disallow: /xmlrpc.php
Disallow: /template.html
Disallow: /wp-admin
Disallow: /wp-includes
Disallow: /wp-content
Disallow: /category
Disallow: /archive
Disallow: */trackback/
Disallow: */feed/
Disallow: /?feed=
Disallow: /job
Disallow: /?s=
Host: staurus.net
Sitemap: //staurus.net/sitemap.xml
Тут очень много настроек, давайте их разберем вместе.Allow в WordPress. Первые разрешающие правила для контента, который нужен пользователям (это картинки в папке uploads), и роботам (это CSS и JS для отображения страниц). Именно по css и js часто ругается Google, поэтому мы оставили их открытыми. Можно было использовать метод всех файлов просто вставив "/*.css$", но запрещающая строка именно этих папок, где лежат файлы - не разрешала использовать их для индексации, поэтому пришлось прописать путь к запрещающей папке полностью. Allow всегда указывает на путь запрещенного в Disallow контента. Если у вас что-то не запрещено, не стоит ему прописывать allow, якобы думая, что вы даете толчок поисковикам, типа "Ну на же, вот тебе URL, индексируй быстрее". Так не получится.Disallow в WordPress.  Запрещать в CMS WP нужно очень многое. Множество различных плагинов, множество различных настроек и тем, куча скриптов и различных страниц, которые не несут в себе никакой полезной информации. Но я пошел дальше и совсем запретил индексировать все на своем блоге, кроме самих статей (записи) и страниц (об Авторе, Услуги). Я закрыл даже категории в блоге, открою, когда они будут оптимизированы под запросы и когда там появится текстовое описание для каждой из них, но сейчас это просто дубли превьюшек записей, которые не нужны поисковикам. Ну Host и Sitemap стандартные директивы. Только нужно было вынести host отдельно для Яндекса, но я не стал заморачиваться по этому поводу. Вот пожалуй и закончим с Robots.txt для WP.

Как создать robots.txt

Это не так сложно как кажется на первый взгляд. Вам достаточно взять обычный блокнот (Notepad) и скопировать туда данные для вашего сайта по настройкам из этой статьи. Но если и это для вас сложно, в интернете есть ресурсы, которые позволяют генерировать роботс для ваших сайтов:Генератор Robots от pr-cy - Один из самых простых генераторов Robots в Рунете. Просто укажите в инструменте ссылки, которым не стоит попадать в индекс и все.Создание Robots от htmlweb - хороший генератор robots с возможность добавления host и Sitemap.

Где проверить свой robots.txt

Это один из самых важный и обязательных пунктов перед отправкой файла роботс на свой сервер - проверка. Если вы, что-то сделали не правильно, вы можете "похоронить" свой сайт в просторах поисковиков. Обычным ляпом, как это случается, запретить индексацию всего сайта. Чтобы этого не произошло, вам стоит проверить свой файл запретов в одном из удобных проверочных сервисов:Google Webmaster toolЯндекс. ВебмастерНикто не расскажет больше про ваш Robots.txt, как эти товарищи. Ведь именно для них вы и создаете свой "запретный файлик". Теперь поговорим о некоторых мелких ошибках, которые могут быть в robots.
  • "Пустая строка" - недопустимо делать пустую строку в директиве user-agent.
  • При конфликте между двумя директивами с префиксами одинаковой длины приоритет отдается директиве Allow.
  • Для каждого файла robots.txt обрабатывается только одна директива Host. Если в файле указано несколько директив, робот использует первую.
  • Директива Clean-Param является межсекционной, поэтому может быть указана в любом месте файла robots.txt. В случае, если директив указано несколько, все они будут учтены роботом.
  • Шесть роботов Яндекса не следуют правилам Robots.txt (YaDirectFetcher, YandexCalendar, YandexDirect, YandexDirectDyn, YandexMobileBot, YandexAccessibilityBot). Чтобы запретить им индексацию на сайте, следует сделать отдельные параметры user-agent для каждого из них.
  • Директива User-agent, всегда должна писаться выше запрещающей директивы.
  • Одна строка, для одной директории. Нельзя писать множество директорий на одной строке.
  • Имя файл должно быть только таким: robots.txt. Никаких Robots.txt, ROBOTS.txt, и так далее. Только маленькие буквы в названии.
  • В директиве host следует писать путь к домену без http и без слешей. Неправильно: Host: http://www.site.ru/, Правильно: Host: www.site.ru
  • При использовании сайтом защищенного протокола https в директиве host (для робота Яндекса) нужно обязательно указывать именно с протоколом, так Host: https://www.site.ru
Эта статья будет обновляться по мере поступления интересных вопросов и нюансов. С вами был, ленивый Staurus.

10 комментариев

  1. Однозначно, хорошая, подробная статья про robots.txt.

    Для себя прояснил некоторые моменты про директивы Crawl-delay и Clean-param, раньше не приходилось их использовать.

    Станислав, вот один из нюансов! При использовании сайтом защищенного протокола https в директиве host (для робота Яндекса) нужно обязательно указывать именно с протоколом, так Host: https://www.site.ru об этом написано в справке Яндекса

  2. Ну на конец то, хоть кто-то нормально описал все параметры. Большое спасибо.
    Особенно актуально про css и js так как в топе старые статьи в которых не описано про это.
    Хотел уточнить один момент:
    Disallow: */feed/
    Disallow: /?feed=
    Если мы закроем страницы фид, то бот просто не будет "типа" по ним переходить, но он все равно может их взять в индекс. Я сделал это через редиректы.

    RewriteEngine On
    RewriteBase /
    RewriteRule ^index.php$ - [L]
    RewriteRule (.+)/feed /$1 [R=301,L]
    RewriteRule (.+)/?feed= /$1 [R=301,L]
    RewriteRule (.+)/attachment /$1 [R=301,L]
    RewriteRule (.+)/comment-page /$1 [R=301,L]
    RewriteRule (.+)/comments /$1 [R=301,L]
    RewriteRule (.+)/trackback /$1 [R=301,L]
    RewriteCond %{QUERY_STRING} ^attachment_id= [NC]
    RewriteRule (.*) $1? [R=301,L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]

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

    • Да вы правы, роботам все равно на правила в файле, если на страницы ведут ссылки. Особенно если есть беклинк на них.
      Если у вас ничего нет на сайте кроме feed, То можете не изобретать велосипед а сделать так

      Disallow: *feed

    • Здравствуйте! На днях заметил в вебмастере Яндекс добавление в индексе десятка страниц с /feed (комментарии), хотя стоит noindex на таких страницах (плагин Platinum SEO). Блог на WordPress.
      Думал добавить в роботс:
      Disallow: /feed/
      Disallow: */feed

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

      Пожалуйста подскажите! Немного запутался, как лучше сделать

      • Добавьте в роботс, через пару апов выкинет с индекса.

        • Спасибо вам за совет!
          Заметил у вас не приходят уведомления об ответе на комментарии. Чудом заметил

  3. Ха-ха-ха!

    Что за бред!

  4. А действительно ли есть смысл блокировки feed (rss-ленты) в robots.txt? Задавал этот вопрос на форуме Google-вебмастер, работники которого говорят: "rss-ленту лучше не блокировать, т.к. xml-файлы в ней не индексируются и не создают дубли к html-страницам". Так ли это? Что вы думаете? Как к rss-ленте относится Яндекс? Создаются ли дубли?

    • rss.xml не индексируются если правильно настроены.
      Поэтому можете не закрывать их в роботс

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *