Как мы решили проблему массового SEO — шаблоны, аудит и откат изменений

Привет всем.

Хочу поделиться подходом который мы разработали для массового заполнения SEO-полей в CS-Cart. Если у вас большой каталог — возможно это будет полезно.

Проблема

Типичная ситуация: магазин с тысячами товаров, у большинства пустые page title, meta description, SEO-имя. Заполнять вручную нереально, копирайтер дорого, стандартный импорт через CSV неудобен для SEO-полей.

Подход с шаблонами

Идея простая — создаёшь шаблон один раз с переменными:

Page title: {{ product }} — {{ category }} — купить
Meta description: {{ product }} от {{ brand }}. Цена от {{ price }}. Быстрая доставка.
SEO name: {{ product_code }}-{{ product }}

Доступные переменные для товаров: {{ product }}, {{ category }}, {{ parent_category }}, {{ brand }}, {{ price }}, {{ product_code }}, {{ company_name }}, и любая характеристика товара через {{ feature_НАЗВАНИЕ }}.

Также работают условные блоки. Например: {if price > 10000}Премиум {{ product }}{endif} — слово "Премиум" подставится только для дорогих товаров. Поддерживаемые операторы: >, <, =, !=, contains.

Три вещи которые мы добавили сверху

1. Детектор каннибализации

Главная ошибка при шаблонном SEO — паттерн только с {{ category }} без уникальной переменной товара. Все 500 товаров категории "Смартфоны" получают одинаковый заголовок "Смартфоны — купить". Поисковик видит 500 дублей и не ранжирует ни одну нормально.

Детектор находит все дубли заголовков, описаний и ключевых слов по всему каталогу — с кликабельными ссылками на конфликтующие объекты. Можно сразу открыть и исправить.

2. SEO Health Score

Показывает процент заполненности по каждому полю (title, description, keywords) отдельно для товаров, категорий и страниц. Зелёный от 67%, жёлтый 34–66%, красный ниже 34%. Сразу видно где проблема.

3. Rollback — откат одним кликом

Перед каждой генерацией модуль сохраняет снапшот текущих значений всех затрагиваемых объектов. Если результат не устроил — откатываешь одним кликом. История хранит все предыдущие генерации с формулой паттерна и списком изменённых объектов.

CRON — автоматическая генерация

Для магазинов которые регулярно добавляют новые товары — настраиваешь CRON и новые товары автоматически получают SEO-поля без ручного вмешательства. Обрабатываются только объекты с пустыми полями — уже заполненные вручную не трогаются.

0 3 * * * php /path/to/cart/admin.php --dispatch=seo_pack_cron.apply --cron_password=YOUR_PASSWORD

Мы выложили это как модуль на маркетплейс: https://marketplace.cs-cart.com/seo-templates-cs-cart.html

Если кто-то делал массовое SEO другими способами — расскажите как, интересно сравнить подходы.