Здравствуй, уважаемый друг!

Кажется, ты используешь AdBlock. Этот проект развивается и существует за счет доходов от рекламы.
Добавь, пожалуйста, нас в исключения.

Спасибо за понимание.

Модуль SEO URL для мультиязычного интернет магазина на Opencart

Автор: в категории Плагины и модули 59 комментариев

При создании интернет магазина, разработчики часто сталкиваются с проблемой мультиязычности сайта. Одним из важных аспектов при создании мультиязычного интернет магазина на Opencart является создание обработка SEO адресов для каждой из версии сайта.

Nikita_Sp Multilanguage SEO URL module

Данная модификация позволяет добавить в URL код языка, на котором просматривается страница, а для языка по-умолчанию адрес остается тот же. Таким образом для поисковой системы у вас реализованы отдельные каталоги для каждого из языков.

Модуль MultiLanguage SEO URL работает исключительно с SEO_PRO, позволяя создать необходимую структуру для создания мультиязычного интернет магазина. Для наглядности вы можете ознакомиться с ниже расположенными несколькими скриншотами.

В архиве стандартная комплектация моих модулей: скриншоты, файлы README рус. и англ. версии, файлы для загрузки на сервер. При загрузке ни один файл не будет перезаписан.

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

Спасибо за доверие, не забываем подписываться и ставить +1, ведь именно благодаря ВАШИМ “лайкам” я вижу что работа не напрасна, а комментарии дают вдохновение на сотворение новых модулей и модификацию имеющихся!

Также буду рад услышать ваши комментарии относительно данного и иных моих модулей, а также предложения по их улучшению, и идеи для написания новых модулей!

Скачать MultiLanguage SEO URL для Opencart: nikita_sp-multilanguage-seo-url

UPD: По многочисленный просьбам был проведен анализ модуля и обнаружен баг, вызывающий ошибку «Notice: Undefined index: in /home/…/vqmod/vqcache/vq2-catalog_controller_common_seo_pro.php on line 77«. Данное обновление исправляет ошибку. Спасибо пользователям, которые указали на ошибку и предоставили данные для доступа на сервера для определения и анализа ошибки. (Андрей, Fusses, Bassel)

Скачать MultiLanguage SEO URL 1.2 для Opencartnikita_sp-multilanguage-seo-url-1.2

UPD2: Внимание: для того чтобы позволить поисковым роботам просматривать сайт на других языках по ссылке, необходимо открыть файл index.php (Opencart 1.5.x, 2.0.x) в корне вашего сайта, и найти строку (~162 line):

