SEO · OpenCart

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

Версия
v1.0.0 (OpenCart 4)
v1.0.0 (OpenCart 3.x)
v1.0.0 (OpenCart 2.3)
Совместимость
OpenCart 2.3.x, 3.0.x та 4.0.2 – 4.1.x
Платформа
OpenCart
CatCode All to Lat — автоматические SEO URL транслитерацией для OpenCart 2.x, 3.x и 4.x

Что внутри

  • 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
  • Бесплатный

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

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

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

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

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

Поле SEO URL в форме производителя заполнено транслитерацией названия
На OpenCart 4 адрес появляется в поле прямо пока вы печатаете название — и сразу для каждого языка магазина.

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

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 со старого адреса.

Предпросмотр массовой конвертации SEO URL в OpenCart
Предпросмотр ничего не пишет: сначала видно колонки «Было» и «Станет», и только потом запускается сам прогон.

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.xcc_translit-oc2.ocmod.zip.

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

Частые вопросы

Изменит ли модуль адреса, которые уже есть в индексе Google?

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

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

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

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

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

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

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

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

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

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

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

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

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

Вопросы по модулю?

Пишите в Telegram — ответим в течение рабочего дня. Поможем с настройкой, совместимостью и активацией ключа.

@catcode_support

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

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

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