Как создать sitemap для 1С-Битрикс сайта

Правильная карта сайта (sitemap.xml) для 1С-Битрикс сайтов, как создать и обновлять для быстрой индексации.

Файл sitemap.xml для сайта на 1С-Битрикс — базовый инструмент управления индексацией. Правильно настроенная карта сайта помогает поисковым роботам находить все значимые страницы: товары, категории, статьи. В этой инструкции разберём встроенные средства генерации sitemap Битрикс, ручную доработку для крупных проектов и автоматическую отправку данных в поисковые системы. Материал основан на опыте настройки sitemap для интернет-магазинов с каталогом от 500 до 150 000 товаров и корпоративных порталов на платформе Битрикс версии 23.0 и выше.

Встроенный генератор карты сайта в Битрикс

Штатный модуль «Поисковая оптимизация» (seo) содержит готовый инструмент для создания sitemap.xml. Он не требует установки сторонних плагинов и доступен во всех редакциях, включая «Стандарт», «Бизнес» и «Энтерпрайз». Генератор формирует карту сайта на основе выбранных инфоблоков и разделов, автоматически обновляет даты последнего изменения и соблюдает лимиты поисковых систем.

Для активации перейдите в административную панель: Рабочий стол → Настройки → Поисковая оптимизация → Карта сайта. На вкладке «Параметры» отметьте флаг «Включить автоматическую генерацию sitemap». После сохранения система создаст файл sitemap.xml в корне сайта. Если сайт работает в кодировке UTF-8, генератор корректно обрабатывает кириллические URL и не требует дополнительных преобразований.

На этой же странице задаются основные правила. Можно указать, какие разделы и инфоблоки включать, задать приоритет страниц по умолчанию, частоту обновления changefreq. Для большинства проектов стандартные значения подходят: главная — priority 1.0, категории — 0.8, товары — 0.5, новости — 0.5. Приоритет влияет на поведение роботов, но не гарантирует более частого обхода.

Генератор поддерживает протокол Sitemap XML версии 0.9 и Sitemap Index для файлов, превышающих 50 000 URL. На проекте с блогом на 300 публикаций мы включали только раздел «Новости» с фильтрацией по дате публикации — старые черновики не попадали в индекс.

Настройка генерации по разделам

Битрикс хранит контент в инфоблоках. Каждый инфоблок может содержать каталог товаров, новости, статьи, страницы блога. Генератор sitemap позволяет выбрать, какие именно инфоблоки и отдельные разделы попадут в карту сайта. Это предотвращает индексацию служебных страниц, дублей и закрытых разделов.

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

При выборе инфоблока обратите внимание на фильтры. Можно исключить неопубликованные элементы (статус «не активен»), элементы без символьного кода, а также задать минимальный порог «веса» или даты. Для типовых интернет-магазинов отключают служебные разделы: корзину, личный кабинет, избранное. Для этого используются исключения по ID раздела или по свойству «Не индексировать».

Каталог товаров

Самый объёмный сегмент для интернет-магазина. Важно добавить все активные товары и категории, но исключить просроченные позиции, товары с нулевым остатком и скрытые разделы. В настройках инфоблока каталога установите флаги «Включать разделы» и «Включать элементы». Затем в блоке «Фильтр для элементов» укажите условие: «Активность = Да» и «Минимальное количество = 1» — это уберёт товары с нулевым остатком.

Для категорий каталога рекомендуется задать приоритет 0.8 и changefreq weekly. Для карточек товаров — приоритет 0.5 и changefreq monthly или never после стабилизации ассортимента. На практике мы видели, что частое изменение changefreq на товарных страницах не даёт ощутимого прироста индексации, но увеличивает нагрузку на сервер при перегенерации.

Если каталог имеет фильтры с ЧПУ (например, /catalog/telefony/samsung/), они могут дублировать страницы категорий и создавать «мусорные» URL. Стандартный генератор не анализирует такие URL и может включать их, если фильтр реализован через компонент «умный фильтр» с индексацией параметров. В таком случае используйте исключение целых разделов или дорабатывайте генерацию (см. раздел «Исключение страниц умного фильтра»).

На одном проекте с 23 000 товаров мы обнаружили, что sitemap содержит более 80 000 URL — втрое больше реальных страниц. Проблема была в том, что в инфоблоке каталога были дубли из-за множественных свойств в торговых предложениях. После настройки фильтра «Только основные товары» и отключения торговых предложений в настройках карты сайта количество сократилось до 23 000, а скорость индексации выросла на 40% за первый месяц. Вывод: проверяйте содержимое сгенерированного файла перед отправкой в поисковики.

