Карта сайта и robots.txt - генерация, расписание, мультисайт
Разбираемся, откуда берутся sitemap.xml и robots.txt, почему правки в них не
держатся и как настроить пересборку.
Решение
Смотрим, что сайт отдаёт прямо сейчас:
curl -s https://example.org/robots.txt | head -20curl -sI https://example.org/sitemap.xml | head -3ls -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: /*?PAGENSitemap: 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 в админке.
Как сделать в карте полные адреса с доменом?
Заполнить доменное имя в настройках сайта и пересобрать карту. Модуль подставляет протокол и домен из настроек, а при пустом значении оставляет путь от корня.
Как обновлять карту сайта по расписанию?
Настроить периодичность в параметрах карты и перевести агенты на планировщик операционной системы. На посещаемом сайте агент отработает и без этого, но время пересборки будет плавать.
Почему карта разбита на несколько файлов?
Стандарт ограничивает файл пятьюдесятью тысячами адресов, поэтому модуль делает индексный файл и части по инфоблокам. Поисковику отдают именно индексный файл.
Нужна ли карта сайта, если сайт маленький?
Для десятка страниц она почти ничего не меняет, для каталога с тысячами адресов - меняет заметно. Вреда от неё нет, а поиск получает список страниц без обхода всех ссылок.
Смежное
- ЧПУ и SEO комплексного компонента - оглавление подтемы
- Дубли страниц каталога: канонический адрес, фильтр, пагинация - что закрывают от индекса
- ЧПУ комплексного компонента: правила адресов и 404 - откуда берутся сами адреса
- Агенты не выполняются: разбор причин - почему пересборка не запускается
- Код для двух сайтов: текущий сайт, настройки, общие данные - вторая копия файлов при мультисайте
- Региональность магазина: выбор города, цены и склады - карта сайта на региональных поддоменах
- Компоненты 2.0 - устройство компонентов целиком
- Карта сайта неполная или не генерируется: разбор причин - если в файле не все адреса