Перейти к содержимому

Карта сайта и robots.txt - генерация, расписание, мультисайт

Разбираемся, откуда берутся sitemap.xml и robots.txt, почему правки в них не держатся и как настроить пересборку.

Решение

Смотрим, что сайт отдаёт прямо сейчас:

Окно терминала
curl -s https://example.org/robots.txt | head -20
curl -sI https://example.org/sitemap.xml | head -3
ls -l $DOCROOT/sitemap*.xml # дата файла = когда карта пересобиралась

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

Задаём адрес сайта для абсолютных ссылок:

$site = \Bitrix\Main\SiteTable::getRow([
'filter' => ['=LID' => SITE_ID], 'select' => ['SERVER_NAME'],
]);
echo $site['SERVER_NAME'] ?: 'домен не задан';
echo \Bitrix\Main\Config\Option::get('main', 'server_name'); // общий адрес установки

Пустое доменное имя даёт в карте адреса вида /catalog/, а поисковикам нужны полные. Домен берут из настроек сайта, а при их отсутствии - из общей настройки главного модуля.

Проверяем шаблоны адресов инфоблока:

$iblock = \Bitrix\Iblock\IblockTable::getRow([
'filter' => ['=CODE' => 'catalog', '=IBLOCK_TYPE_ID' => 'catalog'],
'select' => ['ID', 'LIST_PAGE_URL', 'SECTION_PAGE_URL', 'DETAIL_PAGE_URL'],
]);
print_r($iblock); // карта собирает адреса по этим шаблонам, а не по правилам обработки

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

Держим правила в модуле, а не в файле:

User-agent: *
Disallow: /bitrix/
Disallow: /*?PAGEN
Sitemap: https://example.org/sitemap.xml
# правку файла руками перетрёт ближайшая генерация карты сайта

Правила хранятся в базе, а файл - лишь их отпечаток. Поэтому редактируют правила в разделе поисковой оптимизации: правка файла в редакторе живёт до первой пересборки и исчезает без предупреждения.

Проверяем, что пересборка идёт по расписанию:

Окно терминала
grep -c "<url>" $DOCROOT/sitemap_iblock_12.xml # адресов в этой части карты
grep -c "<loc>" $DOCROOT/sitemap.xml # частей в индексном файле
crontab -l | grep cron_events # агенты идут по расписанию, а не по хитам

Карта пересобирается агентом, а агент на малопосещаемом сайте не запускается неделями. Если карта нужна свежей, агенты переводят на расписание операционной системы.

Карта разбивается на части, и это нормальное поведение модуля, а не сбой. Индексный файл перечисляет части, каждая часть держит адреса одного инфоблока или раздела структуры; ограничение стандарта - пятьдесят тысяч адресов на файл.

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

Типичные проблемы

Удалённый robots.txt появляется снова через день.

В настройках карты сайта включено добавление правила в robots.txt после генерации. Файл создаёт сама генерация карты сайта, поэтому удаление его ничего не решает.

Правки robots.txt пропали после перегенерации карты.

Правила хранит модуль поисковой оптимизации, а файл он перезаписывает целиком. Править нужно правила в разделе поисковой оптимизации, а не сам файл в корне.

В карте относительные адреса без домена.

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

Адреса в карте не совпадают с адресами сайта.

Шаблоны адресов в настройках инфоблока отличаются от фактических ссылок. После правки шаблонов адресов карту пересобирают заново, иначе в ней останутся старые.

Карта не обновлялась несколько недель.

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

На поддомене отдаётся карта основного сайта.

Поддомен не заведён отдельным сайтом, и своей карты у него нет. Файл отдают правилом веб-сервера либо заводят второй сайт.

Частые вопросы

Почему не обновляется robots.txt, хотя файл правили?

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

Как сделать в карте полные адреса с доменом?

Заполнить доменное имя в настройках сайта и пересобрать карту. Модуль подставляет протокол и домен из настроек, а при пустом значении оставляет путь от корня.

Как обновлять карту сайта по расписанию?

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

Почему карта разбита на несколько файлов?

Стандарт ограничивает файл пятьюдесятью тысячами адресов, поэтому модуль делает индексный файл и части по инфоблокам. Поисковику отдают именно индексный файл.

Нужна ли карта сайта, если сайт маленький?

Для десятка страниц она почти ничего не меняет, для каталога с тысячами адресов - меняет заметно. Вреда от неё нет, а поиск получает список страниц без обхода всех ссылок.

Смежное

Первоисточник