Николаев Виталий
Блог веб-разработчика: Битрикс, PHP, Python, Linux и SEO
Битрикс Битрикс
18.06.2026

Почему DETAIL_PAGE_URL в Битрикс возвращает ссылку без раздела и как это исправить

При работе с 1С-Битрикс многие разработчики сталкиваются с неожиданным поведением свойства DETAIL_PAGE_URL. Казалось бы, если в настройках инфоблока указан шаблон вида:

#SECTION_CODE_PATH#/#ELEMENT_CODE#/

то при получении ссылки на элемент через API можно ожидать URL вроде:

/catalog/noutbuki/macbook-air-m4/

Однако на практике часто оказывается, что DETAIL_PAGE_URL возвращает только URL элемента без раздела:

/macbook-air-m4/

Из-за этого возникают ошибки в хлебных крошках, перелинковке, sitemap и шаблонах компонентов.

Проверяем, задан ли символьный код раздела

Если в URL элемента должен использоваться #SECTION_CODE# или #SECTION_CODE_PATH#, первым делом стоит убедиться, что у раздела вообще задан символьный код.

Для этого откройте нужный раздел инфоблока и перейдите на вкладку «Дополнительно». Если поле «Символьный код» пустое, заполните его вручную.

Символьный код раздела в 1С-Битрикс

Чтобы не заполнять это поле вручную при создании новых разделов, можно включить автоматическую генерацию символьного кода в настройках инфоблока.

Настройка автозаполнения символьного кода в инфоблоке

После включения этой настройки символьный код будет автоматически формироваться для новых разделов. Однако для уже существующих разделов и элементов автозаполнение не сработает — их символьные коды потребуется задать вручную.

Если символьный код раздела отсутствует, макросы #SECTION_CODE# и #SECTION_CODE_PATH# не смогут быть подставлены в URL, и в результате DETAIL_PAGE_URL может формироваться без раздела или вовсе некорректно.

Почему DETAIL_PAGE_URL работает «не так»?

Свойство DETAIL_PAGE_URL не формируется автоматически на основе текущего раздела. Битрикс подставляет значения только из тех полей, которые присутствуют в выборке.

Например, если выполнить запрос:

$res = CIBlockElement::GetList(
    [],
    ['IBLOCK_ID' => 2],
    false,
    false,
    ['ID', 'NAME', 'DETAIL_PAGE_URL']
);

то можно получить ссылку:

/macbook-air-m4/

потому что в запросе отсутствует информация о разделе.

Проблема с SECTION_CODE

Многие ожидают, что Битрикс автоматически определит раздел элемента и подставит его в URL. Но это работает не всегда.

Особенно часто проблема проявляется, если:

  • элемент привязан к нескольким разделам;
  • используется выборка через CIBlockElement::GetList();
  • запрос выполняется вне компонентов Битрикс;
  • элемент находится в дополнительном разделе;
  • используется собственный шаблон ЧПУ.

Как правильно получать URL элемента

Лучше сразу запрашивать данные о разделе:

$res = CIBlockElement::GetList(
    [],
    ['IBLOCK_ID' => 2],
    false,
    false,
    [
        'ID',
        'NAME',
        'DETAIL_PAGE_URL',
        'IBLOCK_SECTION_ID'
    ]
);

А ещё надёжнее использовать метод:

CIBlock::ReplaceDetailUrl(
    $arElement['DETAIL_PAGE_URL'],
    $arElement,
    true,
    'E'
);

Он принудительно заменяет макросы и формирует итоговую ссылку.

Если элемент находится в нескольких разделах

В этом случае Битрикс не всегда может однозначно определить, какой именно путь использовать.

Например:

  • Каталог → Ноутбуки → MacBook Air M4;
  • Акции → Скидки → MacBook Air M4.

Один и тот же элемент может иметь несколько путей, поэтому поле DETAIL_PAGE_URL не содержит информации о разделе.

Если необходимо получать полный URL, рекомендуется использовать привязку к основному разделу или самостоятельно получать SECTION_CODE_PATH.

Частая ошибка в шаблонах компонентов

Многие разработчики выводят ссылки так:

<a href="<?=$arItem['DETAIL_PAGE_URL']?>">
    <?=$arItem['NAME']?>
</a>

А затем удивляются, почему ссылки ведут не туда или работают только на части сайта.

Если компонент не получил поле SECTION_CODE_PATH, то ссылка может оказаться неполной.

Как правильно настроить ЧПУ инфоблока

В настройках инфоблока желательно использовать:

URL страницы раздела:

#SITE_DIR#/catalog/#SECTION_CODE_PATH#/

URL детальной страницы:

#SITE_DIR#/catalog/#SECTION_CODE_PATH#/#ELEMENT_CODE#/

При использовании комплексных компонентов эти настройки позволяют строить логичную структуру адресов.

Когда DETAIL_PAGE_URL можно доверять

Обычно проблем не возникает, если:

  • элемент находится только в одном разделе;
  • используются стандартные компоненты Битрикс;
  • в выборку попадает SECTION_CODE_PATH;
  • не используется многосайтовость и сложные ЧПУ.

Вывод

Поле DETAIL_PAGE_URL в 1С-Битрикс не всегда возвращает готовую ссылку, которую ожидает разработчик. Оно зависит от настроек инфоблока, выбранных полей и структуры разделов.

Если ссылки формируются неправильно, стоит проверить наличие SECTION_CODE_PATH, настройки ЧПУ и способ получения данных. В сложных проектах безопаснее самостоятельно формировать URL или использовать CIBlock::ReplaceDetailUrl(), чем слепо доверять содержимому DETAIL_PAGE_URL.


187 просмотров

Если возникли сложности

Помогу разобраться с настройкой, исправить ошибки и реализовать решение под ваш проект.

Доработка сайта на 1С Битрикс

Доработка сайта на 1С Битрикс — это добавление функционала, исправление ошибок, интеграции с CRM и оптимизация работы сайта. 

Повышает удобство для пользователей и эффективность бизнеса.

Подробнее
Где заказы?

Почему один сайт стабильно приносит заявки, а другой годами просто «висит в интернете»?

В телеграм-канале «Где заказы?» я разбираю реальные ошибки бизнеса, SEO, сайты, рекламу, воронки продаж и показываю, почему компании теряют клиентов и как это исправить.

Без инфоцыганства и мотивационных цитат — только практика, кейсы и рабочие решения для бизнеса и веб-разработки.

Комментарии

Где заказы?
Почему у одних компаний очередь из клиентов, а у других пустой сайт и тишина?
Телеграм канал «Где заказы?» — про продажи, сайты и ошибки бизнеса на реальных примерах. Подписаться