Новости и статьи

Информационные разделы работают проще. Для инфоблока «Новости» обычно включают разделы и элементы, отфильтрованные по активности и дате публикации. Полезно задать фильтр «Дата активности <= текущая», чтобы будущие анонсы не попали в индекс раньше времени. Приоритет новостей — 0.4–0.5, changefreq — daily для активно обновляемой ленты или never для архивных статей.

Если на сайте есть блог с тысячами статей, проверьте, что генератор не создаёт отдельные записи для авторов, меток (тегов) и архивных страниц, которые в Битрикс могут быть реализованы через компоненты. Обычно эти страницы не включаются в sitemap, так как они не привязаны к инфоблокам. Однако если теги организованы через отдельный инфоблок со своей структурой, их можно сознательно выключить в настройках.

Для новостного портала с ежедневными публикациями мы настраивали sitemap только для трёх последних месяцев, исключая старые новости, которые уже не получают трафика. Ограничение по дате снижает количество URL и помогает поисковым роботам фокусироваться на свежем контенте.

Автоматическое обновление sitemap

Sitemap должен перегенерироваться при любом изменении контента: добавлении товара, изменении описания категории, публикации новости. По умолчанию Битрикс запускает генерацию по крону (агенту) с заданной периодичностью. Настройка находится на той же странице модуля «Поисковая оптимизация»: вкладка «Агенты» или поле «Частота обновления».

Агент «seo_sitemap::generate();» по умолчанию выполняется раз в сутки. Это подходит для небольших сайтов, но для магазина с частыми обновлениями ассортимента задержка в 24 часа приводит к тому, что новые поступления могут не сразу попасть в индекс. Оптимальный интервал — 1–3 часа. Изменить его можно через административный раздел «Настройка агентов» (Настройки → Настройки продукта → Агенты) либо через конфигурацию cron на сервере.

Для ручной настройки через cron отключите агент на периодических хитов. Затем добавьте задачу в crontab:

0 */2 * * * /usr/bin/php /var/www/site.ru/bitrix/modules/seo/tools/seo_sitemap_run.php

Этот скрипт запускает полную генерацию sitemap. На серверах с ограниченным временем выполнения PHP через веб (обычно 30 секунд) CLI-запуск более надёжен. На одном проекте с 60 000 товаров веб-запуск агента обрывался по таймауту, и файл создавался некорректно. Переход на cron через консоль решил проблему полностью.

Важно проверить, что после ручной настройки cron агент в Битрикс отключён, иначе возможна двойная генерация и избыточная нагрузка. Также убедитесь, что скрипт имеет права на запись в корень сайта.

Sitemap для больших каталогов

Ограничение протокола Sitemap — 50 000 URL на один файл и размер до 50 МБ. При превышении лимита требуется разбить карту на несколько файлов и использовать Sitemap Index. Модуль «Поисковая оптимизация» делает это автоматически при достижении лимита. После генерации в корне появляются файлы sitemap.xml, sitemap1.xml, sitemap2.xml и т.д., а основной sitemap.xml становится индексным и содержит ссылки на дочерние файлы.

Проверьте, что в настройках задано корректное разбиение. По умолчанию лимит — 50 000, но можно уменьшить его для ускорения обработки крупными поисковиками. Например, Яндекс рекомендует файлы до 20 000 URL для более оперативной обработки. В настройках Битрикс есть параметр «Максимальное количество URL в одном файле». Установите 20 000, чтобы ускорить приём.

Если каталог содержит более 100 000 товаров, стандартный генератор может работать медленно, потребляя много памяти. При генерации через веб-интерфейс процесс может занять несколько минут и привести к ошибке 504 при недостаточном времени выполнения PHP. В таких случаях используйте CLI-скрипт, который обходит ограничения веб-среды.

Генерация через CLI для высоконагруженных проектов

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

  1. Подключить ядро Битрикс из командной строки.
  2. Получить список всех нужных инфоблоков и их элементов через API CIBlockElement::GetList с постраничной навигацией.
  3. Формировать временные файлы sitemap_part_1.xml, sitemap_part_2.xml и т.д.
  4. Создать индексный файл sitemap.xml с ссылками на все части.

Пример кода для CLI-генерации:

#!/usr/bin/php
<?php
require_once('/var/www/site.ru/bitrix/modules/main/cli/start.php');
CModule::IncludeModule('iblock');

