Налаштування ЧПУ (семантичні URL) для Bitrix CMS
ЧПУ (человекопонятні URL) — це адреси на зразок /catalog/noutbuki/apple-macbook-pro-14/ замість /catalog/?ID=1234&ELEMENT_ID=5678. Bitrix підтримує ЧПУ для інфоблоків через механізм 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]
Bitrix додає це автоматично при установці, але якщо файл .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 годин.







