Всегда показывать полный URL, включая категории для продукта

8

Для нашего интернет-магазина Magento (1.7.0.2) мы пытаемся оптимизировать структуру URL. Нам уже удалось кое-что улучшить, но в одном нам не удалось. Мы хотим использовать полный URL (включая категории) для всех наших продуктов. Например:

  • www.website.com/products/best-products/product
  • или: www.website.com/products/best-products для страницы категории

Это прекрасно работает при просмотре категорий и использовании хлебных крошек, но не при поиске. Затем он всегда использует www.website.com/product в качестве URL, скорее всего потому, что товар может быть в нескольких категориях, и он не знает, какую категорию использовать в результатах поиска.

Есть ли способ заставить это? Чтобы заставить его каким-то образом использовать «первую» категорию, или даже заставить его использовать какую-то категорию по умолчанию, которую вы можете выбрать? Я разработчик, поэтому я готов вносить изменения в код, но только если нет другого / более надежного способа. Любые советы или рекомендации приветствуются, большое спасибо заранее!

Нильс
источник

Ответы:

4

То, что вы хотите, не может быть достигнуто - афаик.

Проблема в том, что magento планируется с «продуктом во многих категориях». Проблема в том, что magento не предпочитает какую-либо категорию, и вместо этого она вообще не показывает ни одной категории.

Категории используются, когда вы щелкаете по категориям, это единственное место (afaik), где используется перезапись категории.

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

Следующая проблема заключается в том, что вы должны убедиться, что Google по-прежнему получает каждый раз один и тот же канонический URL, иначе у вас возникнет проблема с дублированным контентом ...

И последнее, что я имею в виду: я не уверен, что это хорошая идея с точки зрения SEO. Я не специалист по SEO, но кто-то сказал мне: чем короче URL, тем лучше ...

Фабиан Блехшмидт
источник
1

URL продукта печатается из:
Mage_Catalog_Model_Product::getProductUrl
этот метод проверяет, должен ли URL включать категорию, используяMage::registry('current_category')

Но коллекции обычно загружают переписанные URL-адреса в уникальном запросе (метод проверки Mage_Catalog_Model_Resource_Product_Collection::addUrlRewrite($categoryId = '')),
а затем Mage_Catalog_Model_Product::getProductUrlиспользуют этот 'request_path' из данных $ product.

Таким образом, возможный трюк может быть что-то вроде этого:

        // if we are in search results
    if( ! Mage::registry('current_category')){
        $myDesiredCategoryId = current($product->getCategoryIds()); // you could just use the first category registered with this product or define some other strategy
        $canonicalCategory = Mage::getModel('catalog/category')->load($myDesiredCategoryId);
        Mage::register('current_category', $canonicalCategory);
        $product->setRequestPath(null);
        $productUrlWithCategory = $product->getUrlModel()->getUrl($product);
        Mage::unregister('current_category');
    }

Это не самый быстрый способ (теперь каждый продукт в вашей коллекции должен загружать перезапись URL-адреса в отдельном запросе), но, возможно, самый простой, если вы ищете быстрое решение

Энрике
источник
0

с Magento 2. У нас есть эта опция на бэкэнд, где вы можете настроить вместо изменения маршрутизации URL

Прадип Викраманаяке
источник
-1

Я совершенно уверен, что то, что вам нужно, может быть достигнуто настройкой конфигурации системы Use Categories Path For Product URLs. Это можно найти под System->Configuration->Catalog->Catalog->Search Engin Optimization. После установки этого, я думаю, вам нужно будет переиндексировать.

Надеюсь это поможет.

Дэвид Мэннерс
источник
Нет, этот параметр работает, только если установлена ​​текущая категория (следовательно, если вы открываете продукт со страницы категории).
Симон