Куда я кладу файл
Имя пишу строчными буквами: robots.txt. Адрес прямой. Сначала протокол и хост, сразу за ними имя файла, без папки посередине. Файл лежит в корне, рядом с главной страницей этого хоста. Робот за правилами приходит именно сюда.
Хост с www и хост без www я считаю разными. Поддомен тоже другой хост, со своим корнем. У каждого свой файл. Правила с основного домена на поддомен сами не переезжают. Смотрю тот хост, на котором открыта страница, и файл беру у него.
Текст, положенный в папку раздела, правилами хоста не становится. Адрес, где перед именем файла стоит папка, робот для обхода сайта не берёт. Я открываю вариант, в котором после хоста сразу идёт robots.txt, и смотрю, что оттуда приходит.
Смотрю живой ответ по адресу файла. Робот читает то, что отдаёт хост. Файл может лежать в корне на хостинге. Его может отдавать и движок, если по этому адресу приходит текст правил. Мне подходит ответ, в котором я вижу сами строки. Если открывается главная или форма входа, по этому адресу правил нет. Страница ошибки тоже не текст правил: сначала добиваюсь, чтобы адрес отдавал сам файл. Если адрес перенаправляет на другой robots.txt, правлю текст на конце перехода.
| Адрес | Что читает робот |
|---|
| https://example.com/robots.txt | Файл этого хоста |
| https://www.example.com/robots.txt | Файл другого хоста |
| https://shop.example.com/robots.txt | Файл поддомена |
| https://example.com/blog/robots.txt | Папка, не корень хоста |
Правила читаются из корня хоста. Файл из папки раздела правилами хоста не служит.
Из чего я собираю строки
Секцию начинаю со строки User-agent. Звёздочка задаёт общие правила. Их читает робот, у которого своей секции нет. Когда одному роботу нужен другой набор, я открываю секцию с его именем и пишу правила там. Яндекс и Google свою секцию с общей не смешивают. Всё, что важно именно этому роботу, в секции со звёздочкой я не оставляю.
Дальше идут запреты и разрешения путей. Disallow называет начало адреса, куда роботу ходить не нужно. Пустой Disallow, когда после директивы пути нет, хост не закрывает: обход остаётся открытым. Строку, в которой путь состоит из одного слэша, я в файл не ставлю. Такой запрет закрывает хост целиком, вместе с публичными страницами и картой.
Allow добавляю, когда внутри уже закрытого пути есть файл, который роботу стоит забрать. Чаще всего это стили и скрипты, из которых на экране собирается страница. Разрешение делаю длиннее запрета: оно указывает на эти файлы и не открывает служебную папку целиком. Если на один адрес подходят и запрет, и разрешение, я рассчитываю на более длинное правило.
Sitemap пишу отдельной строкой. В ней полный адрес карты: протокол, хост и путь. Короткий путь без хоста я в эту строку не ставлю. Карт бывает больше одной, тогда и строк Sitemap больше. Саму карту в Disallow не кладу. Строка карты не отменяет запрет пути. В карту я ставлю адреса, которые роботу можно забирать, и в файле эти адреса не запрещаю.