Любой вебмастер должен знать, что такое robots.txt и для чего он нужен, для того чтобы справиться с правильным заполнением этого файла. От правильности его заполнения зависит насколько индексация сайта пройдёт успешно.
Директива, которая позволяет блокировать от индексации полностью весь сайт или определённые разделы. Может быть полезно для закрытия от сканирования служебных, динамических или временных страниц (символ #
отвечает за комментарии в коде и игнорируется краулерами).
User-agent: *
# Закрываем раздел /cms и все файлы внутри
Disallow: /cms
# Закрываем папку /images/resized/ (сами изображения разрешены к сканированию)
Disallow: /api/resized/
# Запретить GET параметр view:
Disallow: *view=*$
# Запретить все GET параметры:
Disallow: /*?
# Запретить http://example.com/page и все дочерние страницы:
Disallow: /page/
# Запретить страницу http://example.com/page, но не дочерние:
Disallow: /page/$
# Запрет индексирования php файлов:
Disallow: /*.php$
# Запретить индексирование pdf файлы:
Disallow: /*.pdf$
# Не индексировать UTM-метки:
Disallow: /*?utm_source*
*
— любая последовательность символов в URL. По умолчанию к концу каждого правила, описанного в файле robots.txt, приписывается спецсимвол *.
$
— символ в конце URL-адреса, он используется чтобы отменить использование * на конце правила.
User-agent: *
# Закрываем URL, начинающиеся с /photo после домена. Например:
# /photos
# /photo/overview
Disallow: /photo
# Закрываем все URL, начинающиеся с /blog/ после домена и заканчивающиеся /stats/
Disallow: /blog/*/stats$
Как упоминалось выше, широко применяются два оператора: и $. В примере астериск указывает на любые символы в названии файла, а оператор
$
гарантирует, что расширение .json находится точно в конце адреса, и правило не затрагивает страницы вроде /locations.json.html (вдруг есть и такие).
User-agent: *
# Блокируем любые файлы с расширением .json
Disallow: /*.json$
Заблокировать URL с параметром ?
, после которого следуют GET-запросы (метод передачи данных от клиента серверу). Этот приём активно используется, если у проекта настроено ЧПУ для всех страниц и документы с GET-параметрами точно являются дублями.
User-agent: *
# Блокируем любые URL, содержащие символ ?
Disallow: /*?
Disallow: /*?*id=
Disallow: /*?*op=
User-agent: *
# Блокируем страницу результатов поиска
Disallow: /search.php?query=*
Чтобы не индексировать страницы с динамическими GET параметрами (сортировки, сессии и т.д.) Яндекс ввел директиву Clean-param которая сводит такие адреса к одному. Также директиву следует выносить в отдельный блок. В robots.txt указывается имя GET переменной которая будет игнорироваться и через пробел адрес страницы которая будет использована. Например для следующих адресов:
http://example.com/category
http://example.com/category?sort=asc
http://example.com/category?sort=desc
Запись будет следующая:
User-agent: Yandex
Clean-param: sort /category
# Можно указать несколько GET переменных через символ &:
User-agent: Yandex
Clean-param: sort&session /category
Допустим, на вашем сайте есть 3 страницы с одинаковым содержанием:
http://site.ru/folder/page.php?get=1&r_id=985
http://site.ru/folder/page.php?get=2&r_id=985
http://site.ru/folder/page.php?get=3&r_id=985
Все эти страницы одинаковые по содержимому, но они имеют в своем URL разный параметр get=
, который в данном случае применяется для отслеживания сайта, с которого пользователь сделал запрос и перешел на страницу. Получается, что он меняет URL, но содержимое остается таким же, поэтому все три URL-адреса ведут на ту же страницу http://site.ru/folder/page.php?r_id=985
.
Во избежание обхода роботов всех трех страниц, в robots.txt нужно прописать Clean-param:
User-agent: *
Disallow:
Clean-param: get /folder/page.php
Данные инструкции указывают всем роботам поисковых систем объединить все URL страницы к единой ссылке: http://site.ru/folder/page.php?r_id=985
Для адресов типа www.site1.ru/forum/showthread.php?s=681498b9648949605&t=8243
и www.site1.ru/forum/showthread.php?s=1e71c4427317a117a&t=8243
robots будет содержать:
User-agent: *
Disallow:
Clean-param: s /forum/showthread.php
Для адресов типа www.site2.ru/index.php?page=1&sid=2564126ebdec301c607e5df
и www.site2.ru/index.php?page=1&sid=974017dcd170d6c4a5d76ae
robots будет содержать:
User-agent: *
Disallow:
Clean-param: sid /index.php
Если таких параметров несколько www.site1.ru/forum_old/showthread.php?s=681498605&t=8243&ref=1311
и www.site1.ru/forum_new/showthread.php?s=1e71c417a&t=8243&ref=9896
robots будет содержать:
User-agent: *
Disallow:
Clean-param: s&ref /forum*/showthread.php
Если параметр используется в нескольких скриптах www.site1.ru/forum/showthread.php?s=681498b9648949605&t=8243
и www.site1.ru/forum/index.php?s=1e71c4427317a117a&t=8243
robots будет содержать:
User-agent: *
Disallow:
Clean-param: s /forum/index.php
Clean-param: s /forum/showthread.php