Назад

Установка meta description из детального текста в Битрикс

Главная
Блог
Установка meta description из детального текста в Битрикс

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

К счастью, в Битрикс можно автоматизировать этот процесс. В этой статье вы узнаете, как программно извлечь первый осмысленный абзац из описания элемента и использовать его в качестве качественного meta description. Это не только сэкономит вам время, но и улучшит SEO-показатели сайта.

Зачем это нужно? Проблема пустых meta description

Meta description — это краткий анонс страницы в результатах поиска Google и Яндекс. Это ваша визитная карточка, которая напрямую влияет на решение пользователя перейти на сайт.

Проблема: Во встроенных настройках SEO Битрикс (SEO для страниц) можно задать описание вручную. Но если оставить поле пустым, система может:

  • Вообще не вывести тег description.

  • Подставить случайный фрагмент текста со страницы, который часто выглядит несвязным и нерелевантным.

Решение: Автоматически генерировать description из первого абзаца контента. Как правило, именно он содержит самую важную и сжатую информацию о странице.

Как выглядит meta description?

Этот тег размещается внутри секции <head> вашей HTML-страницы и выглядит так:

<meta name="description" content="Магазин подержанных автомобилей с пробегом в Москве. Гарантия юридической чистоты и технической исправности. Полный отчет по истории авто." />

Практическая реализация: Код и пояснения

Представленный ниже код следует разместить в шаблоне вашей детальной страницы, например, в файле template.php компонента news.detail или catalog.element.

Полный код с комментариями:

<?
// Получаем ID текущего элемента
$elementId = $arResult['ID'];

// Если DETAIL_TEXT недоступен сразу в $arResult, загружаем элемент через API
if (empty($arResult['DETAIL_TEXT'])) {
    $res = CIBlockElement::GetByID($elementId);
    if ($ar_res = $res->GetNext()) {
        $DETAIL_TEXT = $ar_res['DETAIL_TEXT'];
    }
} else {
    $DETAIL_TEXT = $arResult['DETAIL_TEXT'];
}

// Если текст найден, обрабатываем его
if (!empty($DETAIL_TEXT)) {
    
    // 1. Очищаем текст от HTML-тегов и преобразуем HTML-сущности обратно в символы
    $cleanText = htmlspecialchars_decode(strip_tags($DETAIL_TEXT));
    
    // 2. Извлекаем первое предложение (разбиваем по точке)
    $firstSentenceArray = explode('.', $cleanText, 2);
    $firstSentence = trim($firstSentenceArray[0]);
    
    // 3. Добавляем точку в конец, если предложение не пустое и не заканчивается на знак препинания
    if (!empty($firstSentence) && !punct::isPunct(mb_substr($firstSentence, -1))) {
        $firstSentence .= '.';
    }
    
    // 4. Дополнительная очистка от кавычек, которые могут "сломать" верстку тега
    $firstSentence = str_replace(['«', '»', '"', '&laquo;', '&raquo;'], '', $firstSentence);
    
    // 5. Обрезаем до 160 символов (рекомендуемая длина для Google)
    $firstSentence = TruncateText($firstSentence, 160);
    
    // 6. Устанавливаем очищенное и обрезанное предложение как meta description
    if (!empty($firstSentence)) {
        $APPLICATION->SetPageProperty("description", $firstSentence);
    }
}
?>

Пояснения к шагам:

  1. Получение текста: Сначала пытаемся взять текст из $arResult, если его там нет — загружаем элемент через CIBlockElement::GetByID.

  2. Очистка: strip_tags() удаляет всю HTML-разметку, а htmlspecialchars_decode() превращает сущности вроде &amp; обратно в символ &.

  3. Извлечение предложения: explode('.', $cleanText, 2) разбивает текст на две части: первое предложение и все остальное. Это эффективнее, чем разбивать весь текст на массив.

  4. "Умное" добавление точки: Проверяем, не заканчивается ли предложение само на знак препинания, чтобы не получить две точки подряд.

  5. Очистка кавычек: Кавычки в атрибуте content могут его преждевременно закрыть, поэтому их лучше удалить.

  6. Обрезка до 160 символов: Важный SEO-момент. Поисковые системы обрезают слишком длинные описания. Функция TruncateText() в Битрикс обрезает строку, не разрывая слова.

Важные замечания

  • Приоритет настроек: Помните, что если description задан вручную в SEO-настройках страницы элемента или в свойствах инфоблока, он будет иметь приоритет. Данный код работает только тогда, когда эти поля пусты.

  • Проверка на анонс: Для некоторых элементов DETAIL_TEXT может быть пустым. Вы можете добавить проверку и использовать PREVIEW_TEXT в качестве запасного варианта.

  • Качество контента: Алгоритм не заменяет собой вдумчивого копирайтинга. Убедитесь, что первые предложения ваших статей или описаний товаров действительно являются кратким и информативным саммари.

  • Альтернатива для сложных случаев: Иногда первое предложение может быть нерелевантным (например, "Уникальный товар премиум-класса!"). Для более гибкого управления можно создать отдельное свойство инфоблока (например, "SEO-описание") и выводить его, а если оно пустое — то уже применять автоматическое формирование.

Заключение

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

Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Читайте по теме
Все статьи
Нужен надежный исполнитель?
Разрабатываем сайты, выполняем миграцию на Битрикс, дорабатываем функционал, сопровождаем проекты, а также занимаемся поисковым продвижением и комплексным маркетингом
Получить консультацию
Все статьи