Настройка FAQ-раздела на 1С-Битрикс
FAQ на Битриксе — это всегда компромисс между простотой управления для редактора и гибкостью отображения для разработчика. Два основных подхода: инфоблок с элементами «вопрос-ответ» или модуль техподдержки support. Для публичного FAQ на сайте инфоблок предпочтительнее.
Инфоблок для FAQ: минимальная структура
Создаёте инфоблок с символьным кодом faq. Свойства элемента:
- Название элемента = вопрос (поле
NAMEвb_iblock_element) - Детальное описание = ответ (поле
DETAIL_TEXT) -
SORT— сортировка вопросов внутри категории -
CATEGORY— свойство типаПривязка к разделудля группировки по темам
Разделы инфоблока (b_iblock_section) служат категориями FAQ — «Доставка», «Оплата», «Гарантия». Это удобнее, чем отдельное свойство-категория, потому что разделы поддерживают вложенность и автоматически фильтруются в компонентах.
Флаг ACTIVE позволяет редакторам временно скрывать вопросы без удаления. Это важно — без него приходится удалять и пересоздавать.
Компонент вывода и accordion
Для списка FAQ оптимален bitrix:news.list с параметром IBLOCK_ID вашего FAQ-инфоблока. Детальные страницы для FAQ обычно не нужны — всё выводится на одной странице в виде аккордеона.
В template.php итерируетесь по $arResult["ITEMS"] и для группировки по категориям используете свойство $arItem["IBLOCK_SECTION_ID"]. Предзагрузите разделы через CIBlockSection::GetList() в component_epilog.php и постройте карту section_id => section_name.
Аккордеон — чистый CSS или минимальный JS. Без jQuery, без библиотек:
document.querySelectorAll('.faq-question').forEach(el => {
el.addEventListener('click', function() {
this.closest('.faq-item').classList.toggle('is-open');
});
});
Состояние открытых вопросов в localStorage — опционально, но полезно для длинных FAQ.
Schema.org разметка для SEO
FAQ — один из немногих типов контента, для которого Google показывает rich results в поиске. Разметка FAQPage добавляет вопросы и ответы прямо в сниппет поисковой выдачи.
В шаблоне компонента генерируете JSON-LD:
$faqSchema = ['@context' => 'https://schema.org', '@type' => 'FAQPage', 'mainEntity' => []];
foreach ($arResult["ITEMS"] as $item) {
$faqSchema['mainEntity'][] = [
'@type' => 'Question',
'name' => $item["NAME"],
'acceptedAnswer' => ['@type' => 'Answer', 'text' => strip_tags($item["DETAIL_TEXT"])]
];
}
echo '<script type="application/ld+json">' . json_encode($faqSchema, JSON_UNESCAPED_UNICODE) . '</script>';
Ограничение Google: не более 20 вопросов в разметке на одной странице. Если FAQ большой — выводите разметку только для верхних 20 элементов по сортировке.
Поиск по FAQ
При большом количестве вопросов нужна фильтрация. Стандартный модуль поиска Битрикса (search) индексирует элементы инфоблоков автоматически — достаточно убедиться, что USE_SEARCH = Y в настройках инфоблока. Компонент bitrix:search.page выведет результаты с ограничением по инфоблоку.
Для мгновенного поиска (без перезагрузки страницы) — фильтруйте по атрибуту data-question через JS прямо в DOM: быстро, без серверных запросов, работает на несколько сотен вопросов без деградации.







