Перейти к содержанию
teknik2008

Избавляемся от дублей в OpenCart

Рекомендуемые сообщения

Избавляемся от дублей в OpenCart

На днях мне поставили задачу запустить в кратчайшие сроки интернет-магазин. Я начал искать подходящее решение среди готовых CMS и мой выбор пал на OpenCart (Версия 1.5.5.1). Данная CMS как и все не идеальна и поэтому я начал ковырять ее и изучать как там все устроено. 

Первое что я заметил это куча дублей при включенном ЧПУ. Проблема дублей товаров решается при помощи тега rel='canonical' а вот с категориями дело обстояло намного хуже. Каждая категория была доступна по +100500 URL. 
Например категория site.ru/category/podcategory будет доступна по следующим URL
site.ru/category/podcategory/a 
site.ru/category/podcategory/ab
site.ru/category/podcategory/abc
и так до бесконечности. 

Решается проблема не сложно.
Открываем файл catalog/controller/common/seo_url.php ищем 39 строку $this->request->get['route'] = 'error/not_found'; и после ее вставляем 
return $this->forward($this->request->get['route']);

Эта проблема возникала из-за того что URI /category/podcategory/abc разбивался на массив и при обходе его циклом, каждый элемент массива проверялся, при помощи запроса к БД, соответствует ли он категории или продукту, если нет то для get['route'] присваивалось значение error/not_found. 

В нашем случае при первой итерации цикла get['path'] будет присваиваться ID категории «category», при второй итерацииget['path'] будет перезаписываться на ID категории «podcategory» при третей итерации get['route'] присваивалось значение error/not_found потому что продукта abc не существует. 

Все выглядит хорошо, но в следующем блоке if-ов get['route'] перезаписывается на product/category. Это происходит из-за того что у нас есть get['path'] соответствующее ID категории, что позволяет зайти под условие и перезаписатьget['route'].

Данную проблему я решил тем что, возвращаю return $this->forward($this->request->get['route']); сразу же после того как get['route'] станет равным error/not_found не дожидаясь пока она перезапишется. 

Хоть проблема дублей товаров и решается тегом rel='canonical', но все же данное изменение позволяет избавиться от большинства и остается только несколько. 
Теперь товар не будет доступен по таким URL:
site.ru/category/podcategory123/tovar
site.ru/category/podcategory123456/tovar
site.ru/category123/podcategory/tovar
и так далее.
Избавляемся от дублей в OpenCart
На днях мне поставили задачу запустить в кратчайшие сроки интернет-магазин. Я начал искать подходящее решение среди готовых CMS и мой выбор пал на OpenCart (Версия 1.5.5.1). Данная CMS как и все не идеальна и поэтому я начал ковырять ее и изучать как там все устроено. 

Первое что я заметил это куча дублей при включенном ЧПУ. Проблема дублей товаров решается при помощи тега rel='canonical' а вот с категориями дело обстояло намного хуже. Каждая категория была доступна по +100500 URL. 
Например категория site.ru/category/podcategory будет доступна по следующим URL
site.ru/category/podcategory/a 
site.ru/category/podcategory/ab
site.ru/category/podcategory/abc
и так до бесконечности. 

Решается проблема не сложно.
Открываем файл catalog/controller/common/seo_url.php ищем 39 строку $this->request->get['route'] = 'error/not_found'; и после ее вставляем 
return $this->forward($this->request->get['route']);

 

Эта проблема возникала из-за того что URI /category/podcategory/abc разбивался на массив и при обходе его циклом, каждый элемент массива проверялся, при помощи запроса к БД, соответствует ли он категории или продукту, если нет то для get['route'] присваивалось значение error/not_found. 

В нашем случае при первой итерации цикла get['path'] будет присваиваться ID категории «category», при второй итерацииget['path'] будет перезаписываться на ID категории «podcategory» при третей итерации get['route'] присваивалось значение error/not_found потому что продукта abc не существует. 

Все выглядит хорошо, но в следующем блоке if-ов get['route'] перезаписывается на product/category. Это происходит из-за того что у нас есть get['path'] соответствующее ID категории, что позволяет зайти под условие и перезаписатьget['route'].

Данную проблему я решил тем что, возвращаю return $this->forward($this->request->get['route']); сразу же после того как get['route'] станет равным error/not_found не дожидаясь пока она перезапишется. 

Хоть проблема дублей товаров и решается тегом rel='canonical', но все же данное изменение позволяет избавиться от большинства и остается только несколько. 
Теперь товар не будет доступен по таким URL:
site.ru/category/podcategory123/tovar
site.ru/category/podcategory123456/tovar
site.ru/category123/podcategory/tovar
и так далее.

