Настройка ЧПУ (семантические URL) 1С-Битрикс
ЧПУ (человекопонятные URL) — это адреса вида /catalog/noutbuki/apple-macbook-pro-14/ вместо /catalog/?ID=1234&ELEMENT_ID=5678. Битрикс поддерживает ЧПУ для инфоблоков через механизм URL_TEMPLATES в настройках инфоблока и шаблонах компонентов. Без правильной настройки компоненты генерируют некрасивые URL с параметрами, которые плохо индексируются.
Настройка URL-шаблонов инфоблока
В настройках инфоблока (Контент → Инфоблоки → [инфоблок] → Редактировать) во вкладке «ЧПУ настройки» задаются четыре шаблона:
| Шаблон | Пример |
|---|---|
| Страница элемента | /catalog/#SECTION_CODE_PATH#/#CODE#/ |
| Страница раздела | /catalog/#SECTION_CODE_PATH#/ |
| Список элементов | /catalog/ |
| Страница раздела (тип 2) | (не обязателен) |
#CODE# — символьный код элемента. #SECTION_CODE_PATH# — путь из символьных кодов всех родительских разделов через /. #ID# — числовой ID (хуже для SEO).
Символьные коды (CODE) должны быть заполнены у всех разделов и элементов. При импорте из 1С или Excel они часто не передаются — нужно предусмотреть автогенерацию кода из названия (транслитерация) или принудительную генерацию через скрипт.
Настройка компонентов
Компоненты bitrix:catalog, bitrix:news, bitrix:news.detail и другие инфоблочные компоненты принимают параметр SEF_MODE = Y и набор параметров SEF_URL_TEMPLATES:
$APPLICATION->IncludeComponent('bitrix:catalog', '', [
'IBLOCK_ID' => 5,
'SEF_MODE' => 'Y',
'SEF_FOLDER' => '/catalog/',
'SEF_URL_TEMPLATES' => [
'section' => '#SECTION_CODE_PATH#/',
'element' => '#SECTION_CODE_PATH#/#CODE#/',
'compare' => 'compare/',
],
'VARIABLE_ALIASES' => [
'PAGEN_1' => 'page',
],
]);
SEF_FOLDER — базовый путь компонента. Все URL, которые компонент генерирует, строятся относительно него. VARIABLE_ALIASES позволяет сделать постраничную навигацию более читаемой: /catalog/noutbuki/page/2/ вместо /catalog/noutbuki/?PAGEN_1=2.
Настройка в .htaccess / nginx
ЧПУ работает через перезапись URL на PHP-обработчик. В корне сайта файл .htaccess должен содержать правило RewriteRule, которое перенаправляет все запросы к несуществующим файлам на index.php:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php [L]
Битрикс добавляет это правило автоматически при установке, но если файл .htaccess был перезаписан — правило нужно восстановить.
Для nginx аналогичная конфигурация:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
Автогенерация символьных кодов
При добавлении нового элемента через административную форму символьный код можно сгенерировать автоматически из названия через транслитерацию. В настройках инфоблока Настройки ЧПУ → Автоматически генерировать символьный код. Правила транслитерации настраиваются в Настройки → Настройки продукта → Транслитерация.
Для массового заполнения пустых кодов у существующих элементов:
$res = \CIBlockElement::GetList([], ['IBLOCK_ID' => 5, 'CODE' => false]);
$el = new \CIBlockElement();
while ($item = $res->Fetch()) {
$code = \CUtil::translit($item['NAME'], 'ru', [
'max_len' => 100,
'change_case' => 'L',
'replace_space' => '-',
'replace_other' => '-',
'delete_repeat' => true,
]);
$el->Update($item['ID'], ['CODE' => $code]);
}
Сроки выполнения
Настройка ЧПУ для одного инфоблока (URL-шаблоны, параметры компонента, .htaccess) — 1–2 часа. Если дополнительно нужна массовая генерация символьных кодов и настройка 301-редиректов со старых URL — 3–5 часов.







