Связаться
  • OpenCart
  • SEO
  • v1.1.0

CatCode All to Lat — автоматические SEO URL транслитерацией для OpenCart 2.x, 3.x и 4.x

Автоматические SEO URL транслитерацией для OpenCart 2, 3 и 4: латинские ЧПУ для товаров, категорий и информационных страниц, откат и 301 со старых адресов.

Совместимость
OpenCart 2.3.x, 3.0.x и 4.0.2 – 4.1.x
Версия
v1.1.0 (OpenCart 4)
v1.0.0 (OpenCart 3.x)
v1.0.0 (OpenCart 2.3)

Что умеет модуль

Функция Free
SEO URL из названия при каждом сохранении — товары, категории, производители, страницы ✔
Работает для импорта, чужих массовых редакторов и синхронизации с ERP, а не только для формы ✔
Украинский (КМУ 55/2010), русский (BGN/PCGN), болгарский, сербский, белорусский ✔
Греческий и латиница с диакритикой: pl, cs, sk, de, fr, es, pt, tr, ro, hu, балтийские, скандинавские, vi ✔
Немецкие умляуты как ae/oe/ue — отдельной опцией ✔
Формула для товара: [name], [model], [sku], [id] ✔
Массовая конвертация каталога батчами с предпросмотром «было → станет» ✔
Журнал изменений и откат прогона одним кликом ✔
301 со старых адресов, реальный 404 остаётся 404 ✔
Отдельные ключевые слова для каждого языка магазина (OpenCart 3 и 4) ✔
Три сборки: OpenCart 2.3, 3.0.x и 4.0.2–4.1.x ✔
Бесплатный ✔

Как это выглядит

Настройки модуля All to Lat в админке OpenCart 4
Рядом с каждым типом записи видно, сколько позиций уже имеют SEO URL, а сколько ещё нет — объём работы понятен до первого клика.
Поле SEO URL в форме производителя заполнено транслитерацией названия
На OpenCart 4 адрес появляется в поле прямо пока вы печатаете название — и сразу для каждого языка магазина.
Предпросмотр массовой конвертации SEO URL в OpenCart
Предпросмотр ничего не пишет: сначала видно колонки «Было» и «Станет», и только потом запускается сам прогон.

Главное о модуле

Почему хук на модели, а не на форме

