Редирект с url товара с категорией на без категории на OpenCart

301 Moved Permanently

Из данной статьи вы узнаете как реализовать редирект 301 со страницы товара с категорией на страницу товара без категории на CMS OpenCart 4 (проверено на 4 версии OpenCart, должно работать и на прошлых версиях).

Многие кто создавал свой собственный интернет-магазин на CMS OpenCart сталкивались с такой проблемой, что URL-адрес страницы товара имел такой вид:

  • https://product/категория/товар
  • https://product/товар/категория
  • https://product/категория/подкатегория/товар
  • https://product/товар/категория/подкатегория

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

В данной статье мы рассмотрим, как я привёл все ссылки на товары к такому виду: https://product/товар. Все остальные виды ссылок на товар, которые я указал выше при проверке, будут выдавать код ответа сервера "301 Moved Permanently".

Даную проблему я решил таким образом:

  • В контроллере по пути "\catalog\controller\product\product.php"

    в файле product.php добавить после кода:

    $data['column_left'] = $this->load->controller('common/column_left');
                $data['column_right'] = $this->load->controller('common/column_right');
                $data['content_top'] = $this->load->controller('common/content_top');
                $data['content_bottom'] = $this->load->controller('common/content_bottom');
                $data['footer'] = $this->load->controller('common/footer');
                $data['header'] = $this->load->controller('common/header');

    вот этот код: (это примерно 517 строка, у вас может быть по другому)

    if (isset($this->request->get['path'])) {
                $this->response->redirect($this->url->link('product/product', '&product_id=' . $this->request->get['product_id']));
            }

 

Примерно это должно выглядеть так:

Код редиректа 301 OpenCart

И после этого в файле response.php (путь: system/library/response.php), найти код "public function redirect(string $url, int $status = 302): void {
        header('Location: ' . str_replace(['&', "\n", "\r"], ['&', '', ''], $url), true, $status);
"

заменить значение "int $status = 302" на значение 301. Т.е. вместо кода ответа сервера 302 поставить код 301.

Файл response отвечает за формирование и отправку HTTP-ответа клиенту. Обычно он включает в себя следующие элементы:

  • Код состояния HTTP (например, 200 для успешного запроса, 404 для страницы не найдена и т. д.).
  • Заголовки (headers), такие как Content-Type, Cache-Control, Cookies и т. д.
  • Тело ответа (например, HTML-код страницы или JSON-ответ).

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

  • Кстати тег "canonical" формирует правильный вид ссылки: https://product/товар

Смотрим наглядный пример:

На данном скриншоте приведён код ответа сервера "200 OK", т.е. вид ссылки, который мы хотим видеть.

Редирект 301 на OpenCart

  • На следующем скриншоте мы видим код ответа "301 Moved Permanently". Тот же товар, но в ссылке присутствует категория (подкатегория) в начале ссылки:

Редирект 301 на OpenCart категория в начале ссылки

  • И последний скриншот показывает код отвера "301 Moved Permanently", но категория (подкатегория) в ссылке уже в самом конце:

Редирект 301 на OpenCart категория в конце ссылки

Если вам помогла данная статья, не забываем посетить наш интернет-магазин: Tchepuha.ru

 


ДАННЫЙ ИНТЕРНЕТ-МАГАЗИН ПРОДАЁТСЯ   СВЯЗАТЬСЯ В TELEGRAM