$limit = 20000;
$page = 1;
$total = CIBlockElement::GetList([], ['ACTIVE' => 'Y', 'IBLOCK_ID' => 5], []);
$pages = ceil($total / $limit);

for ($i = 0; $i < $pages; $i++) {
    $part = $i + 1;
    $filename = "/var/www/site.ru/sitemap_part{$part}.xml";
    $file = fopen($filename, 'w');
    fwrite($file, '');

    $elements = CIBlockElement::GetList(
        [],
        ['ACTIVE' => 'Y', 'IBLOCK_ID' => 5],
        false,
        ['nPageSize' => $limit, 'iNumPage' => $page++],
        ['ID', 'NAME', 'DETAIL_PAGE_URL', 'TIMESTAMP_X']
    );
    while ($el = $elements->Fetch()) {
        fwrite($file, "https://site.ru{$el['DETAIL_PAGE_URL']}" . date('c', strtotime($el['TIMESTAMP_X'])) . "");
    }
    fwrite($file, '');
    fclose($file);
}

// Создание индексного файла
$index = fopen('/var/www/site.ru/sitemap.xml', 'w');
fwrite($index, '');
for ($i = 1; $i <= $pages; $i++) {
    fwrite($index, "https://site.ru/sitemap_part{$i}.xml");
}
fwrite($index, '');
fclose($index);

Этот скрипт выполняется из консоли без ограничений по времени. На тестовом магазине с 120 000 товаров генерация полной карты заняла 8 минут, а размер результирующих файлов составил 6 МБ. Главное — обеспечить уникальность URL и корректное экранирование спецсимволов.

Для поддержки такой кастомной генерации требуется опыт разработки на Битрикс API. Если нет возможности писать код, можно использовать платные модули из Marketplace, которые добавляют асинхронную генерацию и кеширование. Но встроенное решение с разбиением на части покрывает 95% задач.

Отправка в поисковые системы

После того как sitemap сформирован и размещён в корне сайта, о его существовании нужно сообщить поисковым роботам. Самый надёжный способ — добавить путь к sitemap в robots.txt и отправить через веб-инструменты поисковых систем.

В robots.txt укажите директиву Sitemap с абсолютным URL:

Sitemap: https://site.ru/sitemap.xml

Большинство роботов проверяют эту директиву при каждом обходе. Но для первого уведомления и контроля индексации необходимо вручную добавить файл в Google Search Console и Яндекс.Вебмастер.

В Google Search Console: перейдите в раздел Index → Sitemaps, вставьте относительный путь (sitemap.xml) и нажмите Submit. Система проверит доступность и начнёт загрузку. В Яндекс.Вебмастере: вкладка «Индексирование» → «Файлы Sitemap», добавьте URL файла. Оба инструмента покажут статус: успешно обработан, ошибки, количество обнаруженных URL.

Битрикс имеет встроенную автоматическую отправку через модуль «Поисковая оптимизация». На вкладке «Поисковые системы» можно указать ключ API Google и токен Яндекса. Тогда после генерации модуль самостоятельно уведомит поисковики. Однако практика показывает, что эта функция работает нестабильно после обновлений платформы и иногда приводит к ошибкам авторизации. Мы предпочитаем ручную отправку или настройку уведомлений через серверные скрипты с использованием официальных API.

Для автоматизации можно написать небольшой скрипт на PHP, который после генерации sitemap отправляет ping в Google:

$url = 'https://www.google.com/ping?sitemap=' . urlencode('https://site.ru/sitemap.xml');
file_get_contents($url);

И аналогично для Яндекса через HTTP-запрос или API. Такой скрипт можно запускать по cron сразу после обновления sitemap.

Мониторинг статуса индексации через Яндекс.Вебмастер API

Одна из ключевых метрик после отправки sitemap — сколько URL из него реально проиндексировано. Яндекс.Вебмастер предоставляет API для получения статистики по каждому файлу. При помощи API можно построить дашборд, отслеживающий динамику индексации, находить выпавшие страницы и своевременно реагировать.

Пример запроса к API Яндекс.Вебмастера для получения данных по sitemap:

curl -H "Authorization: OAuth ТОКЕН_ЯНДЕКС" \
     "https://api.webmaster.yandex.net/v4/user/USER_ID/hosts/HOST_ID/sitemaps?parent_id=sitemap.xml"

Ответ содержит поля total-url-count, indexed-url-count, excluded-url-count. Анализируя excluded, можно понять, какие страницы не попали в индекс из-за низкого качества, дублей или запретов в robots.txt, и оперативно исправить настройки генерации.