if (isset($session->data['language']) && array_key_exists($session->data['language'], $languages) && $languages[$session->data['language']]['status']) {

UPD3: для версии Opencart 2.1.x необходимо найти строку:

if (isset($session->data['language']) && array_key_exists($session->data['language'], $languages)) {

И перед условием вставить следующий код:

$language_from_url = explode("/", $request->server['REQUEST_URI']);
foreach($language_from_url as $lang){
	if(array_key_exists($lang, $languages)){
		$language_from_url = $lang;
		break;
	}
}
// If nothing was found don't apply
if(is_array($language_from_url)){
	$language_from_url = false;
}

Далее (шаг 2), для версии Opencart 1.5.x и 2.0.x необходимо найти строку (~167 line):

$code = $detect;

и после нее вставить код

}elseif ($language_from_url && array_key_exists($language_from_url, $languages) && $languages[$language_from_url]['status'] ){
	$code = $language_from_url;

Для версии Opencart 2.1.x необходимо найти строку ()

$code = $detect ? $detect : $config->get('config_language');

И перед ней добавить:

if(!$detect && ($language_from_url && array_key_exists($language_from_url, $languages) && $languages[$language_from_url]['status'])){
$detect = $language_from_url;
}

Таким образом при обращении к странице сайта через урл, в котором присутствует каталог языка, поисковая система будет видеть страницу на нужном языке. Обратите внимание, что данная конструкция служит для того чтобы отображать страницу на нужном языке для роботов поисковых машин, т.к. они не используют сессию и cookie.

По-умолчанию, язык выбирается исходя из нескольких параметров:

  • выбранного языка на сайте (session или cookie)
  • определенного через браузер (в каждом браузере есть информация о языке)

В противном случае применяется язык по-умолчанию, заданный в административной части.

Если вам необходимо, чтобы способ определения языка по URL был основным, то в таком случае на шаге 2 найдите первую строку условия:

Opencart 1.5.x, 2.0.x:

if (isset($session->data['language']) && array_key_exists($session->data['language'], $languages) && $languages[$session->data['language']]['status']) {

Opencart 2.1.x:

if (isset($session->data['language']) && array_key_exists($session->data['language'], $languages)) {

И перед ней добавьте:

if ($language_from_url && array_key_exists($language_from_url, $languages)){
	$code = $language_from_url;
}else

Должно получится что-то вроде:

if ($language_from_url && array_key_exists($language_from_url, $languages)){
	$code = $language_from_url;
}elseif (isset($session->data['language']) && array_key_exists($session->data['language'], $languages)) {

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

comments powered by HyperComments

Не забудь подписаться на группы в социальных сетях, чтобы всегда быть вкурсе последних событий!

Ander
2015-03-10 23:46:24
Простой и удобный модуль, работает хорошо спасибо!!
Nikita Sp
2015-03-10 23:46:36
Вам спасибо за комментарий!
Billy
2015-03-19 23:32:00
Почему-то у меня не получается. Подходит ли данный модуль для версии 2.0.1.1 ? Для установки необходимо только скопировать в корень папку vqmod и все? Или установить еще нужно через админку?
Nikita Sp
2015-03-19 23:34:21
Если вы используете SEO PRO, то по идее может работать, однако данная версия предназначена для OC <2. Данный модуль еще не был адаптирован для OC 2.0 Посмотрите файл логов vqmod чтобы понять в чем ошибка.
Billy
2015-03-19 23:49:42
С данной CMS работу всего пару дней, SEO PRO - что это? В логах скорее всего ничего не будет, т.к. я не понял куда нужно копивать/вставлять ваш файл.
Nikita Sp
2015-03-19 23:51:03
SEO PRO - это расширение для улучшения SEO URL на вашем сайте. Поищите в интернете "SEO PRO для Opencart" Файл нужно копировать в папку vqmod/xml/ vQmod - система, позволяющая модифицировать файлы при помощи инструкций, заданных в XML файлах. О нем отдельно почитайте.
Billy
2015-03-19 23:51:14
Вот еще нашел Seo Pro for oc2011+ от OpenCartJazz, скопировал папки в корень, в админке, в разделе модули появился [OCJazz] SeoPro, включаю его, захожу Скрыть язык по умолчанию в URL - нет.
Nikita Sp
2015-03-19 23:52:10
На счет этого модуля не в курсе, у меня есть определенный список модулей которые я использую при разработке, основные т.с. Так что с ним не подскажу.
Billy
2015-03-19 23:52:13
поставил этот модуль http://www.opencart.com/index.php?route=extension/extension/info&extension_id=6348&filter_search=seo&filter_license=0&filter_download_id=39 и получилось такое отображение, как в вашем модуле, но при изменении валюты пишет, что страница не найдена.
Nikita Sp
2015-03-19 23:53:45
Пишите разработчику модуля в комментариях. Модуль так же не мой и я им не пользуюсь, так что подсказать ничего не могу. Нужно открывать файлы модуля и копаться.
Billy
2015-03-21 14:50:32
а вас не затруднит поделить своим модулем SEO PRO ? :)
Diem
2015-03-29 14:43:08
Доброго времени суток! Подскажите пожалуйста, есть ли какие-то тонкости в настройке вашего модуля? а то подключил его, и никакого эффекта... может быть нужно прописать какие-то редиректы .htaccess. Использую чистый опенкарт 1.5.6.4 + seo pro mod by codeoneteam +Deadcow seo + SEO_URL
Nikita Sp
2015-03-29 14:43:57
На самом деле никаких тонкостей нету. Необходимо чтобы был SEO PRO, несколько языков и все. У меня вызывает подозрение ваш SEO PRO с модицикацией, возможно дело в нем. И что за SEO URL вы указали последним? Это же контроллер и выбирается ИЛИ SEO_URL или SEO_PRO. DeadCow только генерирует SEO адреса, он не учавствует в их обработке.
Diem
2015-03-29 20:37:53
SEO_URL VQmod модуль для генерации кастомных СЕО-лайк путей в стиле: 'common/home' => 'home', 'checkout/cart' => 'cart', 'account/register' => 'register', http://www.davidchc.com.br/tutoriais/opencart-tutoriais/transformando-as-outras-url-do-opencart-em-amigaveis/ Спасибо, попробую отключить... И еще вопрос, при помощи вашего модуля будут генерироваться sitemap.xml для каждого языка, т.е. чтоб для каждого языка был свой сайтмап с ссылками с учетом языка, ибо есть проблема с индексацией сайта на разных языках :( Еще раз спасибо!
Nikita Sp
2015-03-29 20:39:23
в таком случае он не должен мешать, остается только SEO_PRO т.к. он модифицированный, возможно из-за этого и проблема. Вы можете посмотреть лог vQmod для обнаружения возможной ошибки. Что касается SITEMAP, то он не изменяется никак.
Kate
2015-04-19 14:52:43
Спасибо большое! Всё работает, давно искала
Nikita Sp
2015-04-19 14:52:52
спасибо за комментарий!
Ander
2015-05-11 21:46:30
спасибо , все работает хорошо , возникала ошибка для ocStore , но автор её быстро устранил. рекомендую автора и его модули. хорошая поддержка
Πавел Μорозов
2015-05-29 11:31:37
Добрый день. Интересует такой вопрос: в этом модуле в адрес просто добавляется два символа языка, а весь остальной путь остается прежним. Но правильней было бы в админке на одном языке прописывался один урл, а на другом свой. Например, если категория, скажем, называется ТЕЛЕВИЗОРЫ, то на латиннице, что русский вариант, что украинский выглядят одинаково: televizori. Тоесть адрес будет в одном случае: сайт.юа/
Nikita Sp
2015-05-29 11:37:52
1) Разницы никакой нет на мой взгляд. Зачем они должны быть разными? Поисковая система и так видит что это две разные страницы, только расположенные якобы в разных каталогах: в корне и в каталоге с языком (en/ru/ua). Так что не вижу смысла. 2) SEO URL из коробки не поддерживает разные языки, и поле для его заполнения находится ВНЕ табов языков на вкладке "Данные", в отличии, например от вкладки "Общие". Так что это на мой взгляд достаточно трудозатратный модуль, т.к. надо реализовать: - изменение шаблона под табы; - изменение контроллеров админки под шаблон; - изменить структуру БД; - дописать в контроллер роутера еще по языкам селект. Учитывая трудозатраты и п.1 - не вижу в нем вообще никакого смысла.
Fusses
2015-06-23 11:08:06
Всем привет, автору спасибо за труд! ;) Чуток изменил модуль. Дело в том что для поисковика страницы в виде /ru/ /en/ не видны и заходит на язык по умолчанию на тот язык который указан в настройках. В корне в index.php заменить if (isset($session->data['language']) && array_key_exists($session->data['language'], $languages) && $languages[$session->data['language']]['status']) { на это If (empty($session->data['language']) && substr_count($_SERVER['REQUEST_URI'],$config->get('config_language')) == 0) { $code = 'en'; } elseif (empty($session->data['language']) && substr_count($_SERVER['REQUEST_URI'],$config->get('config_language'))) { $code = $config->get('config_language'); } elseif (isset($session->data['language']) && array_key_exists($session->data['language'], $languages) && $languages[$session->data['language']]['status']) { зы если на сайте больше поддержка языков то отредактировать или добавить и сменить язык по умолчанию можно, например так - If (empty($session->data['language']) && substr_count($_SERVER['REQUEST_URI'],$config->get('config_language')) == 0) { $code = 'ru'; } elseIf (empty($session->data['language']) && substr_count($_SERVER['REQUEST_URI'],$config->get('config_language')) == 0) { $code = 'ua'; } elseif (empty($session->data['language']) && substr_count($_SERVER['REQUEST_URI'],$config->get('config_language'))) { $code = $config->get('config_language'); } Всем хорошего дня и настроения
Nikita Sp
2015-06-23 11:10:29
Спасибо за комментарий, возможно доработаю модуль чтобы поисковик кушал эти ссылки, и добавление их в карту - очень интересная идея, спасибо. Т.е. таким образом (используя ваш код) мы проверяем сессию, и если она пустая -> робот, то устанавливаем значения языка исходя из значения в строке адреса, верно? Интересно, я не подумал о таком решении. Спасибо.
Fusses
2015-06-23 11:10:32
Nikita_Sp: Возможно сможешь помочь и реализовать для sitemap выплатить в жизнь? .../ru/index.php?route=feed/google_sitemap и .../en/index.php?route=feed/google_sitemap
Nikita Sp
2015-06-23 11:10:53
Попробую, но по времени ничего обещать не могу :)
Fusses
2015-06-23 11:46:42
Привет, спасибо большое и на этом )
Fusses
2015-06-23 11:46:53
Пожалуйста, совершенно верно. Если ни разу не заходили на сайт тогда по строке адреса если заходили тогда дальше по проверке. Все работает проверил, сейчас HTTP/1.1 200 OK была HTTP/1.1 301 Moved Permanently и отправляла робота на сайт с языком по умолчанию, тем самым другой язык игнорировался даже если лепить ссылки, сессия все равно на языке по умолчанию.
Πавел Μорозов
2015-06-25 01:33:10
1) Если нет разницы, то какой тогда смысл в ЧПУ? Если русскоязычный покупатель видит УРЛ "на своем языке" (сайт.ру/ру/окна.html), то почему тогда украиноязычный должен видеть сайт.ру/юа/окна.html а не сайт.ру/юа/викна.html ??? 2) Есть такой модуль. Но он иногда почему-то подглючивает и начинает выводить УРЛ "наоборот" (сайт.ру/ру/викна.html и сайт.ру/юа/окна.html)
Nikita Sp
2015-06-25 01:35:38
1) ЧПУ - это человеко понятные урл - т.е. урл, содержащие БУКВЫ а не переменные, например index.php?route=product/product&id=123 и не надо обязательно для каждого языка свой добавлять. Достаточно сделать просто product.html и все. 2) пользуйтесь этим модулем, я тут при чем?
Евгений Войнаровский
2015-10-23 18:50:58
Добрый день! Отличный модуль, только ошибка с главной страницей, путает префиксы языковые и сайт по адресу "мой-сайт.ком/ua" показывает страницу на русском языке по умолчанию. При мене языка на главной также трабл. Можете помочь разрешить проблему? Еще в комментах шла речь о добавлении мультиязычных ссылок в URL, такой функционал есть в модуле. Если нет - генерировать две катры сайта для каждого из языков - меньшая проблема при возможности более эффективного СЕО-продвижения сайта, за что автору модуля СПАСИБО!
Евгений Войнаровский
2015-10-23 18:51:00
ЗЫ: сайт на временном домене обкатываем пока, адрес - http://matrasi.mywebeffect.com/
Nikita Sp
2015-10-23 19:03:12
Добрый день! Спасибо за комментарий и отзыв с благодарностью. Что касается глюков, проверьте все согласно статье, обратите внимание на разделы UPD.
Елена
2016-01-23 02:01:31
Круть! Подскажите версии OpenCart ????????????????
Nikita Sp
2016-01-23 02:04:59
Вообще изначально позиционируется для версии 1.5.х, однако, данный модуль работает с контроллером SEO PRO (catalog/controller/common/seo_pro.php) и если вы используете данный файл даже на версии 2.x, то по идее данный модуль также вам подойдет. Однако, данный XML файл вряд ли можно будет установить при помощи стандартного Extension Installer (Установщика расширений Opencart). Таким образом вы можете либо внести все изменения вручную или изменить XML файл для того чтобы он читался установщиком. Возможно в будущем адаптирую его под Opencart 2.x, если он будет востребован. А уровень востребованности измеряется в количестве ваших комментариев и лайков. Спасибо за использование модулей. Подписывайтесь на паблики в удобной для вас соц сети и будете всегда в курсе обновлений.
Олег Капустин
2016-01-25 11:14:17
Sitemap.xml у меня получился с новыми ссылками почемуто т.е если там была ссылка например http://example.com.ua/gorelka вместо этой ссылки появилась http://example.com.ua/ua/gorelka получается что старые сселки остались рабочие но никак не отслеживаются в Sitemap.xm. как то можно это исправить что бы сайтмапе были истарыессылки и новые с подкаталогом языка
Nikita Sp
2016-01-25 11:18:09
Не совсем понял суть вопроса. Но постараюсь ответить. Дело в том что sitemap.xml генерируется с учетом сохраненного У ВАС в сессии языка, а поисковый робот сканирует сайт БЕЗ сессий и БЕЗ Javascript, соответственно, он будет только видеть стандартные ссылки на языке по-умолчанию. В дальнейшем, думаю можно будет модернизировать модуль feed/google_sitemap для вывода всех видов ссылок для всех языков. Но для этого я должен видеть что модуль и его дальнейшая поддержка актуальны для вас! Ставьте лайки и пишите комментарии! Спасибо.
Олег
2016-02-22 02:47:02
да всё сделал - всё круто .... не заметил что надо изменить index.php Но теперь другая проблема - даже в поиске уже появились страницы всё класс - но одно но не даёт покоя - если по украинской ссылке переходиш на компьютере на котором ниразу не заходил - всё равно перекидывает на русскую версию по дефолту. Можно это как то исправить - если по http://example.com.ua/ua/gorelka то на украинский что бы переходило - а если http://example.com.ua/gorelka то по дефолту Но в любом случае Спасибо большое за ваш труд очень помогли
Nikita Sp
2016-02-22 02:52:32
Спасибо большое за комментарий, очень рад что модуль пришелся по вкусу. Касательно вашего вопроса постараюсь разобраться, но не обещаю в ближайшее время - загружен, извините.
wportal
2016-02-22 15:24:29
Как его установить на OcStore 2.1? Файлы залил, адреса страниц изменились. Но вот с изменением index.php проблемы, нет таких строк
Nikita Sp
2016-02-22 15:25:38
Данный модуль был разработан под OC 1.5.x. Если вы хотите увидеть его для OC 2.x, ставьте лайки и делитесь записью в сетях, чтобы я увидел какой модуль более популярен в следующий раз. Если у вас срочная задача - свяжитесь со мной по email в разделе контакты. Спасибо.
Derryk
2016-03-03 16:04:06
Да, модуля для ОС 2 явно не хватает... Бился, бился, чтобы прикрутить по нормальному и плюнул на это занятие)))).
luckywalrus
2016-03-16 01:38:29
Огромное спасибо за модуль! Очень полезная и удобная штука. Кстати, если кому не терпится установить его на ОС2 - сделайте это вручную! Если открыть файл модификаций - там прекрасно видно, какие изменения нужно внести в файл seo-pro.php.
Александр Кривовязов
2016-03-16 17:01:31
Так это понятно, а вот код ниже присобачить не получилось. И получается что поисковые системы видят только язык по умолчанию. А если так, то зачем тогда этот multiLanguage. Автор помогите решить проблему!
Nikita Sp
2016-03-16 17:10:35
Для версий Opencart 2.x в файле index.php нужно провести все те же действия, если не ошибаюсь, просто строки могут немного отличаться ввиду использования других переменных, и добавления блока с определением языка из данных браузера (HTTP_ACCEPT_LANGUAGE). Структурно смысл один и тот же: 1) добавляем функцию определения языка из URL путем вставки первого блока; 2) добавляем еще один случай (else) в условие (if statement) определения языка МЕЖДУ случаями, когда язык определен через куки, сессию или браузер И языком по умолчанию. Если данные пояснения не имеют для вас смысла, в таком случае подписывайтесь на паблики и ждите обновления данной статьи. Спасибо.
Игорь Васильев
2016-07-05 14:21:44
А нету версии без vqmod? на чистый опенкарт с SEO_PRO
Nikita Sp
2016-07-05 14:22:13
вы можете руками внести изменения в свой SEO PRO согласно инструкции vQmod и все.
Сергей
2016-07-25 19:35:52
Добрый день! Так а где сам seo_pro брать? В архивах не нашел...
Nikita Sp
2016-07-25 19:38:05
Данный модуль (SEO PRO) не является моим по этому его и нет на сайте. Вы можете воспользоваться Google для его поиска, спасибо.
Игорь
2016-08-22 16:03:18
Подскажите, как сделать неактивной циклическую ссылку под флажком текущего языка? Есть на сайте 3 флажка смены языка, под каждым ссылка http://сайт.com/ http://сайт.com/uk/ http://сайт.com/en/ Выходит ссылка страницы самой на себя
Nikita Sp
2016-08-22 16:04:38
не совсем понял вопрос. У вас по идее ссылка должна вести на сайт с другим языком с приставкой /uk/ например
Игорь
2016-08-23 14:14:11
Например на сайте 2 языка. Русский и английский. Когда текущий язык русский, под флажком ссылка на http://сайт.com/. Под англ флажком ссылка http://сайт.com/en/. То есть под обоими флажками активная ссылка. На смену языка и на текущий язык. То есть страница ссылается сама на себя. Нужно для текущего языка картинка ставала не активной
Nikita Sp
2016-08-23 14:14:58
в таком случае вам необходимо подправить шаблон вывода языка, можете воспользоваться следующей статьей: https://nikita-sp.com.ua/2015/03/kak-v-opencart-poluchit-kod-yazyika-po-umolchaniyu.html
Евгений
2016-08-25 11:33:21
Никита - ты красавчик. Спасибо за модули...
Nikita Sp
2016-08-25 11:33:30
Спасибо)
Игорь
2016-08-25 11:38:56
по аналогии с ссылкой под лого на главной *ссылка_удалена*
Nikita Sp
2016-08-25 11:40:15
Ну не совсем. Нужно в модуле currency (или как у вас выводится список валют?) просто убрать ссылку в шаблоне если валюта выбрана как текущая.
Игорь
2016-08-28 19:05:21
Тут не в курсе валют дело, а в смене языка. Например у https://opencartforum.com/files/file/1583-seo-%D0%BC%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D1%8F%D0%B7%D1%8B%D0%BA-opencart-15x/ markimax в модуле в описании написано -Языковая страница не ссылается сама на себя. С логотипа убирается ссылка на главной - Чтоб не было циклической ссылки. То есть по клику на лого все страницы переходят на главную, а на главной ссылка не активна. Страница не должна ссылатся сама на себя. Под картинкой с выбором языка выходит такая-же ссылка. Под флажком англ ссылка http:// site.com/en/, а под активным языком русс под флажком так-же активная ссылка http:// site.com
Nikita Sp
2016-08-28 19:08:00
я опечатался, извините, замените на фразу "..в модуле language (или как у вас выводиться список языков)..." 1) Откуда вообще инфо что страница не должна ссылаться сама на себя? 2) Что вам не понятно? Возьмите и скройте для текущего языка ссылку. В чем вопрос?
Татьяна Тарицану
2016-09-08 18:00:54
Здравствуйте Nikita Sp А как можно добавить страницы на разных языках в карту сайта. ? Сейчас в карте только страницы с основным url
Nikita Sp
2016-09-08 18:01:37
Да, все верно, это планируемая доработка, но пока, к сожалению, не располагаю временем. Спасибо за проявленный интерес.
Вверх!

Меню блога

Категории блога

Облако тегов