Ajouter le nom des filtres dans le titre (meta title) des pages catégories

Difficulté :+++-

Ajouter le nom des filtres dans le titre (meta title) des pages catégoriesAfin d'accroître sa visibilité, ajouter le nom des filtres et leur valeur dans la balise meta title des pages catégories est très bénéfique. Cela empêche le dédoublonnage des titres et y insère des mots clés.

Lorsque l'on navigue dans les catégories de la boutique et que l'on filtre les résultats (SHOP BY), les metas sont strictement identiques sur toutes les pages de la catégorie. Les titres sont donc autant de fois dupliqués qu'il existe de combinaison de filtrage...

Imaginons qu'une catégorie dispose des filtres suivants :

  • Couleurs : Jaune / Vert / Bleu / Rouge
  • Taille : S / M / L / XL / XXL

(4 x 5) + 1, soit 21 pages dont le titre et la description seront identiques.

Afin de pallier à ce problème nous allons développer un module qui générera les titres automatiquement de cette manière :

  • Ma boutique - T-shirt Magento - Couleur rouge - taille XL

Pour l'URL :

  • t-shirt-magento.html?color=3&size=4

Architecture du module :

  • app/code/local/Magentix/MetasFilters/etc/
  • config.xml
  • app/code/local/Magentix/MetasFilters/Model/
  • Observer.php
  • app/etc/modules/
  • Magentix_MetasFilters.xml

Développement du module

Déclarons un nouvel Observer depuis le fichier de configuration :

app/code/local/Magentix/MetasFilters/etc/config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Magentix_MetasFilters>
            <version>0.1</version>
        </Magentix_MetasFilters>
    </modules>
    <global>
        <models>
            <metasfilters>
                <class>Magentix_MetasFilters_Model</class>
            </metasfilters>
        </models>
    </global>
    <frontend>
        <events>
            <controller_action_layout_generate_blocks_after>
                <observers>
                    <magentix_metasfilters_observer>
                        <type>singleton</type>
                        <class>metasfilters/observer</class>
                        <method>editMetas</method>
                    </magentix_metasfilters_observer>
                </observers>
            </controller_action_layout_generate_blocks_after>
        </events>
    </frontend>
</config>

La méthode editMetas se chargera de récupérer les filtres sélectionnés, de les juxtaposer, et de générer le nouveau titre :

app/code/local/Magentix/MetasFilters/Model/Observer.php

<?php

class Magentix_MetasFilters_Model_Observer {

        public function editMetas($observer) {
                $layout = $observer->getLayout();
                
                $_filters = Mage::getSingleton('catalog/layer')->getState()->getFilters();
                
                if(count($_filters)) {
                        $separator = ' '.Mage::getStoreConfig('catalog/seo/title_separator').' ';
                        $s = '';
                        foreach ($_filters as $_filter) $s .= $separator.strip_tags(Mage::helper('cms')->__($_filter->getName()).' '.$_filter->getLabel());
                        
                        if($headBlock = $layout->getBlock('head')) {
                                $head = array();
                                if(strlen(Mage::getStoreConfig('design/head/title_prefix'))) $head[Mage::getStoreConfig('design/head/title_prefix')] = '';
                                if(strlen(Mage::getStoreConfig('design/head/title_suffix'))) $head[Mage::getStoreConfig('design/head/title_suffix')] = '';
                                
                                $headBlock->setTitle(implode(array_filter(explode($separator,strtr($headBlock->getTitle().$separator.$s,$head))),$separator));
                        }
                }
        }
}

Il ne reste plus qu'à déclarer et activer le module :

app/etc/modules/Magentix_MetasFilters.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Magentix_MetasFilters>
            <active>true</active>
            <codePool>local</codePool>
        </Magentix_MetasFilters>
    </modules>
</config> 

Commentez cet article Ajouter le nom des filtres dans le titre (meta title) des pages catégories

franck le 20/06/2010 à 23:46:54
Bonjour et bravo pour votre site,
pouvez vous nous indiquer les fonctions dans le fichier Magentix_MetasFilters.xml?
cordialement
Magentix le 20/06/2010 à 23:47:10
J'ai ajouté le contenu du fichier à l'article ;)
Il s'agit juste du fichier permettant la déclaration et l'activation de l'extension, ainsi que le type de contribution (community ou local). De manière général les extensions récupérées depuis Magento Connect se placeront dans community (sauf oublie du développeur lors de la génération du package), dans local on y place les extensions "maison".
Julien le 20/06/2010 à 23:47:28
Génial comme possibilité. Sur le plan du référencement je ne sais pas s'il vaut mieux ça ou utiliser le rel=canonical...
Peut-on faire la même chose sur les pages de produits ? Je souhaiterais que le titre de la page devienne :
"texte fixe" + nom du produit + marque
Merci
Robin le 02/07/2010 à 12:51:23
Bonjour,

Le tuto est très clair et très efficace, il fonctionne a merveilles pour mes pages catégories. Félicitations

J'ai mis en place le système de filtres sur les pages de résultats de recherche, malheureusement l'observer ne modifie pas les metas pour ces pages. Après rapide investigation il s'agit de la ligne suivante qui ne renvoi aucun résultat:
Mage::getSingleton('catalog/layer')->getState()->getFilters();

Auriez vous une idée de ce qu'il faudrait modifier pour que cet observer soit efficace sur les pages de recherche avancée (quitte à rajouter un else) ?

Merci,
Robin.
david le 04/08/2010 à 17:16:04
Bonjour,
Le module fonctionne pour la version 1.4 ? Je ne vois pas cette fonctionnalité sur officeeasy.fr

Ajouter un commentaire

Cliquez pour générer un nouveau code

* champs obligatoires