Материл взят с сайта http://habrahabr.ru, ссылка на статью http://habrahabr.ru/sandbox/65278/

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А куда этот самый rel='canonical' вставлять нужно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Похожий контент

    • От travkovs
      Доброго всем!
      Есть проблема эта у многих, и в форумах разных пишут про одну и ту же задачу, но решения так и не увидел!
      Может кто знает, решал вопрос подобный подскажите. Может модуль какой дополнительный!
      В других движках с которыми работал не видел такой проблемы, а в ОпенКарте она есть.
      Просьба не предлагать других решений ввиде разнообразия урлов. Нужно именно так как описываю и ни как иначе.
      .
      Описываю суть!
      .
      Необходимо сделать так чтоб в разных категориях можно было делать продолжение одинаковыми урлами .... именно так надо! 
      Это не является ошибкой и не надо писать что SEOурл (его часть) не может повторяться.  Мне нужно часть урла а не весь урл. Повторюсь что впервые эту проблему увидел только в ОпенКарте
      .....
      В разных категориях не применить, например, название одного бренда:
      .../pogruzchiki / dizelnye /maximal/
      .../pogruzchiki / elektricheskie /maximal/
      ...
      УРЛ - это весь уникальный адрес а не его часть. Какие-то движки с которыми я работал, учитывают все части урла проверяя дублированность, а в ОпенКарте этот момент не продуман
      ...
      По правилам СЕО это не ошибка
      А по ОпенКарту скорее недоработка
      ..... 
      Например в одном магазине могут быть 
      - лыжи/ АРЗАМАС
      - перчатки/ АРЗАМАС
      в одном случае это может быть бренд, а в другом просто название не относящееся к бренду
      ... и ОпенКарт не даст это сделать
      ....
      ===========================
      в таком виде делать плагиатить ссылку это некрасиво (не вариант), не гигиенично совсем
      maximal-1
      maximal-2
      maximal-3
      maximal-4
      maximal-5
      .
      Просьба направить, помочь, понять и простить )
      .

    • От Exploits
      Скачать/Купить дополнение


      Удаление дублей страниц без сеопро
      Модуль в xml формате убирает дубли страниц товара.
      Дубли это одна страница, которая доступна с более чем одного адреса. В Opencart все модули вывода товара генерируют "прямые ссылки" вида сайт/товар, хотя этот же товар привязан к категории и его правильная ссылка такая сайт/категория/товар.
      Мой модуль генерирует правильные (с учетом категории и иерархии категорий) ссылки товара.
      Модуль исправляет ссылки в таких местах:
      Модуль рекомендуемые Модуль последние Модуль лидеры продаж Модуль акции Список товаров производителя Блок рекомендуемые на странице товара Список товаров на странице всех акций (product/special) Список товаров на странице поиска Товары в списке сравнения Модуль не заменяет ни одного файла. Для работы требуется vqmod
      Протестирован на Opencart и Ocstore
      Версии 1541 - 1564
      В следующих версиях планирую сделать модуль который полностью избавит Opencart от дублей!!!
      Те кто приобретет модуль - все последующие версии будут бесплатно.
      Добавил Exploits Добавлено 18.06.2014 Категория Прочее Системные требования Метод активации Без активации Ioncube Loader Нет OpenCart 1.5.6.3 ocStore 1.5.5.1.2 OpenCart.Pro, ocShop  
    • От dantes01
      300.00 руб
      Скачать/Купить дополнение


      Уникальный шаблон магазина одежды
      Шаблон отлично подойдет для магазина одежды, обуви и других товаров.
      Инструкция по установке и настройки прилагается.
      Дополнительный функционал
      Телефон, режим работы, доставка указываются в настройках шаблона
      Совместимость
      На сегодняшний день шаблон совместим с osStore 1.5.5.1.1,
      Техническая поддержка
      Техническая поддержка покупателей шаблона осуществляется только через личные сообщения на данном форуме и доступна только пользователям, числящимся в списке покупателей шаблона.
      Тестировался IE8+, Opera, Chrome, FF 4+
      Демо шаблона
      Добавил dantes01 Добавлено 10.03.2014 Категория Платные шаблоны  
    • От MikhailGrigor
      При проверки обнаружены дубли title, как их исправить ума не приложу, вот страницы с дублирующими TITLE:
      https://kredo-shop.com.ua/aromaterapia/  http://kredo-shop.com.ua/aromaterapia/?page=2  https://kredo-shop.com.ua/aromaterapia/?page=3  https://kredo-shop.com.ua/aromaterapia/?page=4   
    • От hegst
      Из-за просчета одного товарища, на сайте появились дубли, а именно:
      Не настроили ЧПУ, добавили товар, после выявили проблему с не подключенным ЧПУ, устранили проблему. Но теперь появились дубли такого вида:
      одна и та же страница имеет URL:
      Https://название магазина/index.php?route=product/product&path=60_154_155&product_id=1308
      И новое  - Https://название магазина/категория/подкатегория/товар
       
      Так же, есть URL такого вида, после переименования категории:
       
      Сейчас выглядит так - https://название магазина/tabletpc/xiaomi-tablet/
      А было так https://название магазина/tabletpc/Xiaomi-Tablet/
       
      И эти страницы есть в поиске. Подскажите, что можно. сделать? Удалить через вебмастер? или как то закрыть в роботс? так как дубли насколько я зная плохо сказываются на сайте.
       
       
       
       

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.