Ручное заполнение мета-тегов для сотен товаров или статей на сайте — трудоемкая и неблагодарная задача. Часто это приводит к пустым или неинформативным описаниям, что негативно сказывается на кликабельности в поисковой выдаче.
К счастью, в Битрикс можно автоматизировать этот процесс. В этой статье вы узнаете, как программно извлечь первый осмысленный абзац из описания элемента и использовать его в качестве качественного 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(['«', '»', '"', '«', '»'], '', $firstSentence);
// 5. Обрезаем до 160 символов (рекомендуемая длина для Google)
$firstSentence = TruncateText($firstSentence, 160);
// 6. Устанавливаем очищенное и обрезанное предложение как meta description
if (!empty($firstSentence)) {
$APPLICATION->SetPageProperty("description", $firstSentence);
}
}
?>Пояснения к шагам:
-
Получение текста: Сначала пытаемся взять текст из
$arResult, если его там нет — загружаем элемент черезCIBlockElement::GetByID. -
Очистка:
strip_tags()удаляет всю HTML-разметку, аhtmlspecialchars_decode()превращает сущности вроде&обратно в символ&. -
Извлечение предложения:
explode('.', $cleanText, 2)разбивает текст на две части: первое предложение и все остальное. Это эффективнее, чем разбивать весь текст на массив. -
"Умное" добавление точки: Проверяем, не заканчивается ли предложение само на знак препинания, чтобы не получить две точки подряд.
-
Очистка кавычек: Кавычки в атрибуте
contentмогут его преждевременно закрыть, поэтому их лучше удалить. -
Обрезка до 160 символов: Важный SEO-момент. Поисковые системы обрезают слишком длинные описания. Функция
TruncateText()в Битрикс обрезает строку, не разрывая слова.
Важные замечания
-
Приоритет настроек: Помните, что если description задан вручную в SEO-настройках страницы элемента или в свойствах инфоблока, он будет иметь приоритет. Данный код работает только тогда, когда эти поля пусты.
-
Проверка на анонс: Для некоторых элементов
DETAIL_TEXTможет быть пустым. Вы можете добавить проверку и использоватьPREVIEW_TEXTв качестве запасного варианта. -
Качество контента: Алгоритм не заменяет собой вдумчивого копирайтинга. Убедитесь, что первые предложения ваших статей или описаний товаров действительно являются кратким и информативным саммари.
-
Альтернатива для сложных случаев: Иногда первое предложение может быть нерелевантным (например, "Уникальный товар премиум-класса!"). Для более гибкого управления можно создать отдельное свойство инфоблока (например, "SEO-описание") и выводить его, а если оно пустое — то уже применять автоматическое формирование.
Заключение
Предложенный метод — это простой и эффективный способ поднять уровень SEO-оптимизации вашего сайта на Битрикс без значительных трудозатрат. Он обеспечивает наличие уникальных и релевантных мета-описаний у всех страниц, что в долгосрочной перспективе положительно скажется на их привлекательности в поисковой выдаче. Начните с этого кода и адаптируйте его под специфику вашего проекта.