Блог по продвижению сайтов Блог по SEO

Блог Сергея Арсентьева

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

100% правильный редирект в магазине Опенкарт (Opencart / OcStore 2.х и 3.x)

Обычный редирект в магазинах на Opencart CMS не срабатывает и выдает ошибку Internal Server Error (500). Решается эта задача с помощью другого синтаксиса Redirect 301.Все началось с того, что меня один клиент по продвижению попросил сделать редирект в его магазине Opencart 2.1.

Изменились ссылки на статьи, о магазине, товары и категории.

А я согласился, совсем забыв, что в магазинах Opencart эти редиректы делаются через одно место, стандартный синтаксис с Redirect 301 не работает!

В итоге вместо нескольких минут задача заняла у меня целый день, включая поиск в интернете правильного решения, тестирования и создание своего файлика XLS, чтобы больше вручную не делать все эти редиректы в Опернкарте.

Делюсь найденным решением с вами.

Прописываем правильный редирект в Opencart вручную

Итак, открываем файл .htaccess, он находится в корне сайта, для этого понадобится доступ по FTP (может пригодится как зайти по FTP на сайт).

И где-нибудь вначале файла после директивы RewriteEngine On вставляем редиректы.

Прежде всего, еще раз напомню, что стандартный редирект вида: Redirect 301 старый адрес http://новый адрес банально не работает и выдает ошибку.

Чтобы победить его в .htaccess нужно прописать другую конструкцию:

RewriteCond %{QUERY_STRING} ^_route_=адрес_старой_страницы.html$
RewriteRule ^(.*)$ http://ваш_домен.ru/новой_страницы/? [R=301,L]

Проверил в разных вариантах - все работает отлично.
Спасибо за решение неизвестному автору.

Автоматизировать редирект Opencart

Мне пришло в голову, что млин, каждый раз вручную вставлять правильные адреса в эти 2 строчки довольно утомительно.

И поэтому если у вас есть список старых URL-адресов и новых, то задача сделать из них редирект - вопрос нескольких формул в Excel.

Вот что получилось:

В результате можно сразу загнать в файл весь список старых адресов и напротив них - новые, и получить готовый редирект для Opencart и Ocstore.

Качайте файл с моего сервера.

Бонус

Прямо сейчас вы можете получить доступ к этому контенту для подписчиков. Достаточно ввести свой правильный емейл, и после подтверждения вам откроется полное содержимое этой страницы.

Получить бесплатно

Если на ваш емейл после подписки не приходит письмо для подтверждения уведомления (такое бывает иногда в зависимости от типа вашего ящика), то есть такие варианты:

  • Подождите минут 5-10.
  • Попробуйте другую почтовую сеть, лучше всего работают mail.yandex.ru или gmail.com.
  • Проверьте папку СПАМ - может нужное письмо именно там. После чего обязательно отметьте его и кликните - НЕ спам.
  • Если ничего не получилось, напишите мне в Контакты и укажите ссылку на страницу, версию браузера и примерный порядок действий.

Массовый редирект на новый домен

Ну и в заключении приведу простой код для массового редиректа всех страниц в магазине при переезде на новый домен или как в данном случае - когда хочется чтобы сайт был доступен с разных доменов, например, GrillKraft.ru и GrillCraft.ru.

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

RewriteEngine On
RewriteBase /
#RewriteCond %{HTTP_HOST} ^(www\.)?xn--80afpie2adrr0f\.xn--p1ai$ [NC,OR]
RewriteCond %{HTTP_HOST} ^(www\.)?grillcraft\.ru$ [NC]
RewriteRule ^(.*)$ http://grillkraft.ru/$1 [R=301,L]

Там где # - это строка значит закомментирована.
Она здесь, чтобы показать как делать редирект с кириллистического домена магазина.

Добавляйте эту конструкцию в .htaccess файл старого сайта и у вас будет происходить 301 редирект в вашем магазине со всех страниц старого домена на новый.

Массовый редирект внутри категории

Часто бывает, что поменялся адрес категории, а чпу для товаров остались прежними.

Нужно обязательно убедиться, что старый товар открывается без проблем. Ну типа такого: http://test1.moytop.com/kategoriya-new/zhenskaya-steganaya-kurtka-scanndi-cw2611

Если будет ошибка 404 (нет такой страницы, обновите кэш в Opencart и браузере и попробуйте еще раз). Опять ошибка? Тогда нужно прописывать редирект, если этого не сделать, то есть риск, что товары вылетят из индекса.

При этом товаров могут быть тыщи, согласитесь, нужно простое решение,  не перелопачивать же все товары вручную!

Если у вас установлен Ocstore, то там есть SEO PRO и это дело работает автоматически. НО! Не у всех! И не всегда! И не в во всем контенте! :whew:

Поэтому если по каким-то причинам автоматом не получилось сделать, то нужно вручную массово поменять URL категории и при этом оставить рабочими все товары (автоматически проставить редирект, чтобы не было 404 ошибки).

Вот такой код у меня работает в Опенкарте, проверял на 2.1 версии:


RewriteEngine On
RewriteBase /
RewriteRule ^kategoriya-old/?(.*)$ http://test1.moytop.com/kategoriya-new/$1 [R=301,L]

test1.moytop.com - вместо этого ваш сайт
kategoriya-old - старая категория
kategoriya-new - новая категория

Обязательно обратите внимание на следующее:

  • Добавляйте код повыше, можно вообще в начало htaccess, чтобы редирект работал раньше других правил.
  • Обращайте внимание на слеши / - они должны быть.

Успехов в нелегком деле настроки редиректов для Opencart. Хоть это и удачная система в целом (читайте выбор движка для магазина), но редиректы в ней сильно отличаются от других панелей.

Автор блога
“Измени свои привычки, и изменится твоя жизнь..”
Специалист по созданию и продвижению сайтов (SEO и реклама), фрилансер с многолетним опытом.
Статистика блога
  • Всего материалов на сайте: 197
  • Активных комментариев: 2 908
  • Работает онлайн: 6.1 лет
  • Читателей за это время: 1 588 603

Давай, оцени статью!



