Умный фильтр в каталоге 1С-Битрикс обещает выбор по бренду и цене, но без связки настроек покупатель ставит галочку, а список стоит на месте. В корне /catalog/ счетчики - нули, SEO просит уникальные title на filter-URL, а catalog.section затирает meta из epilog. Ниже подключите catalog.smart.filter, настроите ЧПУ в разделе и корне через SHOW_ALL_WO_SECTION, выставите динамические meta по паттерну nuka и закроете SEO-дубли по чек-листу intervolga.
Штатный bitrix:catalog.smart.filter умеет AJAX и ЧПU, но только в связке: фильтр перед catalog.section, фасет для цен, SHOW_ALL_WO_SECTION=Y в корне и urlrewrite для SMART_FILTER_PATH. Meta на filter-URL нельзя финализировать в epilog фильтра - section перезапишет title. Паттерн flt_title через SetPageProperty закрывает базовый SEO; при 15-20 параметрах оставьте в фасете 8-10 реально используемых.
Речь про CMS "1С-Битрикс: Управление сайтом", не про облачный CRM Bitrix24. Базовую сборку магазина сверьте в гайде по интернет-магазину на Bitrix.
Зачем умный фильтр и где ломается SEO
Умный фильтр - блок слева в каталоге: бренд, размер, цвет, цена. Компонент bitrix:catalog.smart.filter готовит условия и передает их catalog.section через arrFilter. SEO-ловушка: каждая комбинация галочек порождает отдельный URL. Без canonical робот копит тысячи страниц с одним title - на практике это часто ломается после включения ЧПU.
| Симптом | Вероятная причина | Что сделать |
|---|---|---|
| Клик не меняет список | Фильтр не в комплексе с catalog | smart.filter перед section; AJAX_MODE в catalog |
| Цена не фильтрует | Нет фасета или неверный PRICE_CODE | Создать фасет; пересчитать после 1С |
| Счетчики 0 в /catalog/ | Нет SHOW_ALL_WO_SECTION=Y | Флаг в filter и section; urlrewrite для корня |
| filter/.../apply/ - 404 | SEF без правила urlrewrite | Правило SMART_FILTER_PATH |
| Title не сохраняется | Meta в epilog фильтра, section затирает | flt_title + применение в section.php |
| Взрыв дублей в Вебмастере | Все комбинации в индексе | Whitelist + canonical/noindex |
Делайте: FILTER_NAME=arrFilter, фильтр перед section. Не делайте: не включайте ЧПU без стратегии индексации filter-URL.
Подключите catalog.smart.filter: свойства и фасетный индекс
catalog.smart.filter стоит перед catalog.section в bitrix:catalog. Фасетный индекс - служебная таблица значений и цен; без него слайдер цены "молчит".
- Убедитесь: smart.filter до section, FILTER_NAME=arrFilter.
- В свойствах инфоблока включите "Показывать в умном фильтре".
- Задайте вид: checkbox для бренда, range для цены.
- Укажите PRICE_CODE - тип цены для слайдера.
- Пересчитайте фасет после обмена с 1С - гайд по интеграции.
- Проверьте счетчики у брендов на витрине.
Делайте: символьные коды свойств до ЧПU. Не делайте: не выводите все свойства карточки в фильтр.
Настройте ЧПU в разделах и в корне каталога
ЧПU (человекопонятный URL) - SEF_MODE=Y. Для раздела SEF_RULE: #SECTION_CODE#/filter/#SMART_FILTER_PATH#/apply/. Правило urlrewrite:
array(
'CONDITION' => '#^/catalog/([^/]+)/filter/(.+?)/apply/#',
'RULE' => 'SECTION_CODE=$1&SMART_FILTER_PATH=$2',
'ID' => 'bitrix:catalog',
'PATH' => '/catalog/index.php',
),
Корень каталога: SHOW_ALL_WO_SECTION
В корне /catalog/ счетчики - нули: фильтр не видит товары без раздела. Параметр SHOW_ALL_WO_SECTION=Y показывает все элементы инфоблока. По nuka и g-rain-design:
- В smart.filter и catalog.section: SECTION_ID=0, SHOW_ALL_WO_SECTION=Y.
- SEF_RULE для корня: /catalog/filter/#SMART_FILTER_PATH#/apply/ (без #SECTION_CODE#).
- В комплексе catalog включите smart_filter_index.
- Добавьте urlrewrite для корневого фильтра.
- Передайте SMART_FILTER_PATH из $_REQUEST, если VARIABLES пустой.
array(
'CONDITION' => '#^/catalog/filter/([a-z0-9_\-\/]+)/apply/#',
'RULE' => 'SMART_FILTER_PATH=$1',
'ID' => 'bitrix:catalog',
'PATH' => '/catalog/index.php',
),
if (!empty($_REQUEST['SMART_FILTER_PATH'])) {
$arParams['SMART_FILTER_PATH'] = $_REQUEST['SMART_FILTER_PATH'];
}
Проверьте /catalog/filter/brand-is-samsung/apply/ - HTTP 200, товары отфильтрованы. Битые URL - гайд по 404.
Делайте: тест пяти filter-URL в разделе и корне. Не делайте: SEF без символьных кодов - после 1С в URL попадут xml_id.
Настройте динамические meta без платного модуля
SetTitle в epilog smart.filter не попадает в HTML: catalog.section перезаписывает meta. Паттерн nuka решает это без маркетплейс-модуля. Intervolga оценивает SEO-доработку фильтра ~100 ч/ч, epilog-паттерн закрывает базовые title для whitelist.
Шаг 1. result_modifier - сохраните выбранные значения:
$arResult['FLT_VALUES'] = [];
foreach ($arResult['ITEMS'] as $item) {
foreach ($item['VALUES'] as $val) {
if ($val['CHECKED']) {
$arResult['FLT_VALUES'][] = $item['NAME'] . ': ' . $val['VALUE'];
}
}
}
$this->getComponent()->SetResultCacheKeys(['FLT_VALUES']);
Шаг 2. component_epilog - запишите во временные свойства:
if (!empty($arResult['FLT_VALUES'])) {
$title = 'Купить ' . implode(', ', $arResult['FLT_VALUES']);
$APPLICATION->SetPageProperty('flt_title', $title);
$APPLICATION->SetPageProperty('flt_description', $title . ' - каталог');
}
Шаг 3. Внизу section.php - после catalog.section:
$fltTitle = $APPLICATION->GetPageProperty('flt_title');
$fltDesc = $APPLICATION->GetPageProperty('flt_description');
if ($fltTitle) {
$APPLICATION->SetPageProperty('title', $fltTitle);
$APPLICATION->SetTitle($fltTitle);
}
if ($fltDesc) {
$APPLICATION->SetPageProperty('description', $fltDesc);
}
На практике типичная ошибка: flt_descr в epilog, а в section.php читают flt_description. Для сотен посадочных - HL-meta через Highload. Пустые комбинации: SetPageProperty("robots", "noindex, follow").
Делайте: curl whitelist-URL, в title должен быть flt_title. Не делайте: SetTitle только в epilog фильтра.
Закройте SEO-дубли по чек-листу intervolga
Гайд intervolga по SEO-ЧПU: штатный фильтр тянет до ~50 000 товаров и ~500 свойств. Стратегия без модуля:
- Whitelist: 10-30 комбинаций с уникальными meta.
- Canonical: нецелевые filter-URL - canonical на раздел.
- Быстрые ссылки: топ-комбинации над фильтром.
- robots.txt: Disallow PAGEN_ и sort в каталоге.
- Закрытие /filter/: при whitelist - Disallow массовые filter-URL.
Базовую SEO сверьте с гайдом по SEO на Bitrix. Делайте: список реально искомых комбинаций. Не делайте: индексация всех filter-URL.
Оптимизируйте производительность при 15-20 параметрах
18 свойств после 1С, каталог отвечает 6-8 с, подрядчик считает 100+ часов. По denisbunakov из 20 параметров активны 8-10. Оптимизация в 2-3 раза дешевле переписки.
| Техника | Эффект |
|---|---|
| Аудит свойств | 8-10 параметров вместо 20 |
| List/HL/Number вместо String | Фасет быстрее |
| LAZY_LOAD счетчиков | Меньше запросов при открытии |
| Пересчет фасета после bulk 1С | Актуальные счетчики |
| Индексы MySQL на prop-таблицы | TTFB с 8-12 с до сотен мс |
Бенчмарк 2dapp: 10 000 товаров, рост свойств 20→50 снижает RPS ~26→~19. Intervolga фиксирует деградацию фасета после 10+ млн записей. Цель: TTFB меньше 2 с без переписки фильтра.
Делайте: выберите 8-10 свойств для фасета, остальные уберите. Не делайте: фасет «на будущее» для каждого поля.
Включите Ajax и пройдите финальный чек-лист
INSTANT_RELOAD=Y обновляет список без F5. AJAX в catalog + INSTANT_RELOAD в smart.filter. После финального чек-листа вы получите фильтр с рабочим AJAX, читаемыми filter-URL и закрытыми SEO-дублями.
- Бренд в фильтре - список без F5.
- Слайдер цены - корректные счетчики.
- filter-URL в разделе и корне - HTTP 200.
- curl -I: canonical или robots на мусорной комбинации.
- curl HTML whitelist-URL: flt_title в title.
- 5 пустых комбинаций - noindex.
- Через 2-4 недели - Вебмастер без взрыва filter-дублей.
Сложный каталог - обсудите на mvmolkov.ru.
Автор: Максим Мольков, Senior-разработчик 1С-Битрикс, 8+ лет.
Источники: dev.1c-bitrix.ru, nuka.ru (ЧПU в корне, epilog-meta), intervolga.ru (SEO-ЧПU), denisbunakov.ru (20 параметров).
Частые вопросы
Как включить умный фильтр в корне каталога без нулевых счетчиков?
SECTION_ID=0 и SHOW_ALL_WO_SECTION=Y в smart.filter и catalog.section. Для ЧПU: SEF_RULE /catalog/filter/#SMART_FILTER_PATH#/apply/, urlrewrite для корня, SMART_FILTER_PATH из $_REQUEST если VARIABLES пустой.
Почему SetTitle в epilog smart.filter не попадает в title?
catalog.section перезаписывает meta. Сохраните flt_title через SetPageProperty в epilog и примените внизу section.php. Проверьте flt_descr vs flt_description.
Как закрыть SEO-дубли filter-URL без платного модуля?
Whitelist 10-30 комбинаций с meta через epilog. Остальным - canonical или noindex. В robots.txt Disallow PAGEN_ и sort; при whitelist - Disallow массовые /filter/.
Сколько параметров фильтра держать в фасете?
Из 15-20 свойств активны 8-10. Остальные уберите из фасета. Типы List, HL, Number вместо String ускоряют фасет.
Когда штатный фильтр начинает тормозить?
До 50 000 товаров штатный фильтр обычно справляется. Деградация при 10+ млн записей фасета и 50+ свойствах на 10 000 SKU. Сначала аудит и пересчет, не переписка.
Это инструкция для облачного CRM или для CMS?
Для "1С-Битрикс: Управление сайтом" с catalog.smart.filter на вашем домене. Bitrix24 - другой продукт без комплекса catalog на сервере.