teknik2008

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

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

teknik2008    1

Избавляемся от дублей в 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/

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


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

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

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


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

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

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

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

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

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

Войти

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

Войти


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

    • От wereh
      Всем привет!
      Сделал магазин автоаксесуаров. Недавно зашел в вебмастер и ужаснулся! Огромное количество дублей такого плана:
       
      /avtomobilnye-kovriki/bagazhnik/?page=0
      /avtomobilnye-kovriki/bagazhnik/?page=15
      /avtomobilnye-kovriki/bagazhnik/?page=2
      /avtomobilnye-kovriki/bagazhnik/?page=27
      /avtomobilnye-kovriki/bagazhnik/?page=3
      /avtomobilnye-kovriki/bagazhnik/?page=4
      /avtomobilnye-kovriki/bagazhnik/?page=5
      /avtomobilnye-kovriki/bagazhnik/?page=7
      /avtomobilnye-kovriki/bagazhnik/?page=8
       
      В автоковриках для багажника как раз 27 страниц с ковриками. А вот в других категориях по 2-3 страницы, но в поиск выкидывают дубли ?page=27. Не пойму от куда они берутся.
      Подскажите, пожалуйста, как их убрать 
    • От Prusov
      Добрый день!
      Специалисты, выручайте чайников)))
      У нас в Opencart 1.5.5.1 товары экспортируются в файл xls, но не импортируются ни на одном компьютере в офисе (раньше импортировались)(((
      При этом у человека, который находится удалённо, всё отлично импортируется, товары добавляются в базу данных.
       
      В чём дело может быть?((((
    • От irybka
      При удалении старого товара замечаю в search console ошибки, в виде https://site.com/категория/товар?tag=Apple. Редирект старого урла на новый делаю, но вот прописанные теги к товару почему-то вылазят как 404 ошибка именно с куском старого урла. Как поступить в такой ситуации? Спасибо.
    • От romankovbasa
      Здравствуйте. В распоряжение достался сайт с бесплатной версии Seo pack.
       
      Много вреда от него - дубли страниц, дубли от двух языков, в базе данных беспорядок, бывает в url страшные названия вылазят.
       
      Как его искоренить из сайта или решить эти проблемы установкой seo pro с SeoGen, например.
       
      Возможно кто-то сталкивался с подобной проблемой и поделится решением. Заранее благодарен!
       
      Cайт на ocStore 1.5.5.1.1
    • От limpopo113
      Сайт работает на протяжении трех лет, но все это время, с ним были муторные проблемы, которые требует тщательного анализа, от опытного человека. Нужно удалить ненужные плагины, удаление через админ-панель приводит к обвалу сайта. Почта - limpopo113@gmail.com Если интересна такого рода работа, то пишите.
  • Последние посетители   0 пользователей онлайн

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