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' вставлять нужно?

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


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

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

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

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

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

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

Войти

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

Войти


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

    • От 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  
    • От Exploits
      Модуль в xml формате убирает дубли страниц товара.
      Дубли это одна страница, которая доступна с более чем одного адреса. В Opencart все модули вывода товара генерируют "прямые ссылки" вида сайт/товар, хотя этот же товар привязан к категории и его правильная ссылка такая сайт/категория/товар.
      Мой модуль генерирует правильные (с учетом категории и иерархии категорий) ссылки товара.
      Модуль исправляет ссылки в таких местах:
      Модуль рекомендуемые Модуль последние Модуль лидеры продаж Модуль акции Список товаров производителя Блок рекомендуемые на странице товара Список товаров на странице всех акций (product/special) Список товаров на странице поиска Товары в списке сравнения Модуль не заменяет ни одного файла. Для работы требуется vqmod
      Протестирован на Opencart и Ocstore
      Версии 1541 - 1564
      В следующих версиях планирую сделать модуль который полностью избавит Opencart от дублей!!!
      Те кто приобретет модуль - все последующие версии будут бесплатно.
    • От king777
      Доброго времени суток. Уважаемые разработчики и опытные пользователи этого замечательного движка.
      У меня возникло такое затруднение. Необходимо в модальном окне, которое зашито в /product.tpl по нажатии на кнопку "Обновить" - изменять изображение капчи на новое. Модальное окно предназначено для отправления формы предзаказа. У меня на все мои манипуляции и варианты из интернета приходит одна и та же ошибка - скрин прикладываю. Вариантов использовал множество. Вот лишь некоторые.
       
      $('#img_id').attr('src', 'captcha.php?r=' + Math.random());  
      $('#capreload').live('click', function() { d = new Date(); $("#capim").attr("src", "index.php?route=information/contact/captcha/?"+d.getTime()); });  
      Кстати заранее соглашусь - что вариантов исполнения в сети очень много - но мне они почему-то не помогли.  Я еще начинающий пользователь движка и могу не понимать какой-то детали. 
      Помогите советом, кто знает.

    • От Svetka0403
      Заметила что яндекс начал индексировать левые страницы которых даже не существует, а именно если на странице категории после названия или перед ним написать любую информационную страницу, то будет отображаться страница категорий. Хотя должно выдавать 404 и страница не найдена.
       
      То есть
      сайт/категория
      сайт/категория/информация
      сайт/информация/категория
      Это все одна и та же страница категорий.
       
      Если яндекс и дальше будет индексировать подобные ссылки, то боюсь представить сколько будет дублей. Откуда он их вообще берет? В sitemap такого нет. А если тоже самое проделать со страницей товаров то будет 301 редирект.
      Кстати такая же проблема и на других сайтах на opencart, и даже на opencart2. 
       
      Лично у меня Версия 1.5.4.1, установлен SeoPro. Может это глюк seopro? Сайт
       
      Как исправить? Что посоветуете?
    • От 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. Не пойму от куда они берутся.
      Подскажите, пожалуйста, как их убрать 
  • Последние посетители   0 пользователей онлайн

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