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

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

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

Теперь мы команда!

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

4 марта 2015 в 12:00 Автор: Nikita_Sp в категории Плагины и модули 76 комментариев

При создании интернет магазина, разработчики часто сталкиваются с проблемой мультиязычности сайта. Одним из важных аспектов при создании мультиязычного интернет магазина на 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, но я не думаю что это правильно с точки зрения разработки сайта. Статью дополнил исключительно из соображений полноты и по просьбам пользователей в комментариях. Если у вас остались еще вопросы — пишите в комментарии. Спасибо.

76 комментариев

  • Почему-то у меня не получается. Подходит ли данный модуль для версии 2.0.1.1 ?
    Для установки необходимо только скопировать в корень папку vqmod и все? Или установить еще нужно через админку?

    • Если вы используете SEO PRO, то по идее может работать, однако данная версия предназначена для OC <2. Данный модуль еще не был адаптирован для OC 2.0

      Посмотрите файл логов vqmod чтобы понять в чем ошибка.

  • С данной CMS работу всего пару дней, SEO PRO — что это? В логах скорее всего ничего не будет, т.к. я не понял куда нужно копивать/вставлять ваш файл.

    • SEO PRO — это расширение для улучшения SEO URL на вашем сайте.
      Поищите в интернете «SEO PRO для Opencart»

      Файл нужно копировать в папку vqmod/xml/
      vQmod — система, позволяющая модифицировать файлы при помощи инструкций, заданных в XML файлах. О нем отдельно почитайте.

  • Вот еще нашел Seo Pro for oc2011+ от OpenCartJazz, скопировал папки в корень, в админке, в разделе модули появился [OCJazz] SeoPro, включаю его, захожу Скрыть язык по умолчанию в URL — нет.

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

    • Пишите разработчику модуля в комментариях. Модуль так же не мой и я им не пользуюсь, так что подсказать ничего не могу. Нужно открывать файлы модуля и копаться.

  • Доброго времени суток! Подскажите пожалуйста, есть ли какие-то тонкости в настройке вашего модуля? а то подключил его, и никакого эффекта… может быть нужно прописать какие-то редиректы .htaccess.
    Использую чистый опенкарт 1.5.6.4 + seo pro mod by codeoneteam +Deadcow seo + SEO_URL

    • На самом деле никаких тонкостей нету.
      Необходимо чтобы был SEO PRO, несколько языков и все.

      У меня вызывает подозрение ваш SEO PRO с модицикацией, возможно дело в нем.

      И что за SEO URL вы указали последним? Это же контроллер и выбирается ИЛИ SEO_URL или SEO_PRO.

      DeadCow только генерирует SEO адреса, он не учавствует в их обработке.

      • 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
        для каждого языка, т.е. чтоб для каждого языка был свой сайтмап с ссылками
        с учетом языка, ибо есть проблема с индексацией сайта на разных языках 🙁
        Еще раз спасибо!

        • в таком случае он не должен мешать, остается только SEO_PRO т.к. он модифицированный, возможно из-за этого и проблема.

          Вы можете посмотреть лог vQmod для обнаружения возможной ошибки.
          Что касается SITEMAP, то он не изменяется никак.

  • спасибо , все работает хорошо , возникала ошибка для ocStore , но автор её быстро устранил. рекомендую автора и его модули. хорошая поддержка

  • Добрый день. Интересует такой вопрос: в этом модуле в адрес просто добавляется два символа языка, а весь остальной путь остается прежним. Но правильней было бы в админке на одном языке прописывался один урл, а на другом свой. Например, если категория, скажем, называется ТЕЛЕВИЗОРЫ, то на латиннице, что русский вариант, что украинский выглядят одинаково: televizori. Тоесть адрес будет в одном случае: сайт.юа/

    • 1) Разницы никакой нет на мой взгляд. Зачем они должны быть разными? Поисковая система и так видит что это две разные страницы, только расположенные якобы в разных каталогах: в корне и в каталоге с языком (en/ru/ua). Так что не вижу смысла.

      2) SEO URL из коробки не поддерживает разные языки, и поле для его заполнения находится ВНЕ табов языков на вкладке «Данные», в отличии, например от вкладки «Общие». Так что это на мой взгляд достаточно трудозатратный модуль, т.к. надо реализовать:
      — изменение шаблона под табы;
      — изменение контроллеров админки под шаблон;
      — изменить структуру БД;
      — дописать в контроллер роутера еще по языкам селект.
      Учитывая трудозатраты и п.1 — не вижу в нем вообще никакого смысла.

      • 1) Если нет разницы, то какой тогда смысл в ЧПУ? Если русскоязычный покупатель видит УРЛ «на своем языке» (сайт.ру/ру/окна.html), то почему тогда украиноязычный должен видеть сайт.ру/юа/окна.html а не сайт.ру/юа/викна.html ???

        2) Есть такой модуль. Но он иногда почему-то подглючивает и начинает выводить УРЛ «наоборот» (сайт.ру/ру/викна.html и сайт.ру/юа/окна.html)

        • 1) ЧПУ — это человеко понятные урл — т.е. урл, содержащие БУКВЫ а не переменные, например index.php?route=product/product&id=123 и не надо обязательно для каждого языка свой добавлять. Достаточно сделать просто product.html и все.

          2) пользуйтесь этим модулем, я тут при чем?

  • Всем привет, автору спасибо за труд! 😉 Чуток изменил модуль. Дело в том что для поисковика страницы в виде /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’);
    }

    Всем хорошего дня и настроения

    • Спасибо за комментарий, возможно доработаю модуль чтобы поисковик кушал эти ссылки, и добавление их в карту — очень интересная идея, спасибо.

      Т.е. таким образом (используя ваш код) мы проверяем сессию, и если она пустая -> робот, то устанавливаем значения языка исходя из значения в строке адреса, верно?
      Интересно, я не подумал о таком решении. Спасибо.

      • Пожалуйста, совершенно верно. Если ни разу не заходили на сайт тогда по строке адреса если заходили тогда дальше по проверке.
        Все работает проверил, сейчас HTTP/1.1 200 OK была HTTP/1.1 301 Moved Permanently и отправляла робота на сайт с языком по умолчанию, тем самым другой язык игнорировался даже если лепить ссылки, сессия все равно на языке по умолчанию.

  • Nikita_Sp: Возможно сможешь помочь и реализовать для sitemap выплатить в жизнь?
    …/ru/index.php?route=feed/google_sitemap и …/en/index.php?route=feed/google_sitemap

  • Добрый день! Отличный модуль, только ошибка с главной страницей, путает префиксы языковые и сайт по адресу «мой-сайт.ком/ua» показывает страницу на русском языке по умолчанию. При мене языка на главной также трабл. Можете помочь разрешить проблему?

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

    • Добрый день!
      Спасибо за комментарий и отзыв с благодарностью.

      Что касается глюков, проверьте все согласно статье, обратите внимание на разделы UPD.

    • Вообще изначально позиционируется для версии 1.5.х, однако, данный модуль работает с контроллером SEO PRO (catalog/controller/common/seo_pro.php) и если вы используете данный файл даже на версии 2.x, то по идее данный модуль также вам подойдет.

      Однако, данный XML файл вряд ли можно будет установить при помощи стандартного Extension Installer (Установщика расширений Opencart). Таким образом вы можете либо внести все изменения вручную или изменить XML файл для того чтобы он читался установщиком.

      Возможно в будущем адаптирую его под Opencart 2.x, если он будет востребован. А уровень востребованности измеряется в количестве ваших комментариев и лайков.

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

  • Sitemap.xml у меня получился с новыми ссылками почемуто т.е если там была ссылка например http://example.com.ua/gorelka вместо этой ссылки появилась http://example.com.ua/ua/gorelka получается что старые сселки остались рабочие но никак не отслеживаются в Sitemap.xm. как то можно это исправить что бы сайтмапе были истарыессылки и новые с подкаталогом языка

    • Не совсем понял суть вопроса. Но постараюсь ответить.
      Дело в том что sitemap.xml генерируется с учетом сохраненного У ВАС в сессии языка, а поисковый робот сканирует сайт БЕЗ сессий и БЕЗ Javascript, соответственно, он будет только видеть стандартные ссылки на языке по-умолчанию.

      В дальнейшем, думаю можно будет модернизировать модуль feed/google_sitemap для вывода всех видов ссылок для всех языков. Но для этого я должен видеть что модуль и его дальнейшая поддержка актуальны для вас! Ставьте лайки и пишите комментарии!

      Спасибо.

  • да всё сделал — всё круто …. не заметил что надо изменить index.php Но теперь другая проблема — даже в поиске уже появились страницы всё класс — но одно но не даёт покоя — если по украинской ссылке переходиш на компьютере на котором ниразу не заходил — всё равно перекидывает на русскую версию по дефолту. Можно это как то исправить — если по http://example.com.ua/ua/gorelka то на украинский что бы переходило — а если http://example.com.ua/gorelka то по дефолту

    Но в любом случае Спасибо большое за ваш труд очень помогли

    • Спасибо большое за комментарий, очень рад что модуль пришелся по вкусу.
      Касательно вашего вопроса постараюсь разобраться, но не обещаю в ближайшее время — загружен, извините.

  • Как его установить на OcStore 2.1? Файлы залил, адреса страниц изменились. Но вот с изменением index.php проблемы, нет таких строк

    • Данный модуль был разработан под OC 1.5.x.
      Если вы хотите увидеть его для OC 2.x, ставьте лайки и делитесь записью в сетях, чтобы я увидел какой модуль более популярен в следующий раз.
      Если у вас срочная задача — свяжитесь со мной по email в разделе контакты.
      Спасибо.

  • Да, модуля для ОС 2 явно не хватает… Бился, бился, чтобы прикрутить по нормальному и плюнул на это занятие)))).

  • Огромное спасибо за модуль! Очень полезная и удобная штука.

    Кстати, если кому не терпится установить его на ОС2 — сделайте это вручную! Если открыть файл модификаций — там прекрасно видно, какие изменения нужно внести в файл seo-pro.php.

    • Так это понятно, а вот код ниже присобачить не получилось. И получается что поисковые системы видят только язык по умолчанию. А если так, то зачем тогда этот multiLanguage. Автор помогите решить проблему!

      • Для версий Opencart 2.x в файле index.php нужно провести все те же действия, если не ошибаюсь, просто строки могут немного отличаться ввиду использования других переменных, и добавления блока с определением языка из данных браузера (HTTP_ACCEPT_LANGUAGE).

        Структурно смысл один и тот же:
        1) добавляем функцию определения языка из URL путем вставки первого блока;
        2) добавляем еще один случай (else) в условие (if statement) определения языка МЕЖДУ случаями, когда язык определен через куки, сессию или браузер И языком по умолчанию.

        Если данные пояснения не имеют для вас смысла, в таком случае подписывайтесь на паблики и ждите обновления данной статьи. Спасибо.

    • вы можете руками внести изменения в свой SEO PRO согласно инструкции vQmod и все.

    • Данный модуль (SEO PRO) не является моим по этому его и нет на сайте.
      Вы можете воспользоваться Google для его поиска, спасибо.

    • не совсем понял вопрос.
      У вас по идее ссылка должна вести на сайт с другим языком с приставкой /uk/ например

      • Например на сайте 2 языка. Русский и английский. Когда текущий язык русский, под флажком ссылка на http://сайт.com/. Под англ флажком ссылка http://сайт.com/en/. То есть под обоими флажками активная ссылка. На смену языка и на текущий язык. То есть страница ссылается сама на себя. Нужно для текущего языка картинка ставала не активной

        • Ну не совсем. Нужно в модуле currency (или как у вас выводится список валют?) просто убрать ссылку в шаблоне если валюта выбрана как текущая.

          • Тут не в курсе валют дело, а в смене языка. Например у 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

          • я опечатался, извините, замените на фразу «..в модуле language (или как у вас выводиться список языков)…»

            1) Откуда вообще инфо что страница не должна ссылаться сама на себя?
            2) Что вам не понятно? Возьмите и скройте для текущего языка ссылку. В чем вопрос?

  • Здравствуйте Nikita Sp А как можно добавить страницы на разных языках в карту сайта. ? Сейчас в карте только страницы с основным url

    • Да, все верно, это планируемая доработка, но пока, к сожалению, не располагаю временем.
      Спасибо за проявленный интерес.

  • Спасибо. А для версии opencart 2.3 чтобы при заходе по ссылке типа домен/ru/ сможешь сделать? и чтобы для главной тоже работало?

    • Для главной и тут работает, в чем проблема? У вас есть SEO URL для главной?
      Могу, уже даже делал для разных сайтов — там отличается лишь место где встраивать скрипт — они перенесли все это или в framework.php или sturtup.php , точно не помню

  • На OcStore 2.3 заработало но вместо /ru отображается /ru-ru. Не могли бы Вы подсказать каким образом это можно исправить?

    • Изменить код (code) язка в настройках, или выводить/использовать везде другое поле, можно добавить свое поле для языка и использовать его. Или название например использовать.

  • На OcStore 1.5.5.1.2 выдает ошибку Undefined index: product_id in test/vqmod/vqcache/vq2-catalog_controller_product_category.php on line 313
    При условии если у категории есть подкатегория (есть вложенные). Если нету — то все отлично.
    Где мне копать?

    313 и ниже строки

    $results_img = $this->model_catalog_product->getProductImages($result['product_id']);
    $dop_img = array();
    foreach ($results_img as $result_img) {
    if ($result_img['image']) {
    $image_dop = $this->model_tool_image->resize($result_img['image'], $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
    } else {
    $image_dop = false;
    }
    $dop_img[] = $image_dop;
    }

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

      Поэтому считаю «удаленную бесплатную помощь» в данном случае на 100% бесполезной.
      Проблема в том что у вас где-то не определена переменная. ДО 313 строки. А почему — нужно смотреть что накрутили в файле.

    • да, и кстати, а при чем тут данный модуль? если мне не изменяет память, то он этот файл вообще не затрагивает 🙂

  • Спасибо за инфу. На opencart 2.3 заработало. но есть проблема чтоб позволить поисковым роботам просматривать сайт на других языках необходимо открыть файл index.php но его нет в 2,3. Подскажите где внести правки и какие чтоб заработало

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Вверх!

Меню блога

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

Облако тегов