Поисковые роботы и языковые модели вроде 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)