Справочники, инструменты, документация

Что такое robots.txt и как его настроить

Любой вебмастер должен знать, что такое robots.txt и для чего он нужен, для того чтобы справиться с правильным заполнением этого файла. От правильности его заполнения зависит насколько индексация сайта пройдёт успешно.

Disallow

Директива, которая позволяет блокировать от индексации полностью весь сайт или определённые разделы. Может быть полезно для закрытия от сканирования служебных, динамических или временных страниц (символ # отвечает за комментарии в коде и игнорируется краулерами).

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$
Важно: в robots.txt не нужно закрывать JS и CSS-файлы, они понадобятся поисковым роботом для правильного отображения (рендеринга) контента.

Заблокировать определённые типы файлов

Как упоминалось выше, широко применяются два оператора: и $. В примере астериск указывает на любые символы в названии файла, а оператор $ гарантирует, что расширение .json находится точно в конце адреса, и правило не затрагивает страницы вроде /locations.json.html (вдруг есть и такие).

User-agent: *

# Блокируем любые файлы с расширением .json
Disallow: /*.json$

Заблокировать URL с параметром

Заблокировать URL с параметром ?, после которого следуют GET-запросы (метод передачи данных от клиента серверу). Этот приём активно используется, если у проекта настроено ЧПУ для всех страниц и документы с GET-параметрами точно являются дублями.

User-agent: *

# Блокируем любые URL, содержащие символ ?
Disallow: /*?
Disallow: /*?*id=
Disallow: /*?*op=

Заблокировать результаты поиска, но не саму страницу поиска

User-agent: *

# Блокируем страницу результатов поиска
Disallow: /search.php?query=*

Clean-param

Чтобы не индексировать страницы с динамическими 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