OpenCart SEO — это не «включить ЧПУ и поставить модуль метатегов». Это договор маршрутов: route + таблица ключевых слов вместо типов записей WordPress. WooCommerce закрывает витрину через product и таксономии — это другая CMS, страница WooCommerce SEO. Карточка SKU как документ покупки — в SEO карточек товаров. Здесь слой OpenCart: SEO URL, уникальный keyword, path категории и то, что модули фильтров дописывают к витрине.
Рамка каталога та же, что в SEO интернет-магазина: категория выбирает тип, карточка покупает модель, сортировка и пустой фильтр не документ.
Маршрут, а не тип записи
Без ЧПУ OpenCart отдаёт служебные адреса: index.php?route=product/product&product_id=, product/category&path=, product/manufacturer/info&manufacturer_id=, information/information&information_id=. Поиск должен видеть один человеческий путь на каждый из этих объектов, а не пары «keyword + тот же route с id».
ЧПУ включают в Система → Настройки → Сервер → «Использовать SEO URL». Одновременно нужен rewrite: для Apache — рабочий .htaccess из .htaccess.txt, для nginx — отдельные правила на index.php, не «всё в корень». Если галочка стоит, а rewrite нет, часть ссылок уже красивая, часть остаётся index.php?route= — робот видит два документа на один товар.
Таблица SEO URL: один keyword на объект
В OpenCart 3 и 4 ключевые слова лежат в Дизайн → SEO URL (таблица oc_seo_url): магазин, язык, запрос вроде product_id=42, keyword. В OpenCart 2 это была url_alias. Keyword обязан быть уникален в паре магазин + язык. Пустой keyword оставляет товар на index.php?route=. Два товара с одним keyword дают 404 или чужую карточку — смотрите, кто занял строку первым.
Схема «категория в пути товара» (/katalog/tovar/) опасна, когда товар висит в нескольких категориях: разные path= собирают разные адреса на один product_id. Каноникал и карта должны показать один. Это та же развилка, что у Woo с категорией в ЧПУ, только чинится строкой SEO URL и каноникалом, а не «первичной категорией» WordPress.
Производитель и информационные страницы — отдельные объекты с своими keyword. Не отдавайте «Оплата» и карточку на одном слагах. Мультиязык добавляет префикс языка: /ru/ и /en/ — разные документы, не копии, если текст и оффер реально разные.
Что закрыть до индекса
Ядро OpenCart не помечает noindex так же жёстко, как Woo на корзине. Корзина, оформление, кабинет, сравнение и закладки не должны попадать в sitemap и в обход из шапки. Проверьте тему Journal и модули «SEO Pack»: они часто рисуют эти пути в карте «на всякий случай».
Отдельно уберите из индекса служебные параметры витрины:
sort=,order=,limit=— сортировка и нарезка, не новые категории. Класс тот же, что у фильтров без спроса.page=без rel next/prev или каноникала на первую — копии листинга. Пагинация как решение витрины, не как отдельный кластер.- Модуль фильтра OpenCart и «ЧПУ фильтров»: комбинации опций без спроса плодят тысячи URL. Индексируют конечный срез со своим набором SKU, не декартово произведение. Ловушка обхода — в фасетной навигации.
tracking=, смена валюты и языка в query string — сессия, не документ.
Карта, разметка, модули
Базовый Google Sitemap в OpenCart — фид, не «файл в корне навсегда». Модули SEO Pack / SEO Pro часто рисуют вторую карту. Оставьте один индекс: товары, категории со спросом, производители, если бренд ищут. Не кладите в карту index.php?route= рядом с keyword того же id.
Встроенного Product+Offer, как WC_Structured_Data у Woo, у ядра OpenCart нет. Разметку даёт тема или модуль. Правило полей одно — страница микроразметки Product: один слой, цена и наличие как на карточке. Два JSON-LD от темы и SEO-модуля расходятся чаще, чем «нет разметки».
Variable / option в OpenCart — опции одной карточки, не отдельный product_id, пока вы сами не завели дочерние товары. Сколько URL должна видеть семья модели — контур вариаций, не галочка «SEO опций».
Если каталог системно врёт парами route/keyword и фильтрами, постановка аудита витрины — SEO-аудит.
Частые вопросы
Достаточно ли включить «Использовать SEO URL»?
Нет. Нужны rewrite на сервере и уникальный keyword на каждый товар, категорию и производителя. Галочка без таблицы и без .htaccess/nginx оставляет половину витрины на index.php?route=.
Чем OpenCart SEO отличается от WooCommerce?
Woo строит URL из типов записей WordPress. OpenCart — из route и таблицы SEO URL. Плагины Yoast и Rank Math сюда не ставятся: это другая CMS, не «ещё один магазин на WP».
Нужно ли индексировать все ЧПУ фильтров?
Нет. Индексируют срез со спросом и своим набором SKU. Сортировка, лимит и пересечение опций без запроса остаются кнопками витрины.
Почему один товар открывается по двум адресам?
Чаще всего товар в двух категориях, и в путь попал разный path=, либо рядом живы keyword и index.php?route=product/product. Оставьте один канон и одну строку в карте.