Как настроить умный фильтр в каталоге 1С-Битрикс: ЧПУ, SEO и без дублей страниц

Как настроить умный фильтр в каталоге 1С-Битрикс: ЧПУ, SEO и без дублей страниц

Умный фильтр в каталоге 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.smart.filter стоит перед catalog.section в bitrix:catalog. Фасетный индекс - служебная таблица значений и цен; без него слайдер цены "молчит".

  1. Убедитесь: smart.filter до section, FILTER_NAME=arrFilter.
  2. В свойствах инфоблока включите "Показывать в умном фильтре".
  3. Задайте вид: checkbox для бренда, range для цены.
  4. Укажите PRICE_CODE - тип цены для слайдера.
  5. Пересчитайте фасет после обмена с 1С - гайд по интеграции.
  6. Проверьте счетчики у брендов на витрине.

Делайте: символьные коды свойств до ЧПU. Не делайте: не выводите все свойства карточки в фильтр.

Настройте ЧП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:

  1. В smart.filter и catalog.section: SECTION_ID=0, SHOW_ALL_WO_SECTION=Y.
  2. SEF_RULE для корня: /catalog/filter/#SMART_FILTER_PATH#/apply/ (без #SECTION_CODE#).
  3. В комплексе catalog включите smart_filter_index.
  4. Добавьте urlrewrite для корневого фильтра.
  5. Передайте 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-дублями.

  1. Бренд в фильтре - список без F5.
  2. Слайдер цены - корректные счетчики.
  3. filter-URL в разделе и корне - HTTP 200.
  4. curl -I: canonical или robots на мусорной комбинации.
  5. curl HTML whitelist-URL: flt_title в title.
  6. 5 пустых комбинаций - noindex.
  7. Через 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 на сервере.

Читайте также

Интеграции с 1С и API
947 6 мин.

Как настроить регистрацию и личный кабинет покупателя на 1С-Битрикс?

Пошаговая настройка регистрации на сайте битрикс: Главный модуль, main.register, system.auth.form и sale.personal.section с историей заказов и 152-ФЗ.
Интеграции с 1С и API
675 15 мин.

Что такое компонент в Битриксе и как он работает

Каждый разработчик, впервые столкнувшийся с Битриксом, проходит через своеобразный обряд посвящения. Вначале кажется, что это просто CMS, где можно поправить HTML в визуальном редакторе или дописать пару строк CSS. Но однажды наступает момент, когда нужно изменить логику вывода новостей, отфильтровать товары по хитрому свойству или добавить на страницу нечто совершенно новое. И тут он впервые слышит это слово — «компонент». Для многих этот момент становится стеной. Система, казавшаяся понятной, вдруг превращается в черный ящик, полный непонятных файлов и странных переменных. Но стоит лишь раз заглянуть под капот, как эта стена рассыпается, превращаясь в набор удивительно логичных и мощных строительных блоков. Понимание компонентов — это тот самый щелчок, после которого разработка на Битрикс из мучения превращается в творчество.

Эта статья — ваш проводник в мир компонентов «1С-Битрикс». Мы не будем сыпать сухими терминами из документации. Вместо этого мы совершим путешествие: от философии, заложенной в эту архитектуру, до мельчайших деталей её работы. Мы разберем компонент на атомы — его файлы, логику, шаблон, параметры — и соберем обратно, чтобы вы не просто знали, что это, но и глубоко понимали, почему это работает именно так. Это знание — ключ к эффективной и профессиональной разработке на Битрикс.

Интеграции с 1С и API
605 2 мин.

Установка Composer в 1С-Битрикс

Установка Composer в проекте на 1С-Битрикс требует учета особенностей платформы, чтобы обеспечить корректную работу и интеграцию с системой.