[Magento] SEO-przyjazna nawigacja warstwowa [Seo Layered Navigation]

Data dodania wpisu: 09-07-2010

Jak już powszechnie wiadomo, Magento optymalizacją SEO nie grzeszy. Dlatego Andrzej pisze kawałki kodu, żeby było lepiej:) Poniżej przedstawiam kolejne rozwiązanie, którego zastosowanie umożliwia uzyskanie zróżnicowanych tytułów oraz opisów (tagi meta) na podstronach kategorii podczas zawężania wg cech produktów. Domyślnie, nie ma znaczenia ile razy dokonamy zawężenia - metatagi zawsze pozostaną te same i jest to jeden z pretekstów dla Wielkiego Brata Google, żeby takie podstrony uznać za duplikaty;)

 

 Poniższy kawałek kodu wystarczy wkleić do pliku

 

app/code/local/Mage/Page/Block/Html/Head.php

 

Za pomocą tej metody są pobierane aktywne filtry, wg których odbywa się zawężanie w nawigacji warstwowej. Cechy te oraz ich wartości zawężania są dopisywane do zmiennej $layerFilters. Dodatkowo metoda obsługuje również pobieranie takich wartości jak parametry sortowania listy produktów oraz kolejność sortowania, a także numer strony.

    public $layerFilters;
    public $currentFilters;
    public $orderBy;
    public function getLayersMeta(){

        $this->layerFilters = '';
        $state_block = $this->getLayout()->createBlock("catalog/layer_state");
        $this->currentFilters = $state_block->getActiveFilters();

        if(!empty($this->currentFilters)) {
            foreach($this->currentFilters as $filter) {

                $this->layerFilters .= ($this->layerFilters!='') ? ', '.$filter->getName() : $filter->getName();

                $attribute = Mage::getModel('eav/config')->getAttribute('catalog_product', $filter->getFilter()->getRequestVar());
                foreach($attribute->getSource()->getAllOptions(true, true) as $option) {
                    if($filter->getValue() == $option['value']) {
                        $this->layerFilters .= ' - '.strtr($option['label'],array('"'=>"''"));
                    }
                }
            }
            $this->layerFilters = ($this->layerFilters!='') ? $this->__('Shopping by: ').$this->layerFilters.' - ' : '';
        }

        $this->orderBy = '';

        if($this->getRequest()->getParam('order') && $this->getRequest()->getParam('dir')) {
            $this->orderBy .= $this->__('Sort by ').$this->__(htmlspecialchars($this->getRequest()->getParam('order')));
            $this->orderBy .= (htmlspecialchars($this->getRequest()->getParam('dir')) == 'asc') ? ', '.$this->__('ascending') : ', '.$this->__('descending');
        }

        if($this->getRequest()->getParam('limit') && is_numeric($this->getRequest()->getParam('limit'))) {
            $this->orderBy .= (($this->orderBy!='') ? ', ' : $this->__('show')).' '.$this->getRequest()->getParam('limit').' '.$this->__('per page');
        }

        $this->orderBy = ($this->orderBy!='') ? $this->orderBy.' - ' : '';

        return $this->layerFilters.$this->orderBy;
    }

 

Mając wynik funkcji, wystarczy w tym samym pliku zmodyfikować dwie poniższe metody: getDescription() oraz getTitle()

public function getDescription()
    {
        if (empty($this->_data['description'])) {
            $this->_data['description'] = Mage::getStoreConfig('design/head/default_description');
        }
        return $this->getLayersMeta().$this->_data['description'];
    }

 

    public function getTitle()
    {
        if (empty($this->_data['title'])) {
            $this->_data['title'] = $this->getDefaultTitle();
        }
        return $this->getLayersMeta().htmlspecialchars(html_entity_decode(trim($this->_data['title']), ENT_QUOTES, 'UTF-8'));
    }

 

Dzięki temu uzyskujemy absolutnie unikalne metatagi w listach produktów i kategorii oraz podczas zawężania wg atrybutów produktów. Nic, tylko linkować w Google i pozycjonować:) Przykład zastosowania tego rozwiązania można zobaczyć w sklepie rowerowym 123rowery.pl (moje wdrożenie Magento, w ramach pracy w kombinet.pl) np. w kategorii rowerów górskich.

 

Dodatkowo, nic nie stoi na przeszkodzie, aby powyższą metodę (przynajmniej jej schemat) wykorzystać do generowania dodatkowej treści na podstronach kategorii - kolejne zróżnicowanie dla Google :)

 

Udanego pozycjonowania Magento! :)

Komentarze

1.7 mi nie dziala ale dobry pomysl
Dzieki
Bardzo dobry, ciekawy, interesujący i przydatny artykuł.
Comments closed...