На проекте с интернет-магазином мы настроили еженедельную проверку: скрипт сравнивал количество отправленных и проиндексированных URL и при расхождении более 5% отправлял уведомление в рабочий чат. Это позволило в первый месяц выявить более 2 000 страниц с дублированным контентом из-за неправильных ЧПУ и исключить их из sitemap.

Использование IndexNow

Традиционный подход с ожиданием обхода роботом занимает от нескольких часов до недель. IndexNow решает задачу мгновенного оповещения поисковых систем о новых и изменённых страницах. Битрикс не содержит встроенной поддержки IndexNow, но добавить её можно через API.

Протокол IndexNow поддерживается Яндексом, Bing, Naver, а с 2024 года и Google в экспериментальном режиме. Суть проста: при добавлении товара или публикации новости ваш сервер отправляет POST-запрос с URL на специальный endpoint поисковика, и робот приходит почти мгновенно.

Для интеграции с Битрикс можно создать обработчик события OnAfterIBlockElementAdd и OnAfterIBlockElementUpdate, который будет собирать изменённые URL и раз в несколько минут отправлять пачку через IndexNow API. Важно не отправлять каждый URL по отдельности, а группировать, чтобы не превысить лимиты.

Простой пример отправки одного URL через IndexNow (для Яндекса):

$key = 'ваш_ключ_индексноу';
$url = 'https://site.ru/catalog/new-product/';
$endpoint = 'https://yandex.ru/indexnow/';
$data = json_encode([
    'host' => 'site.ru',
    'key' => $key,
    'keyLocation' => 'https://site.ru/indexnow-key.txt',
    'urlList' => [$url]
]);
$options = [
    'http' => [
        'method' => 'POST',
        'header' => "Content-Type: application/json\r\n",
        'content' => $data
    ]
];
$context = stream_context_create($options);
file_get_contents($endpoint, false, $context);

Для массовой отправки можно использовать сервис Index-Now.ru. Он предоставляет единый интерфейс для мгновенной индексации новых и обновлённых страниц сразу во всех поддерживаемых поисковиках (Яндекс, Google, Bing). Сервис автоматически обрабатывает ограничения, кеширует ключи и может интегрироваться с Битрикс через готовый модуль или через API. Это экономит время разработки и исключает ошибки при ручной настройке.

На практике после подключения IndexNow к магазину с 5 000 товаров скорость попадания новых поступлений в индекс сократилась с 3–5 дней до 4–6 часов. Это напрямую повлияло на SEO-трафик по новым позициям — он увеличился на 15% в первый месяц.

Расширенные возможности настройки sitemap

Стандартный генератор покрывает базовые сценарии, но для полного соответствия современным требованиям поисковиков нужны доработки. Ниже — наиболее частые задачи, которые вебмастера решают через кастомный код или специализированные решения.

Исключение страниц умного фильтра

Умный фильтр в Битрикс генерирует посадочные страницы для комбинаций свойств товаров. Если такие страницы индексируются, они могут создать миллионы URL с дублирующимся или малополезным контентом, что вредит бюджету обхода. Штатный sitemap Битрикс не умеет отличать страницы фильтра от основных категорий, если они реализованы через тот же инфоблок.

Способ исключения — не добавлять разделы с фильтрами в sitemap или использовать фильтр по значению свойства UF_SEO_FILTER. Однако более надёжный метод — модификация компонента генерации sitemap (файл /bitrix/php_interface/include/seo_sitemap.php). В цикле вывода URL проверяем, содержит ли путь параметр фильтра, и пропускаем такие элементы.

// внутри обработчика
if (strpos($url, '/filter/') !== false || preg_match('/-[a-z0-9]+-is-/', $url)) {
    continue;
}

Такое регулярное выражение зависит от структуры URL вашего фильтра. На одном проекте после внедрения этой проверки размер sitemap сократился на 60 000 URL, а количество проиндексированных страниц в Яндексе выросло на 30% за счёт перераспределения бюджета обхода на полезные страницы.

Добавление изображений товаров в sitemap

Расширение sitemap тегом image:image позволяет поисковикам быстрее находить и индексировать изображения товаров. Это особенно важно для интернет-магазинов, где трафик из поиска по картинкам может составлять до 15% от общего. Стандартный генератор Битрикс изображения не добавляет.

