Налаштування масової генерації SEO-тегів 1С-Бітрікс
Новий розділ каталогу — 3 000 товарів, у кожного потрібен унікальний <title>, <meta name="description"> та OG-теги. Писати вручну недоцільно. Бітрікс підтримує шаблонну генерацію SEO-полів через вбудований механізм SEO-фільтрів, і його можливостей достатньо для більшості завдань.
Де зберігаються SEO-поля
SEO-дані елементів інфоблоку зберігаються в таблиці b_iblock_element_iprop (iprop — iblock property). Зв'язок через b_iblock_iprop_template — шаблонні правила для розділів і елементів.
Для окремих елементів: Картка товару → вкладка SEO — поля ELEMENT_META_TITLE, ELEMENT_META_KEYWORDS, ELEMENT_META_DESCRIPTION, ELEMENT_PAGE_TITLE.
Шаблонні правила задаються на рівні інфоблоку або розділу: Інфоблоки → [інфоблок] → вкладка SEO. У шаблоні використовуються змінні виду {=this.Name}, {=this.DetailText}, {=this.Property.BRAND.Value}.
Налаштування шаблонів через інтерфейс
Для більшості каталогів достатньо шаблонних правил без скриптів:
Шаблон title: {=this.Name} купити в Україні — {=this.Property.BRAND.Value}
Шаблон description: {=this.Name} за ціною від {=catalog.MinPrice} грн. Швидка доставка. {=this.PreviewText}
У розділі Інфоблоки → [інфоблок] → Правила для SEO можна задати різні шаблони для різних розділів каталогу — це дозволяє врахувати специфіку категорій без коду.
Змінні, доступні в шаблоні:
| Змінна | Що повертає |
|---|---|
{=this.Name} |
Назва елемента |
{=this.PreviewText} |
Анонсовий текст |
{=this.Property.CODE.Value} |
Значення властивості |
{=catalog.MinPrice} |
Мінімальна ціна |
{=section.Name} |
Назва розділу |
Програмна генерація через iPropertyValues
Якщо шаблонного механізму недостатньо — генеруємо SEO-теги скриптом і зберігаємо через \Bitrix\Iblock\InheritedProperty\ElementValues:
use Bitrix\Iblock\InheritedProperty\ElementValues;
$iblockId = 10;
$elementsRes = \CIBlockElement::GetList(
[],
['IBLOCK_ID' => $iblockId, 'ACTIVE' => 'Y'],
false,
false,
['ID', 'NAME', 'PREVIEW_TEXT', 'XML_ID']
);
while ($element = $elementsRes->Fetch()) {
// Отримуємо потрібні властивості
$props = \CIBlockElement::GetProperty($iblockId, $element['ID'], [], ['CODE' => ['BRAND', 'COLOR', 'MATERIAL']])->Fetch();
$brand = $props['BRAND_VALUE'] ?? '';
$title = "{$element['NAME']} {$brand} купити з доставкою";
$description = "Купіть {$element['NAME']} від {$brand}. " . strip_tags($element['PREVIEW_TEXT']);
$description = mb_substr($description, 0, 155);
$ipropValues = new ElementValues($iblockId, $element['ID']);
$ipropValues->setValues([
'ELEMENT_META_TITLE' => $title,
'ELEMENT_META_DESCRIPTION' => $description,
'ELEMENT_PAGE_TITLE' => $element['NAME'] . ($brand ? " ({$brand})" : ''),
]);
}
ElementValues::setValues() зберігає дані в b_iblock_element_iprop та автоматично інвалідує кеш.
Генерація через AI/шаблонізатор
Для складніших описів можна передавати дані товару в GPT-сумісний API та записувати результат назад. Це виправдано, якщо в каталозі є технічні товари з описами з 1С, що нечитабельні для пошукових систем.
Принцип той самий: отримуємо дані елемента → формуємо опис → зберігаємо через ElementValues::setValues(). Важливо: обмежуйте частоту запитів до API та кешуйте вже оброблені елементи, щоб повторний запуск не витрачав API-квоту.
Перевірка унікальності
Після генерації корисно перевірити, чи немає повних дублів title:
SELECT ELEMENT_META_TITLE, COUNT(*) AS cnt
FROM b_iblock_element_iprop
WHERE IBLOCK_ID = 10
GROUP BY ELEMENT_META_TITLE
HAVING cnt > 1
ORDER BY cnt DESC
LIMIT 50;
Дублі title — це сигнал, що шаблон недостатньо специфічний. Додайте в шаблон унікалізуючу властивість: артикул, колір, розмір.
Терміни виконання
| Завдання | Час |
|---|---|
| Налаштування шаблонних правил (без коду) | 2–4 години |
| Скрипт генерації для каталогу до 5 000 товарів | 1 день |
| Генерація з AI-описами, 1 000–5 000 товарів | 2–4 дні |