Модуль слушает событие admin/model/catalog/* add/edit before — последнюю точку, где массив данных ещё можно изменить, и первую, через которую проходит каждый, кто пишет в каталог: форма товара, импорт из CSV, чужой массовый редактор, синхронизация с ERP.

Транслитерация в три слоя

1. Таблица кириллицы по стандарту. Украинский (КМУ 55/2010) даёт и→y, г→h, х→kh, зг→zgh и я→ya в начале слова; русский BGN/PCGN — и→i, г→g.

Массовая конвертация каталога

Отдельная вкладка для магазина, который уже работает. Два режима: только записи без SEO URL (безопасный — может только добавить адреса) и все записи с перезаписью.

Технические требования

  • Поддерживаются OpenCart 4.0.2 – 4.1.x, 3.0.x и 2.3.x, а также ocStore на их основе — три отдельные сборки. Нужен включённый режим ЧПУ в настройках магазина.

История версий

v1.1.0 OC 4.x Текущая

23 сентября 2026.

v1.0.0

Первый выпуск.

Полное описание модуля

CatCode All to Lat — SEO URL пишется из названия сам, каждый раз когда вы сохраняете товар, категорию, производителя или информационную страницу. Никто больше не жмёт «сгенерировать» по каждой позиции, а импортированный ночью каталог не просыпается без адресов.

Почему хук на модели, а не на форме

Модуль слушает событие admin/model/catalog/* add/edit before — последнюю точку, где массив данных ещё можно изменить, и первую, через которую проходит каждый, кто пишет в каталог: форма товара, импорт из CSV, чужой массовый редактор, синхронизация с ERP. Расширение, которое патчит шаблон формы, покрывает только первый случай — именно поэтому после ночного импорта товары стоят без ЧПУ.

На OpenCart 4 поле SEO URL дополнительно заполняется прямо в форме, пока вы печатаете название: там ядро проверяет это поле в контроллере ещё до модели, поэтому без этого форма просто не сохранилась бы.

Транслитерация в три слоя

1. Таблица кириллицы по стандарту. Украинский (КМУ 55/2010) даёт и→y, г→h, х→kh, зг→zgh и я→ya в начале слова; русский BGN/PCGN — и→i, г→g. Прогнать украинский каталог русской таблицей означает получить hodinnik вместо hodynnyk и выпасть из выдачи по собственным названиям товаров. Болгарский, сербский/македонский и белорусский имеют свои таблицы.

2. Универсальная таблица — греческий и латиница с диакритикой: польский, чешский, словацкий, немецкий, французский, испанский, португальский, турецкий, румынский, венгерский, балтийские, скандинавские, вьетнамский. Здесь выбор языка не нужен: ł — это l везде. Исключение — немецкие умляуты, они включаются опцией, потому что ü→ue правильно по-немецки и неправильно по-турецки.

3. iconv ASCII//TRANSLIT для всего, чего не было в таблицах, — незнакомый алфавит сводится к ближайшей латинице, а не схлопывается в дефисы.

Апострофы не разрывают слово: О'Хара → okhara, а не o-khara. Ключевое слово режется по границе слова на заданной длине и проверяется на уникальность в пределах магазина.

Массовая конвертация каталога

Отдельная вкладка для магазина, который уже работает. Два режима: только записи без SEO URL (безопасный — может только добавить адреса) и все записи с перезаписью. Перед запуском — предпросмотр «было → станет» на 25 строк, который ничего не пишет. Прогон идёт батчами по 100 строк цепочкой, поэтому каталог на десятки тысяч позиций не упирается в max_execution_time.

Каждое изменение ложится в журнал cc_translit_log: старое ключевое слово, новое, язык, магазин, номер прогона. Отсюда работают две вещи — кнопка «Откатить» на целый прогон и 301 со старого адреса.

301 со старых адресов

Заменённое ключевое слово не исчезает: когда по старому адресу приходят, магазин отдаёт 301 на новый. Страница, которая и дальше открывается, обработчика вообще не касается, а адрес, которого никогда не существовало, как и раньше отдаёт честный 404 — модуль не превращает магазин в ловушку для поисковых роботов.

Три сборки в одном месте

  • OpenCart 4.0.2 – 4.1.x;
  • OpenCart 3.0.x (работает и со старой схемой url_alias версий 3.0.0–3.0.2, и с seo_url от 3.0.3);
  • OpenCart 2.3.x — cc_translit-oc2.ocmod.zip.

На OpenCart 4 и 3.0.3+ ключевые слова хранятся отдельно для каждого языка магазина: украинская страница получает украинский адрес, английская — английский. На OpenCart 4 прогон также досоздаёт служебные route-строки для языков, у которых их нет, — именно из-за них ЧПУ на втором языке обычно молча отдаёт главную страницу.

Зачем это магазину

OpenCart формирует SEO URL из того, что вы ввели руками, и если его не заполнить — адрес остаётся техническим, с index.php?route=. Заполнять вручную тысячи товаров никто не будет, поэтому магазины либо живут с техническими адресами, либо получают кириллицу в URL.

Кириллический адрес при копировании превращается в экран процентных кодов: ссылка в мессенджере выглядит как спам, а часть внешних сервисов такие адреса режет.

Как это работает — шаг за шагом

1. Модуль перехватывает сохранение товара, категории, информационной страницы или производителя.

2. Название транслитерируется по выбранному стандарту (по умолчанию — украинский КМУ 55/2010) и ложится в SEO URL автоматически.

3. Для имеющегося каталога есть массовая конвертация — за один проход.

4. Со старых адресов ставится 301, поэтому позиции и чужие ссылки остаются живыми.

Что под капотом

Модуль вешается на модель, а не на форму в админке. Поэтому SEO URL появляется и тогда, когда товар создаёт импорт прайса, обмен с 1С или любой другой модуль — именно там, где решения «на JavaScript в форме» не работают.

Ядро не патчится: всё через штатные события OpenCart, поэтому обновление магазина не затирает модуль.

Как установить

1. Залейте архив через «Расширения → Установщик расширений» и установите модуль.

2. Убедитесь, что в настройках магазина включено ЧПУ.

3. Создайте тестовый товар и проверьте, что SEO URL заполнился сам.

4. Сделайте бэкап базы и запустите массовую конвертацию имеющегося каталога.

Вопросы
о модуле

Не нашли ответ? Напишите в Telegram — ответим в течение рабочего дня.

@catcode_support Настройка, совместимость, активация
Изменит ли модуль адреса, которые уже есть в индексе Google?

Нет, пока вы сами этого не запустите. По умолчанию ключевое слово создаётся только там, где оно пустое. Перезапись существующих адресов — отдельный режим на вкладке массовой конвертации, с предупреждением, предпросмотром и журналом, который можно откатить.

Почему SEO URL не появился после импорта чужим модулем?

Должен появиться — именно ради этого хук стоит на модели, а не на форме. Проверьте, что в настройках включён нужный тип записи (товары, категории, производители, страницы) и что импорт действительно пишет через модель OpenCart, а не прямыми SQL-запросами в базу.

Что будет со старыми ссылками после массовой конвертации?

Старое ключевое слово остаётся в журнале, и запрос по нему отдаёт 301 на новый адрес. Адрес, которого никогда не существовало, как и раньше отдаёт 404.

В магазине два языка — адреса будут одинаковые?

Нет. На OpenCart 3 и 4 ключевое слово хранится отдельно для каждого языка и строится из названия именно этого языка. Прогон массовой конвертации делается по очереди для каждого языка.

ЧПУ сгенерировались, а страница отдаёт главную. Почему?

На OpenCart 4 адрес резолвится посегментно, и без служебной route-строки маршрут остаётся пустым — магазин молча отдаёт главную с кодом 200. OpenCart создаёт эти строки только для языка установки; модуль добавляет их для остальных языков сам во время прогона.

Стоит SEO Pro или похожий SEF-модуль — не конфликтует?

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

Сколько стоит?

Бесплатно, без ограничений по количеству товаров или прогонов.

Не тот вариант, что искали?

Делаем кастомные модули под WordPress, WooCommerce, OpenCart и Shopify. Расскажите о задаче — подготовим оценку.

Заказать кастомный модуль