Разработка модуля FAQ 1С-Битрикс
Представьте: клиентский каталог содержит 500 вопросов, стандартный bitrix:catalog.list выводит их одним списком, поиск по ответам отсутствует, а аналитика никакая. Пользователь мучительно ищет ответ, не находит и уходит к конкуренту. Мы столкнулись с таким проектом на одном из наших кейсов — интернет-магазин с сотнями вопросов по доставке, оплате и возвратам. Стандартный инфоблок не справлялся: страница загружалась медленно, редактор тратил часы на ручную сортировку, а менеджеры получали десятки одинаковых обращений в чат. Мы разработали специализированный модуль, который решает эти проблемы. Наш опыт работы с Битриксом — более 10 лет и 20+ реализованных проектов. Модуль использует ORM (объектно-реляционное отображение, Wikipedia) для работы с данными и поддерживает полнотекстовый поиск.
Ограничения стандартного инфоблока для FAQ
Инфоблок с полями «вопрос» и «ответ» — быстрое решение, но оно не масштабируется. Основные боли:
- Нет полнотекстового поиска по ответам — поиск Битрикс ищет только по заголовкам страниц.
- Нет группировки по категориям с аккордеоном — все вопросы вывалены одним списком.
- Нет аналитики: какие вопросы ищут, какие не помогают.
- Нет формы «Задать вопрос» прямо на странице.
Кастомный модуль закрывает все эти пробелы. Он включает ORM-модели, AJAX-поиск с подсветкой, голосование, микроразметку и отчёты.
Как мы решаем эти проблемы
Мы строим модуль на ORM Битрикс (QuestionTable, CategoryTable, SearchLogTable). Это даёт строгую типизацию, события и удобную выборку. Поиск реализован через AJAX с фильтрацией по %QUESTION% и %ANSWER%, а для больших нагрузок — полнотекстовый индекс MySQL/PostgreSQL.
Как ускорить поиск при тысяче вопросов?
Стандартный поиск через %LIKE% в MySQL тормозит при 1000+ записей. В модуле мы реализуем два уровня:
-
Быстрый AJAX-поиск — запрос через
QuestionTable::getList()с фильтром%QUESTION%и%ANSWER%(до 1000 записей). -
Полнотекстовый индекс — при переходе на PostgreSQL (или MySQL 5.7+) создаётся колонка
fts_vectorсtsvector, обновляемая триггером. Поиск черезMATCH ... AGAINSTработает в 10 раз быстрееLIKE.
public function search(string $query): array { $query = mb_strtolower(trim($query)); SearchLogTable::add(['QUERY' => $query]); $result = QuestionTable::getList([ 'select' => ['ID', 'QUESTION', 'ANSWER', 'CATEGORY_ID'], 'filter' => [ 'IS_ACTIVE' => 'Y', [ 'LOGIC' => 'OR', '%QUESTION' => $query, '%ANSWER' => $query, ], ], 'limit' => 10, 'order' => ['IS_FEATURED' => 'DESC', 'VIEWS' => 'DESC'], ])->fetchAll(); return array_map(fn($q) => $this->highlight($q, $query), $result); } Что даёт микроразметка Schema.org?
Микроразметка FAQPage (Wikipedia: Schema.org) генерируется автоматически для каждого вопроса. Это позволяет Яндексу и Google выводить ответы прямо в сниппете, увеличивая кликабельность. Реализация — вставка itemscope и itemprop в HTML. Мы интегрировали её в компонент вывода, не требующий дополнительных настроек. Закажите модуль с микроразметкой и получите рост органического трафика.
Что входит в разработку модуля?
| Компонент | Описание |
|---|---|
| ORM-модели | Таблицы категорий, вопросов, голосов, лога поиска |
| AJAX-поиск | Поиск по вопросам и ответам с подсветкой совпадений |
| Аккордеон | Группировка по категориям на чистом CSS, без JS |
| Счётчик просмотров | Инкремент через AJAX |
| Голосование «помогло/не помогло» | Статистика для сортировки и выявления проблемных ответов |
| Форма «Задать вопрос» | Сохранение черновика для публикации |
| Микроразметка Schema.org FAQPage | Генерируется автоматически для всех вопросов |
| Аналитика | Отчёты по пустым поискам, популярным вопросам и негативным голосам |
| Административный интерфейс | Управление категориями, вопросами, просмотр статистики |
Сроки разработки
| Этап | Срок |
|---|---|
| ORM-таблицы, модель категорий и вопросов | 0.5 дня |
| AJAX-поиск с подсветкой | 1 день |
| Аккордеон-компонент, Schema.org | 1 день |
| Счётчики просмотров, голосование | 0.5 дня |
| Форма «задать вопрос» | 0.5 дня |
| Аналитика и отчёты | 1 день |
| Административный интерфейс | 1 день |
| Тестирование | 0.5 дня |
| Итого | 6 рабочих дней |
Подключение полнотекстового поиска через PostgreSQL tsvector добавляет +1 день.
Пример реализации
При открытии вопроса счётчик инкрементируется:
QuestionTable::update($questionId, ['VIEWS' => new \Bitrix\Main\DB\SqlExpression('VIEWS + 1')]); После прочтения пользователь голосует «Это помогло» или «Не помогло». Статистика голосов используется для сортировки (полезные вопросы выше) и для переписывания непонятных ответов.
Аккордеон реализован на details/summary — индексируется поисковиками, не требует JavaScript. При наличии ?q=slug-voprosa секция раскрывается автоматически.
Микроразметка FAQPage генерируется автоматически:
<div itemscope itemtype="https://schema.org/FAQPage"> <div itemscope itemprop="mainEntity" itemtype="https://schema.org/Question"> <h3 itemprop="name">Как оформить возврат?</h3> <div itemscope itemprop="acceptedAnswer" itemtype="https://schema.org/Answer"> <div itemprop="text">Для оформления возврата...</div> </div> </div> </div> Аналитика и отчёты
На основе b_vendor_faq_search_log мы строим отчёты:
- Топ запросов без результатов — что ищут, но не находят.
- Популярные вопросы по просмотрам за период.
- Вопросы с высоким процентом «не помогло».
Эти данные помогают редактору улучшать контент.
Пошаговая реализация полнотекстового поиска
- Создайте колонку
fts_vectorв таблице вопросов. - Напишите триггер, обновляющий
fts_vectorпри вставке/обновлении записи. - Замените
%LIKE%наMATCH ... AGAINSTв методеsearch(). - Настройте релевантность через веса полей (например, вопрос важнее ответа).
- Протестируйте скорость на 10 000 записей.
Почему выбирают нас
- Официальная документация 1С-Битрикс подтверждает лучшие практики, которые мы используем.
- Опыт 10+ лет в разработке на Битрикс и Битрикс24.
- Сертифицированные специалисты — гарантируем качество кода и соблюдение сроков.
- Прозрачный процесс — вы всегда видите статус проекта.
- Поддержка 30 дней после сдачи — бесплатное обучение администраторов.
Оцените ваш проект — свяжитесь с нами для консультации. Рассчитаем стоимость и сроки. Получите персональное предложение уже сегодня.







