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
Sklepikarz
24-11-2011 20:52
Dodaj komentarz