🎁   Поделитесь статьей в социальных сетях   🎁
Комментарии на блоге
Комментариев | (24)
  • Дмитрий

    Спасибо Вам огромное! Два дня лапатил этот 301 и тут всё получилось!

    Комментировать
  • Денис

    Спасибо! Метод помог настроить редиректы, долго мучался. :yes:

    Комментировать
  • Кирилл

    Отлично! То что надо... Спасибо огромное!

    Комментировать
  • Евгений

    Спасибо! Возникла такая ситуация, что 301 редирект с одной страницы сделал. Затем хотел сделать еще один, вставил строки в файл и появилась ошибка, которая не позволяет зайти на сайт. Почему так можете подсказать?

    Комментировать
    • Сергей Арсентьев

      где-то проблема в синтаксисе.
      что-то не так скопировалось или вставилось, или не туда, или что-то заменили.
      в htaccess важна каждая мелочь.
      попробуйте еще раз внимательно вернуть назад и внести новый редирект.

      Комментировать
  • Ярослав
    Ярослав

    А мне помогло вот так:

    RewriteCond %{QUERY_STRING} ^route=information/contact$
    RewriteRule ^(.*)$ contacts? [R=301,NC,L]

    Комментировать
  • Богдан
    Богдан

    Спасибо помогло, но не могу средиректить страницы типа "/index.php?route=product/category&path=33"

    Что можно с этим сделать?

    Комментировать
    • Сергей Арсентьев

      я бы вот так попробовал:

      ====================

      RewriteCond %{QUERY_STRING} category&path=33$
      RewriteRule ^(.*)$ https://moytop.com/? [R=301,L]

      ====================

      только свой адрес вместо moytop.com не забудьте.
      у меня на магазине такая связка работает, проверил сейчас.
      если и у вас получится, то хорошо.

      естественно, редиректы должны стоять после:
      RewriteBase /

      но перед системными редиректами, которые там идут стандартно в любом Опенкарте.

      Комментировать
      • Богдан
        Богдан

        Все работает, еще раз спасибо !

        Комментировать
      • Валентин
        Валентин

        Огромное спасибо! Мне это помогло!

        Комментировать
  • Сергей
    Сергей

    А можете подсказать, как прописать редирект чтобы перправляло с http://www.goldentimenn.ru/man/ на https://lux33.ru/mens/.
    Все конструкции перепробовал - ни одна корректно не работает.

    Комментировать
    • Сергей Арсентьев

      Если так не работает:
      RewriteCond %{QUERY_STRING} ^_route_=man/$
      RewriteRule ^(.*)$ https://lux33.ru/mens/? [R=301,L]
      то не подскажу... Может кто из читателей сталкивался.

      Комментировать
  • Александр

    А если у тебя 10 000 позиций со старого сайта, где изменились url ? Мы апачь не повесим таким способом ?

    Комментировать
    • Сергей Арсентьев

      Я бы не стал 10000 позиций вручную менять через список 301 редиректов.
      Обычно ведь редирект - это смена каких-то общих родительских URL, а не всех URL товаров, например:

      Было: https://site.com/category1/statya.html
      Стало: https://newsite.ru/category8901/statya.html

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

      Если же у вас поменялись все URL, например:
      Было: https://site.com/category1/statya.html
      Стало: https://newsite.ru/category8901/novye-statii.html

      И таких страниц очень много, то IMHO проще забить на это в принципе.
      Сделать редирект только основных категорий и всё.
      Поисковик через пару недель сам определит новые URL, в поиске обычно они не проседают, так как это низкочастотники.

      Комментировать
      • Александр

        Да, но у меня разбивается на 2 сайта, поэтому приходится делать карту редиректов.
        Я сделал по другому.
        Старые адреса и новые записал в базу данных по соответвию.
        Оттуда запросом забирал и перенаправлял php редиректом. Пришлось поменять немного контроллер.

        Комментировать
  • Анатолий

    RewriteCond %{QUERY_STRING} ^route=common/home$
    RewriteRule ^(.*)$ ? [R=301,NC,L]

    мне вот так помого

    Комментировать
  • Александр
    Александр

    Добрый день! Спасибо за помощь, тоже помогло! Подскажите, если мне надо сделать 301 редирект таким способом около 500 позиций, это будет нормально? Я имею ввиду, не будет ли каких-то негативных последствий для сайта, например он станет медленнее загружаться или еще что-то подобное?

    Комментировать
    • Сергей Арсентьев

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

      Комментировать
  • Артур
    Артур

    Спасибо Сергей за инструмент.Сделал вот такой редирект RewriteCond %{QUERY_STRING} ^_route_=modelnye_chekhly/kia_349/$
    RewriteRule ^(.*)$ https://elbinmotors.ru/modelnye-chekhly/kia/? [R=301,L]
    Не помогло.Вот скрин файла http://prntscr.com/mtieg0

    Комментировать
    • Сергей Арсентьев

      да не за что, видите, не всегда срабатывает, есть особенности у разных сайтов.
      попробуйте modelnye_chekhly/kia_349/ - на конце не указывать слеш.
      и/или наоборот после редиректа не указывать слеш RewriteRule ^(.*)$ https://elbinmotors.ru/modelnye-chekhly/kia

      то есть вот так например:
      1 --------------

      RewriteCond %{QUERY_STRING} ^_route_=modelnye_chekhly/kia_349/$
      RewriteRule ^(.*)$ https://elbinmotors.ru/modelnye-chekhly/kia? [R=301,L]

      2 --------------

      RewriteCond %{QUERY_STRING} ^_route_=modelnye_chekhly/kia_349$
      RewriteRule ^(.*)$ https://elbinmotors.ru/modelnye-chekhly/kia? [R=301,L]

      3 --------------

      RewriteCond %{QUERY_STRING} ^_route_=modelnye_chekhly/kia_349$
      RewriteRule ^(.*)$ https://elbinmotors.ru/modelnye-chekhly/kia? [R=301,L]

      и т.п.
      у меня бывало именно слеш влиял на работу.
      вдруг и вам поможет )

      Комментировать
  • Оксана
    Оксана

    Здравствуйте. Скажите, а возможно ли сделать так: была одна категория, теперь нужно разбить её на подкатегории, соответственно товары расходятся по подкатегориям. Можно ли такой сделать массовый редирект из категории в подкатегории?

    Комментировать
    • Сергей Арсентьев

      Здравствуйте, да, я так делал.
      Потому внизу и написал в разделе "Массовый редирект внутри категории"

      RewriteEngine On
      RewriteBase /
      RewriteRule ^kategoriya-old/?(.*)$ http://ваш домен/kategoriya-old/kategoriya-new/$1 [R=301,L]

      По идее должно сработать.

      Кроме того, обратите внимание, что при перемещении товаров из категории в подкатегорию и выставлении "Главной категории" (которая есть в Ocstore) происходит автоматический редирект (для Ocstore 2.3 и выше).
      То есть если вы вручную выставляете в товаре главную категорию новую, то редиректы делаются автоматически.

      Комментировать
  • Оксана
    Оксана

    При редиректе на подкатегорию, исчезает категория, т.е если я вызываю категорию ( в которой теперь сидят подкатегории) она сразу редиректит на подкатегорию, а нужно чтоб она осталась, а товары все бы редиректились из категории в подкатегории. Наверно это невозможно сделать :cry: .Но в вебмастере теперь весь товар который сидит уже в подкатегориях показывает ошибку 404

    Комментировать
    • Сергей Арсентьев

      А какая версия у вас, и Opencart или Ocstore?

      Комментировать
Добавить свой комментарий
Подробнее в Установки и настройки, Установки и настройки
Google опять пугает владельцев сайта: на этот раз SSL

Уже не в первый раз мировой гигант Google баламутит спокойствие в IT-сообществе. На этот раз он обещает придушить те сайты,...

Бесплатный SSL сертификат для сайта

Бесплатный сертификат SSL для своего сайта вполне реально можно получить, немного порыскав по интернету в поисках халявы. Прежде всего рекомендую...

Закрыть