Карту сайта в 1С-Битрикс строит штатный компонент bitrix.sitemap: он обходит разделы, элементы инфоблоков и статичные страницы, собирает всё в XML по протоколу sitemap.org и пересобирает файл по команде «Запустить» в настройке карты сайта или автоматически, если в настройке включена «Автогенерация». На сайте с одним небольшим каталогом настройка занимает минут пятнадцать, а там, где в каталоге несколько тысяч товаров и работает умный фильтр, в sitemap.xml почти неизбежно попадают дубли из фильтров, пагинации и сортировки, и поисковый робот вместо нужных страниц начинает гонять по мусорным адресам. На практике этим приходится заниматься на любом проекте с каталогом товаров или услуг крупнее пары десятков позиций.
Что делает компонент bitrix.sitemap и где его искать
Компонент bitrix.sitemap.ext входит в модуль поисковой оптимизации и формирует sitemap.xml, а если карта из-за размера разбивается на несколько частей, как того требует протокол sitemap.org с лимитом около 50000 адресов на файл, ещё и индексный файл, который их объединяет. В административной панели генерация живёт в модуле поисковой оптимизации, а не на публичной странице сайта: список настроек генерации карты сайта лежит в разделе Маркетинг > Поисковая оптимизация > Настройка sitemap.xml. У каждой настройки в списке есть действие «Запустить», то есть запуск генерации карты сайта sitemap.xml, и колонка «Последний запуск» с датой и временем последней генерации.
Тут стоит сразу развести два понятия. Карта сайта для людей, обычно html-страница со списком разделов и ссылками, которую видят посетители, и карта сайта для поисковиков в формате XML, файл без оформления, который читают роботы. bitrix.sitemap отвечает именно за второй вариант, тот, что потом подключается в Яндекс.Вебмастере и Google Search Console.
Какие разделы попадают в карту сайта
В настройках компонента для каждого подключённого инфоблока выбирается, включать ли в карту его разделы и элементы и до какой глубины вложенности идти. Отдельно указываются статичные страницы, которые не лежат в инфоблоках: главная, контакты, посадочные страницы акций, юридические документы. Их список либо прописывается вручную в свойствах компонента, либо формируется через карту раздела публичной части, в зависимости от того, как устроен конкретный сайт.
Если на проекте несколько языковых версий или несколько сайтов в одном ядре, под каждый обычно ставят свой экземпляр компонента со своим путём к файлу sitemap.xml. Смешивать в одной карте страницы разных языков протокол формально не запрещает, но и Яндекс.Вебмастер, и Google Search Console читают такие карты хуже, потому что для каждого домена или поддомена сервисы ждут отдельный файл.
Флаг «Показывать элемент на карте сайта»
У каждого элемента инфоблока, товара, статьи, карточки услуги, на вкладке SEO есть отдельный флаг, который управляет попаданием именно этой страницы в sitemap.xml независимо от общих настроек инфоблока. Если флаг снят, страница из карты пропадает, даже когда сам инфоблок в целом подключён к генерации. Этим удобно закрывать от карты позиции, которых временно нет в наличии или которые сняты с продажи, не трогая сам элемент и не убирая его из каталога.
Как подключить sitemap.xml к Яндексу и Google
После того как файл сгенерирован, в robots.txt добавляется строка вида Sitemap: https://site.ru/sitemap.xml с полным адресом, а не относительным путём. Дальше файл подключается отдельно в Яндекс.Вебмастере, в разделе Индексирование → Файлы Sitemap, и в Google Search Console, в разделе Индекс → Файлы Sitemap. Разумно делать и то и другое: строка в robots.txt помогает найти карту любому роботу, а ручная привязка в вебмастерах даёт понятную статистику по тому, сколько адресов из карты реально попало в индекс.
Расписания раз в сутки у генерации нет: карта пересобирается по кнопке «Запустить» в списке настроек, а если в настройке отмечена опция «Автогенерация», карта сайта будет автоматически обновляться при создании, изменении или удалении элементов и разделов инфоблока. Для каталога, где ассортимент меняется редко, хватает и ручного запуска после крупных правок.
Сам факт, что адрес есть в sitemap.xml, не гарантирует индексацию, это подсказка роботу, а не команда. И наоборот, если на странице стоит noindex или она закрыта в robots.txt, включать её в карту сайта бессмысленно и даже вредно: сервисы вебмастеров показывают долю проиндексированных адресов от общего числа в карте, и чем больше там технического мусора, тем хуже выглядит этот процент.
Бесплатный материал
🎁 Полезный скрипт в подарок
Подпишитесь на Telegram - пришлю готовый скрипт по этой теме.
Без спама. Отписка в 1 клик.
Частые причины дублей в карте сайта Битрикса
Дубли в sitemap.xml почти всегда растут не из самого компонента карты, а из того, что происходит в каталоге и фильтре, а bitrix.sitemap просто честно обходит всё, что видит через публичные разделы. На практике чаще всего встречаются такие причины:
- умный фильтр товаров генерирует ЧПУ-адреса под каждую комбинацию свойств, и если разрешить это без ограничений, в карту попадают тысячи почти одинаковых страниц с товарами в разном порядке
- пагинация каталога, адреса вида ?PAGEN_1=2 и ?PAGEN_1=3, создаёт страницы с одинаковым title и почти совпадающим содержимым
- сортировка по цене или по популярности, параметры вида ?sort=price&order=asc, добавляет ещё один слой параметрических дублей той же страницы раздела
- один товар привязан сразу к нескольким разделам каталога, и в карту попадает несколько разных URL на одну и ту же карточку
- версии для печати и адреса с UTM-метками попадают в обход, если фильтрация служебных параметров не настроена
- сайт одновременно открывается по http и https или с www и без www, и по факту существуют две разные карты сайта для двух версий одного домена
Отдельно стоит проверить, не индексируются ли служебные разделы вроде корзины, личного кабинета и внутреннего поиска: они способны генерировать почти бесконечное число параметрических адресов и в карту сайта попадать не должны в принципе.
Как убрать дубли: канонические ссылки, фильтр, robots.txt
Канонические ссылки. У компонентов каталога и детальной страницы товара есть настройка canonical page url, она выводит в head тег link rel canonical с основным адресом страницы, даже если та же страница доступна ещё и через параметры сортировки или фильтра. Тег не убирает лишние адреса из сканирования, но снимает эффект дублирования контента при ранжировании.
Настройки умного фильтра. В компоненте фильтра есть флажок, включающий ЧПУ-адреса для страниц с применённым фильтром, и отдельно можно ограничить, по каким именно свойствам вообще создавать такие SEF-адреса. Практика, которая хорошо работает на моих проектах: оставлять ЧПУ только для тех комбинаций, которые реально приводят трафик, цвет, бренд, размер, а остальные фильтры держать на обычных GET-параметрах, тогда они не участвуют в обходе карты сайта.
Служебные параметры в robots.txt. Строки вида Disallow: /*?PAGEN_1= и Disallow: /*sort= закрывают параметрические дубли от индексации. Это работает в дополнение к каноническим ссылкам, а не вместо них, потому что часть краулеров ориентируется в первую очередь на robots.txt и может проигнорировать canonical на самой странице.
Настройка «Не включать в карту сайта». У раздела инфоблока и у статичной директории есть похожий флаг на вкладке SEO, им закрывают от карты корзину, личный кабинет, поиск и другие разделы, которые не должны индексироваться в принципе, а не только исключаться из обхода компонентом.
Генерация на больших каталогах: где теряется время
На каталоге в пару сотен товаров кнопка «Начать» в мастере карты сайта отрабатывает за секунды. На каталоге в 20-30 тысяч товаров с сотнями разделов та же кнопка в браузере регулярно упирается в лимит времени выполнения PHP-скрипта и обрывается на середине, а файл получается неполным, это и есть самая частая причина, почему новые товары «не попадают» в sitemap.xml.
| Способ запуска генерации | Когда срабатывает | Риск обрыва по таймауту |
|---|---|---|
| Кнопка «Начать» в мастере в админке | Вручную, сразу, в рамках одного HTTP-запроса | Высокий на каталогах от нескольких тысяч товаров |
| Агент (задание по расписанию) | По ядру Битрикса или по внешнему cron, в фоне | Низкий, файл собирается несколькими проходами |
| Пересборка при сохранении карточки товара | При каждом изменении элемента инфоблока | Не годится для большого каталога, лишняя нагрузка на каждое сохранение |
Агент обходит ограничение по времени выполнения именно потому, что не привязан к одному запросу браузера и может продолжать работу на следующих хитах сайта или по внешнему вызову cron. На проектах с крупным каталогом агент обычно ставлю на ночное время, чтобы пересборка карты не совпадала по нагрузке с рабочими часами интернет-магазина. Если нужно проверить, что генерация вообще отрабатывает без ошибок, агент можно запустить вручную из списка агентов в административной панели, не дожидаясь ночного расписания, это удобно сразу после того как поменяли настройки компонента.
После любой пересборки стоит открыть сам файл в браузере и проверить, что он открывается как валидный XML, а не обрывается на середине списка url, и что количество адресов в нём примерно совпадает с количеством активных разделов и товаров в каталоге. Если карта разбита на несколько частей, индексный файл должен перечислять все части, а не только первую, иначе поисковик увидит только часть каталога.
Если каталог большой, а стандартной генерации всё равно не хватает, например нужна частичная пересборка только изменённых разделов или отдельные карты под разные регионы, такими задачами обычно занимаюсь как часть услуги поддержка и доработка 1С-Битрикс (от 3 000 ₽/час): разбираюсь, что именно тормозит генерацию на конкретном проекте, и донастраиваю агент под его каталог.
1С-Битрикс регулярно обновляется, поэтому перед внедрением я сверяюсь с актуальной документацией.
Частые вопросы
Как часто нужно пересобирать карту сайта в Битриксе?
Обычно достаточно того, что агент делает это раз в сутки, ночью. Чаще имеет смысл только на проектах, где каталог обновляется по несколько раз в день, например при массовой синхронизации остатков и цен из внешней учётной системы, тогда интервал агента сокращают до нескольких часов.
Почему новые товары не появляются в sitemap.xml?
Три частые причины: у элемента снят флаг «Показывать на карте сайта» на вкладке SEO, раздел, в котором лежит товар, исключён из генерации в настройках компонента, или предыдущая генерация оборвалась по таймауту и файл остался старым. Последнее проверяется просто, по дате изменения самого файла sitemap.xml на сервере.
Можно ли сделать несколько карт сайта для разных языковых версий или регионов?
Да, под каждую языковую версию или региональный поддомен обычно ставят отдельный экземпляр компонента bitrix.sitemap со своим путём к файлу и подключают его в соответствующем robots.txt. Если версий много, их объединяют в один индексный файл, который просто перечисляет ссылки на остальные карты.
Нужен ли отдельный sitemap для изображений товаров?
В настройках самого компонента bitrix.sitemap отдельного пункта под протокол image sitemap нет, он генерирует обычный список адресов страниц, а не карту изображений. Для большинства интернет-магазинов достаточно того, что страницы с товарными фото и так попадают в обычный sitemap.xml, а изображения на них поисковик находит уже через обход самой страницы.