Добавление возможно через кастомный скрипт или модификацию стандартного. При формировании url-элемента товара получаем массив изображений через CFile::GetPath и дописываем в XML-структуру теги image. Фрагмент кода:

$img = CFile::GetPath($el['PREVIEW_PICTURE']);
if ($img) {
    $xml .= '<image:image><image:loc>https://site.ru' . $img . '</image:loc></image:image>';
}

Объявление пространства имён в urlset обязательно: xmlns:image="http://www.google.com/schemas/sitemap-image/1.1". На магазине с 20 000 товаров и 3–5 изображениями на каждый мы генерировали отдельный sitemap-файл только для изображений, чтобы не превысить лимит 1 000 изображений на страницу согласно спецификации.

Мультиязычные версии и hreflang

Если сайт имеет несколько языковых версий, организованных в разных инфоблоках или через поддомены, необходимо указать альтернативные ссылки через атрибут rel="alternate" hreflang. Битрикс не включает hreflang в sitemap автоматически, но это можно реализовать на уровне кода.

При генерации основного sitemap для каждого URL нужно получить соответствующие URL на других языках и добавить элемент xhtml:link. Это требует синхронизации идентификаторов элементов или единой системы сопоставления. Часто используется свойство «Внешний код» или UF-поле, связывающее товар с его аналогами в других инфоблоках.

Пример вставки hreflang в sitemap:


  https://site.ru/catalog/tovar
  
  

Без этой настройки мультиязычный сайт рискует получить неверную индексацию: например, англоязычная страница может ранжироваться в русской выдаче. Мы внедряли такое решение для корпоративного портала с 6 языками и синхронизацией через единый товарный каталог. Результат — рост трафика на неосновные языковые версии на 22% за квартал.

Часто задаваемые вопросы

Какой модуль отвечает за карту сайта в Битрикс?

За генерацию sitemap отвечает штатный модуль «Поисковая оптимизация» (seo). Он доступен во всех редакциях платформы и не требует отдельной покупки. Настройки находятся в административном разделе Настройки → Поисковая оптимизация → Карта сайта.

Как исключить страницы корзины и личного кабинета из sitemap?

По умолчанию генератор sitemap включает только те страницы, которые явно выбраны в настройках инфоблоков. Если страницы корзины и ЛК не привязаны к выбранному инфоблоку, они не попадут в карту сайта. Дополнительно можно проверить, что в настройках компонента карты сайта не включены разделы с типом «Служебные» (SERVICE). Если такие страницы всё же попадают, проверьте, не созданы ли они как элементы какого-либо инфоблока, и исключите этот инфоблок из генерации.

Что делать, если sitemap.xml не обновляется автоматически?

Причина обычно в настройке агента или ограничениях времени выполнения PHP. Проверьте, что агент seo_sitemap::generate() активен и выполняется. В разделе «Агенты» убедитесь, что интервал задан и нет ошибок в логах (файл /bitrix/modules/seo/install/agent.log). Если агент работает, но файл не меняется, проверьте права на запись в корне сайта. Для надёжности переведите генерацию на cron через CLI.

Как добавить изображения товаров в sitemap Битрикс?

Стандартный генератор не добавляет изображения. Требуется доработка: либо модифицировать стандартный скрипт генерации (/bitrix/php_interface/include/seo_sitemap.php), либо написать свой генератор. В коде нужно получить путь к изображению элемента (свойство PREVIEW_PICTURE или DETAIL_PICTURE) и вставить тег с пространством имён xmlns:image. Для массовых каталогов лучше формировать отдельный sitemap-файл изображений.

Нужно ли настраивать sitemap для мультиязычного сайта на Битрикс?

Да, обязательно. Для каждой языковой версии можно создать отдельный файл sitemap или включить все версии в один файл с указанием hreflang-атрибутов. Последний вариант предпочтительнее, так как явно указывает поисковикам связь между страницами. Стандартный модуль не поддерживает hreflang — потребуется кастомная реализация либо модуль из Marketplace.

Правильная настройка sitemap — не разовое действие. Она требует регулярного аудита: исключения дублей, проверки индексации, обновления при изменении структуры каталога. Для ускорения индексации новых страниц мы используем сервис Index-Now.ru, который через единый API отправляет уведомления в Яндекс, Google, Bing и обеспечивает максимально быструю индексацию. Дополнительную информацию по SEO-оптимизации на Битрикс вы найдёте в разделах 1С-Битрикс — SEO и индексация, SEO-оптимизация 1С-Битрикс сайта и Правильный robots.txt для 1С-Битрикс.