Багатомовний магазин на OpenCart рідко падає в видачі через очевидні причини. Частіше відбувається інше: товари перекладено, мови підключено, перемикач працює, а в Google індексується лише одна мовна версія, друга наче не існує. Причина майже завжди одна — неправильна URL-структура та відсутність SEO-розмітки для мов. Розберемо, як це лагодиться на OpenCart 3.x (логіка та сама і для 2.x).
1. Чому стандартний OpenCart псує SEO мультимовного магазину
OpenCart за замовчуванням перемикає мову через сесію та cookie, а не через URL. Тобто українська й англійська версії товару живуть за однією адресою, а яку саме показати — вирішує cookie відвідувача.
Для пошуковика це катастрофа. Googlebot заходить без вашого cookie, бачить одну мову (зазвичай дефолтну) і другу просто не знаходить — для неї немає окремого URL, який можна було б проіндексувати. На практиці це виглядає так: у Search Console сотні сторінок основної мови та майже порожньо по другій, хоча контент перекладено повністю.
Висновок простий: кожна мовна версія сторінки має жити за власною унікальною адресою. Без цього решта налаштувань не має сенсу.
2. Мовний префікс в URL
Найзручніший спосіб дати кожній мові свій URL — мовний префікс у шляху:
https://example.com/uk/product/...
https://example.com/en/product/...
https://example.com/pl/product/...
Теоретично можна рознести мови по піддоменах (en.example.com) чи окремих доменах (example.com.ua + example.com), але це дорожче в підтримці й має сенс хіба для великих міжнародних проєктів з окремими командами. Для звичайного магазину префікс у шляху — оптимальний варіант.
Окремо треба вирішити, що робити з основною мовою.
Тут два робочі підходи:
A. Префікс для всіх мов, включно з основною
/ua/product/... /en/product/...
B. Основна мова без префікса, решта — з префіксом
/product/... ← українська (default) /en/product/... ← англійська
Варіант B виглядає чистіше для основного ринку і його зазвичай і обирають. Але він складніший: треба коректно віддавати дефолтну мову без префікса й не плодити дублі (щоб та сама українська сторінка не відкривалася водночас і за /, і за /ua/). Головне правило — обрати один підхід і витримати його на всьому сайті, без винятків для окремих сторінок.
Чистий OpenCart 3 мовних префіксів у SEO URL не вміє взагалі. Потрібен модуль, який вбудовує мовний сегмент у роутинг: визначає мову з URL, віддає правильну локаль і генерує всі внутрішні посилання вже з префіксом.
3. Розмітка hreflang
hreflang каже пошуковику, яка версія сторінки призначена для якої мови чи регіону. Без нього Google може показати англійцю українську сторінку або вирішити, що дві мовні версії — це дублі, і залишити в індексі лише одну.
У <head> кожної сторінки додається повний набір посилань на всі її мовні версії — включно з самою цією сторінкою:
html
<link rel="alternate" hreflang="uk" href="https://example.com/" />
<link rel="alternate" hreflang="en" href="https://example.com/en" />
<link rel="alternate" hreflang="pl" href="https://example.com/pl" />
<link rel="alternate" hreflang="x-default" href="https://example.com/" />
Чотири правила, на яких ламається 90% впроваджень:
- Двосторонність. Якщо українська сторінка вказує на англійську як альтернативу, англійська зобов'язанавказувати назад на українську. Односторонні посилання Google ігнорує мовчки — помилки ви не побачите, просто не спрацює.
- Абсолютні URL. Тільки повна адреса з
https://. Відносні шляхи (/en/...) не працюють. - Самопосилання. Сторінка мусить містити
hreflangі на саму себе, інакше кластер вважається неповним. - Однакові набори. На всіх сторінках кластера набір альтернатив має бути ідентичним.
Щодо кодів мов: за стандартом це ISO 639-1 (uk, en, pl). Регіон додається через дефіс лише за потреби: en-gb, en-us, pl-pl. Важливо не плутати — у hreflang мова обов'язкова, а регіон опційний. Запис hreflang="ua" помилковий, бо ua — це код країни, а не мови; українська завжди uk.
Регіональні варіанти потрібні тоді, коли одна мова таргетує кілька країн з різним контентом — наприклад, англійська для США та Британії з різними цінами. Для типового українського магазину достатньо простих uk, en, plбез регіонів.
4. Значення x-default
x-default — це версія сторінки для всіх, чию мову ви явно не передбачили. Канадець із французькою мовою браузера, бразилець, відвідувач із Азії — якщо для їхньої мови немає окремого hreflang, Google покаже саме x-default.
html
<link rel="alternate" hreflang="x-default" href="https://example.com/" />
Сюди ставлять або міжнародну версію (часто англійську), або основну мову магазину, або окрему сторінку вибору мови. Для магазину з прицілом тільки на Україну x-default можна навести на українську головну — і цього достатньо. Елемент не обов'язковий формально, але без нього ви віддаєте Google на відкуп рішення «що показати всім іншим», а він вгадує не завжди.
5. Canonical і hreflang разом
Це місце, де найчастіше все ламається, бо два теги виконують протилежні задачі й легко конфліктують.
canonical каже «це головна версія серед дублів». hreflang каже «це інша мовна версія, не дубль». Якщо переплутати — Google послухає canonical і викине мовні версії з індексу.
Правило: canonical кожної мовної сторінки вказує сам на себе. Українська сторінка — canonical на українську, англійська — на англійську. hreflang при цьому перелічує всі мови.
html
<!-- на сторінці /en/desktops -->
<link rel="canonical" href="https://example.com/en/desktops" />
<link rel="alternate" hreflang="uk" href="https://example.com/desktops" />
<link rel="alternate" hreflang="en" href="https://example.com/en/desktops" />
Типова помилка — поставити canonical усіх мовних версій на українську «оригінальну» сторінку. Логіка «це ж переклад одного товару» здається розумною, але для Google це прямий сигнал «англійська та польська — копії, не індексуй їх». Результат: трафік лише з однієї мови.
6. Sitemap і перемикач мов
XML-карта сайту може дублювати hreflang через xhtml:link — це додатковий канал, яким Google знаходить мовні зв'язки, особливо корисний на великих каталогах, де краулер доходить не до кожної сторінки.
xml
<url>
<loc>https://example.com/en/desktops</loc>
<xhtml:link rel="alternate" hreflang="uk" href="https://example.com/desktops"/>
<xhtml:link rel="alternate" hreflang="en" href="https://example.com/en/desktops"/>
</url>
Перемикач мов теж впливає на SEO сильніше, ніж здається. Дві поширені помилки: перемикач веде всіх на головну (замість тієї ж сторінки в іншій мові) і змінює лише cookie, не змінюючи URL. Правильний перемикач веде на мовний еквівалент поточної сторінки й змінює саме адресу — тоді кожен клік формує валідне внутрішнє посилання, яке бачить пошуковик.
7. Готове рішення: модуль «SEO мультимова PRO»
Зробити все вищеописане на чистому OpenCart означає лізти в роутер, контролери та шаблони і ризикувати при кожному оновленні. Модуль SEO мультимова PRO закриває ці задачі без правок системного коду.
Що він дає по суті цієї статті:
- Мовні URL з префіксами (
/ua/...,/en/...,/pl/...) — кожна мова отримує власну адресу, яку Google може проіндексувати окремо. Можна задати й однакові SEO URL для різних мов: вони залишаться унікальними завдяки префіксу, без ручного дублювання. - Основна мова без префікса (підхід B з розділу 2) — налаштовується гнучко, аж до варіанта з префіксами для всіх мов.
- Повне керування hreflang і x-default, включно з регіональними варіантами (
pl-pl,en-gb) — рівно те, про що йшлося в розділах 3–4, але без ручного редагування шаблонів. - Мовні sitemap з альтернативами та мовні мета-теги title/description/keywords для головної.
- Popup вибору мови і коректне перенаправлення нового відвідувача на основну мову без 301-редіректа — тобто без шкоди для індексації.
- Підтримка мультимагазинів, регіонів і міст, мультимагазин у підпапках, шорткоди, прив'язані до мов і регіонів.
Технічно важливо, що модуль не змінює системний код OpenCart, не використовує ioncube і не звертається до сервера розробника — якщо той недоступний, магазин працює далі. Сумісність широка: OpenCart 1.5.x, 2.x, 3.x та збірки на кшталт ocStore, PHP від 5.6 до 8.4, будь-яка тема, зверстана за стандартами OpenCart.
Окремо варто згадати опцію «Налаштування згідно закону України» 🇺🇦. Це болюча тема для магазинів, які роблять українську основною мовою постфактум: наївний підхід вбиває старі позиції. Модуль робить перехід коректно — українська отримує префікс /ua/..., а старі сторінки без префікса лишаються в індексі, тож переіндексація не обнуляє накопичений трафік. Алгоритм перенаправлення враховує контекст: чи зайшов користувач уперше, чи прийшов із пошуку на немовну сторінку, чи свідомо перемкнув мову сам.
Модуль підтримує OpenCart 2.0.3–3.0.5, має документацію та демо, ліцензія — на один домен.
8. Чек-лист перед запуском
- Кожна мовна версія сторінки має власний унікальний URL з префіксом.
- Обрано єдину URL-стратегію (префікс для всіх / основна без префікса) і витримано на всьому сайті.
hreflangстоїть на всіх сторінках, двосторонній, з абсолютними URL і самопосиланням.- Доданий
x-default. canonicalкожної сторінки вказує сам на себе, а не на іншу мову.- Перемикач мов веде на еквівалентну сторінку і змінює URL, а не cookie.
- Sitemap містить мовні альтернативи.
- hreflang перевірено краулером (Screaming Frog, Sitebulb) або валідатором — звіт International Targeting у Search Console Google закрив ще 2022 року, тож покладатися на нього вже не можна.
Підсумок
SEO мультимови в OpenCart тримається на трьох речах: окремий URL для кожної мови, коректний hreflang з x-default і canonical, що вказує сам на себе. Помилка в будь-якому з трьох пунктів зводить нанівець усю роботу над перекладом. Стандартний OpenCart дає лише перемикання мови без жодної з цих можливостей, тож для магазину, який має ранжуватися в кількох мовах, ці задачі бере на себе модуль SEO мультимова PRO — без правок системного коду й з підтримкою всіх актуальних версій OpenCart.