admin Опубликовано 12 марта, 2022 Поделиться Опубликовано 12 марта, 2022 В CMS Opencart очень много есть преимуществ перед аналогами. Однако эта система имеет и свои недостатки. Самым серьезным из которых, как я считаю, являются – дубли страниц. В CMS Opencart очень много есть преимуществ перед аналогами. Это простота кода, множество шаблонов, модулей, великолепное сообщество, где с вероятностью до 80% (мое мнение) можно найти нужную информацию или доработку. Однако эта система имеет и свои недостатки. Самым серьезным из которых, как я считаю, являются – дубли страниц. Почему он самый страшный – да потому что из-за повторяющегося контента на сайте поисковые системы, мягко говоря, не в восторге. Индексировать ваш сайт они будут, но на каких местах в выдаче вы будете — это уже вопрос. Что такое дубли страниц? Это одинаковый контент на сайте, который доступен по разным адресам. Например, карточка товара «Ноутбук Asus» доступна по адресу сайт/ноутбуки/для работы/Ноутбук-Asus. Но в случае, если вы настроите модуль рекомендуемые, новинки или другой подобный модуль, который есть с коробки в Opencart, вы получите целую дюжину дублей на сайте. Уверяю, что в выдаче вы просядете, не факт опять же, но вероятность огромная. Любой из модулей вывода товаров генерирует неправильную “Прямую” ссылку вида сайт/Ноутбук-Asus производя при этом разные адреса для одной и той же страницы. Еще мне не понятно, зачем делать ссылку в хлебных крошках на главную страницу вида сайт/index.php?route=common/home, если намного проще ставить тот же слеш «/» и получилась бы та же ссылка без лишних параметров, которые совершенно не нужны. Та же проблема есть при переходе на главную страницу кликая на логотип. Итак, подытожим и опишем список всех дублей в Opencart: Доступность одного товара по разным адресам. (модули последние, рекомендуемые и т.д.) Ссылки на главную в виде сайт/index.php?route=common/homе Доступность главной страницы сайта по адресам — http://сайт — http://сайт/ — http://сайт/index.php — http://сайт/index.php?route=common/homе Ссылки при пейджинге страницы (как следствие одинаковые мета теги и описание категории, чего лучше не допускать) Другие (исследую) Как же избавиться от неправильных ссылок, которые плодят дубли на сайте? Самый простой вариант, но не совсем правильный, это поставить в админке в настройках «ЧПУ товаров с категориями» в положение нет. В таком случае в адресах страниц у нас не будет иерархии вложенности. Такой вариант еще подходит для магазинов, которым специально нужны короткие ссылки на товар, без соблюдения категорий. Но по правилам хорошего тона для поисковых систем, как и для людей, удобнее будет использовать URL с соблюдением вложенности (иерархии). Для удаления разных адресов на один и тот же товар нам нужно внести поправки в модулях и местах, которые генерируют «прямые» ссылки. Из модулей будем редактировать: Хиты продаж, Рeкомендуемые, Последние и Aкции. Все эти модули есть в стандартной комплектации Opencart и OcStore. Для полноценного избавления нам надо будет отредактировать еще места неправильных ссылок: страница производителя, блок рекомендуемых в описании товара, страница акций (product/special), страница с результатами поска, страница сравнения товаров. В выше перечисленных модулях не предусмотрена ссылка с учетом категории, в котором находится товар, нам же надо её сделать, да и еще с соблюденной иерархией категорий. В моем методе можно получить ссылки с уровнем вложенности до 5 — чего для 95% магазинов хватит. Для определения категории товара нам надо добавить функцию в catalog/model/catalog/category.php Перед public function getCategoryLayoutId($category_id) { Добавляем public function getProductPath($product_id) { $category_id = $this->db->query("SELECT category_id FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . (int)$product_id . "'"); if(isset($category_id->rows[0]['category_id']) && ($category_id->rows[0]['category_id'] != 0)){ $parent_id = $this->db->query("SELECT parent_id FROM " . DB_PREFIX . "category WHERE category_id = '" . (int)$category_id->rows[0]['category_id'] . "'"); if(isset($parent_id->rows[0]['parent_id']) && ($parent_id->rows[0]['parent_id'] != 0)){ $category = $parent_id->rows[0]['parent_id'] . "_" . $category_id->rows[0]['category_id']; $path_id_2 = $this->db->query("SELECT parent_id FROM " . DB_PREFIX . "category WHERE category_id = '" . $parent_id->rows[0]['parent_id'] . "'"); if(isset($path_id_2->rows[0]['parent_id']) && ($path_id_2->rows[0]['parent_id'] != 0)){ $category = $path_id_2->rows[0]['parent_id'] . "_" . $parent_id->rows[0]['parent_id'] . "_" . $category_id->rows[0]['category_id']; $path_id_3 = $this->db->query("SELECT parent_id FROM " . DB_PREFIX . "category WHERE category_id = '" . (int)$path_id_2->rows[0]['parent_id'] . "'"); if(isset($path_id_3->rows[0]['parent_id']) && ($path_id_3->rows[0]['parent_id'] != 0)){ $category = $path_id_3->rows[0]['parent_id'] . "_" . $path_id_2->rows[0]['parent_id'] . "_" . $parent_id->rows[0]['parent_id'] . "_" . $category_id->rows[0]['category_id']; $path_id_4 = $this->db->query("SELECT parent_id FROM " . DB_PREFIX . "category WHERE category_id = '" . (int)$path_id_3->rows[0]['parent_id'] . "'"); if(isset($path_id_4->rows[0]['parent_id']) && ($path_id_4->rows[0]['parent_id'] != 0)){ $category = $path_id_4->rows[0]['parent_id'] . "_" . $path_id_3->rows[0]['parent_id'] . "_" . $path_id_2->rows[0]['parent_id'] . "_" . $parent_id->rows[0]['parent_id'] . "_" . $category_id->rows[0]['category_id']; } } } }else{ $category = $category_id->rows[0]['category_id']; } }else{ $category = false; } return $category; } Далее переходим в контроллер нужного нам модуля и делаем изменения в URL с учетом категории товара. Итак по модулям: Хиты продаж Открываем контроллер (catalog/controller/module/bestseller.php) В начало функции подключаем модель: $this->load->model('catalog/category'); Перед if ($result['image']) { Вставляем $product_path = $this->model_catalog_category->getProductPath($result['product_id']); if($product_path){ $href = $this->url->link('product/product', 'path=' . $product_path . '&product_id=' . $result['product_id']); }else{ $href = $this->url->link('product/product', 'product_id=' . $result['product_id']); } И строку 'href' => $this->url->link('product/product', 'product_id=' . $result['product_id']) Заменяем на: 'href' => $href Pекомендуемые Открываем контроллер (catalog/controller/module/featured.php) В начало функции подключаем модель: $this->load->model('catalog/category'); Перед if ($product_info['image']) { Вставляем $product_path = $this->model_catalog_category->getProductPath($product_id); if($product_path){ $href = $this->url->link('product/product', 'path=' . $product_path . '&product_id=' . $product_info['product_id']); }else{ $href = $this->url->link('product/product', 'product_id=' . $product_info['product_id']); } И строку 'href' => $this->url->link('product/product', 'product_id=' . $product_info['product_id']) Заменяем на: 'href' => $href Последние товары Открываем контроллер (catalog/controller/module/latest.php) В начало функции подключаем модель: $this->load->model('catalog/category'); Перед if ($result['image']) { Вставляем $product_path = $this->model_catalog_category->getProductPath($result['product_id']); if($product_path){ $href = $this->url->link('product/product', 'path=' . $product_path . '&product_id=' . $result['product_id']); }else{ $href = $this->url->link('product/product', 'product_id=' . $result['product_id']); } И строку 'href' => $this->url->link('product/product', 'product_id=' . $result['product_id']) Заменяем на: 'href' => $href Aкции Открываем контроллер (catalog/controller/module/special.php) В начало функции подключаем модель: $this->load->model('catalog/category'); Перед if ($result['image']) { Вставляем $product_path = $this->model_catalog_category->getProductPath($result['product_id']); if($product_path){ $href = $this->url->link('product/product', 'path=' . $product_path . '&product_id=' . $result['product_id']); }else{ $href = $this->url->link('product/product', 'product_id=' . $result['product_id']); } И строку 'href' => $this->url->link('product/product', 'product_id=' . $result['product_id']) Заменяем на: 'href' => $href Стандартные модули в Opencart мы избавили от возможности генерировать дубли страниц в магазине. Далее переходим на отдельные места, где неправильные ссылки. Страница производителя Открываем контроллер (catalog/controller/product/manufacturer.php) В начало функции подключаем модель: $this->load->model('catalog/category'); Перед $this->data['categories'][$key]['manufacturer'][] = array( Вставляем $product_path = $this->model_catalog_category->getProductPath($result['product_id']); if($product_path){ $href = $this->url->link('product/product', 'path=' . $product_path . '&product_id=' . $result['product_id']); }else{ $href = $this->url->link('product/product', 'product_id=' . $result['product_id']); } И строку 'href' => $this->url->link('product/manufacturer/info', 'manufacturer_id=' . $result['manufacturer_id']) Заменяем на: 'href' => $href Блок рекомендуемых на странице товара Открываем контроллер (catalog/controller/product/product.php) Перед if ($result['image']) { Вставляем $product_path = $this->model_catalog_category->getProductPath($result['product_id']); if($product_path){ $href = $this->url->link('product/product', 'path=' . $product_path . '&product_id=' . $result['product_id']); }else{ $href = $this->url->link('product/product', 'product_id=' . $result['product_id']); } И строку 'href' => $this->url->link('product/product', 'product_id=' . $result['product_id']) Заменяем на: 'href' => $href Страница акций(product/special) Открываем контроллер (catalog/controller/product/special.php) В начало функции подключаем модель: $this->load->model('catalog/category'); Перед if ($result['image']) { Вставляем $product_path = $this->model_catalog_category->getProductPath($result['product_id']); if($product_path){ $href = $this->url->link('product/product', 'path=' . $product_path . '&product_id=' . $result['product_id']); }else{ $href = $this->url->link('product/product', 'product_id=' . $result['product_id']); } И строку 'href' => $this->url->link('product/product', 'product_id=' . $result['product_id']) Заменяем на: 'href' => $href Страница результатов поиска Открываем контроллер (catalog/controller/product/search.php) В начало функции подключаем модель: $this->load->model('catalog/category'); Перед if ($result['image']) { Вставляем $product_path = $this->model_catalog_category->getProductPath($result['product_id']); if($product_path){ $href = $this->url->link('product/product', 'path=' . $product_path . '&product_id=' . $result['product_id']); }else{ $href = $this->url->link('product/product', 'product_id=' . $result['product_id']); } И строку 'href' => $this->url->link('product/product', 'product_id=' . $result['product_id']) Заменяем на: 'href' => $href Страница сравнения товаров Открываем контроллер (catalog/controller/product/compare.php) В начало функции подключаем модель: $this->load->model('catalog/category'); Перед if ($product_info['image']) { Вставляем $product_path = $this->model_catalog_category->getProductPath($product_info['product_id']); if($product_path){ $href = $this->url->link('product/product', 'path=' . $product_path . '&product_id=' . $product_info['product_id']); }else{ $href = $this->url->link('product/product', 'product_id=' . $product_info['product_id']); } И строку 'href' => $this->url->link('product/product', 'product_id=' . $product_info['product_id']) Заменяем на: 'href' => $href 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.