Микроразметка schema.org в 1С-Битрикс

Написал модуль для 1С-Битрикс, который сам собирает JSON-LD граф и Open Graph из массивов компонентов. Отдаёт чистые данные по REST API и ловит SEO-ошибки до индексации.
Marchenkov Alex, Основатель и разработчик mrlexndr.com
Marchenkov AlexОснователь и разработчик

Поисковые роботы и языковые модели вроде ChatGPT или Claude читают сайты иначе, чем люди. Они ищут структурированные данные. Вы можете написать микроразметку руками, но связывать вложенные JSON-LD объекты долго, а одна пропущенная запятая ломает весь код. Я создал модуль mrlexndr.microdata, чтобы автоматизировать эту работу в 1С-Битрикс.

Мой скрипт выдаёт готовый @graph со всеми зависимостями и переводит массивы компонентов в правильную микроразметку. Посмотреть, как выглядит результат на живом проекте, вы можете на сайте pavelrudenko.ru.

Бесплатный модуль лежит в Маркетплейсе 1С-Битрикс. Я подробно задокументировал код, так что любая LLM легко поймет, как вызывать методы и связывать объекты. Вы просто отправляете нейросети файл мануала, и она сама пишет PHP-код, чтобы добавить разметку в любой кастомный шаблон.

Режимы вывода и Headless API

По умолчанию мой алгоритм вставляет тег в секцию на событии OnEpilog. Если вам нужен точечный контроль, переключите настройки на ручной режим и вызовите метод Schema::render() прямо в шаблоне компонента.

Для SPA и мобильных приложений я сделал Headless API, чтобы отдавать чистые данные без привязки к HTML. Метод Schema::toArray() возвращает узлы @graph массивом, а Schema::toJson() отдаёт готовую строку. Я заблокировал HTML-инъекции скрипта в REST и API-запросах, поэтому вы получаете граф исключительно через методы класса.

Автомаппинг: каталог, новости и крошки

Чтобы не собирать поля руками, вы просто передаёте массив $arResult в метод-хелпер. Метод Schema::autoCatalogElement читает данные компонента каталога и формирует сущность Product.

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

Для контентных разделов я написал метод Schema::autoNewsDetail. Он парсит $arResult новостного компонента, находит заголовок, картинки и даты, а затем генерирует сущность Article.

Хлебные крошки собирает метод Schema::autoBreadcrumbs. Он берет глобальную переменную $APPLICATION->arNavChain, нумерует пункты и связывает их с веб-страницей.

Как собрать сущности руками

Иногда автомаппинг не справляется с нестандартными компонентами или сложной логикой данных. Для таких случаев я предусмотрел методы ручного создания сущностей через фабрику Schema. Вы создаете объект, заполняете нужные поля и отправляете его в граф.

Вот так можно собрать статью:


$article = \mrLexndr\Microdata\Schema::article('https://site.ru/blog/post-1/');
$article->setHeadline('Как выбрать сервер');
$article->setAuthor('Иван Иванов');
$article->setDatePublished('2026-05-07');
\mrLexndr\Microdata\Schema::add($article);

А так выглядит код для товара с ценой и наличием:


$product = \mrLexndr\Microdata\Schema::product('https://site.ru/catalog/server-x/');
$product->setName('Сервер X100');
$product->setOffer(150000, 'RUB', 'https://schema.org/InStock');
$product->setBrand('TechCorp');
\mrLexndr\Microdata\Schema::add($product);

Скрипт сам свяжет эти объекты с текущей веб-страницей и организацией.

Open Graph и Twitter Card

Если включить опцию og_active, код начнёт искать на странице главную сущность. Я заложил несколько стратегий в зависимости от типа найденного объекта.

  • Если находит товар — ставит тег og:type="product" и указывает цену с валютой через product:price:amount.
  • Если находит статью — выводит автора и дату публикации.
  • Если находит профиль человека — добавляет profile:username.

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

Глобальные сущности Organization и WebSite

Я вынес настройки в административную панель. Там вы задаете юридическое название, ИНН, ОГРН, адреса офисов и часы работы по дням недели. Расписание я кеширую на сутки, чтобы снизить нагрузку на базу данных.

Я привязал настройки к конкретному сайту по SITE_ID. В многосайтовых конфигурациях вы просто переключаете вкладки и заполняете разные реквизиты для каждого филиала или проекта.

На основе этих настроек скрипт собирает глобальные сущности Organization и WebSite. Если включить опцию поиска, код добавит блок SearchAction. Это выведет поисковую строку прямо в сниппете Google.

SEO-валидатор

Я научил скрипт проверять обязательные поля до того, как он соберет итоговый JSON. У товара алгоритм ищет картинку, название и цену. У статьи — заголовок, автора и дату публикации.

Если вы забыли указать цену товара, скрипт зафиксирует ошибку. Он не покажет алерты пользователям сайта, а запишет предупреждение в системный журнал b_event_log. SEO-специалист откроет лог и увидит точный URL проблемной страницы вместе с названием недостающего поля.

Чтобы расширить логику, я добавил событие OnAfterMicrodataBuild. Оно срабатывает прямо перед сериализацией. Вы можете перехватить реестр в своём коде и удалить или добавить узлы графа на лету.

Комментарии (0)

Пока нет комментариев. Будьте первым!