Dans cette vidéo je vous explique comment pallier un problème de Prestashop pour que les noms de vos catégories puissent booster le référencement de Prestashop.
Avant de débuter votre lecture, si vous souhaitez améliorer le SEO de votre boutique en ligne, téléchargez gratuitement notre livre blanc seo.
Code du fichier « Category.php »
[php]<?php
class Category extends CategoryCore
{
public $seo_title;
public function __construct($id_category = null, $id_lang = null, $id_shop = null)
{
parent::$definition[‘fields’][‘seo_title’] = array(‘type’ => self::TYPE_STRING, ‘lang’ => true, ‘validate’ => ‘isCatalogName’, ‘required’ => false, ‘size’ => 128);
parent::__construct($id_category, $id_lang, $id_shop);
}
}
Code du fichier « AdminCategoriesController.php »
[php]<?php
class AdminCategoriesController extends AdminCategoriesControllerCore
{
public function renderForm()
{
$this->fields_form_override =array(
array(
‘type’ => ‘text’,
‘label’ => $this->l(‘Seo title’),
‘name’ => ‘seo_title’,
‘lang’ => true,
‘required’ => false,
)
);
return parent::renderForm();
}
}
Bonjour ici Olivier Clémence du blog reussir-mon-ecommerce.fr. Aujourd’hui dans cette vidéo je voulais vous montrer comment vous allez pouvoir optimiser le nom de vos catégories pour améliorer le référencement de votre boutique Prestashop et quand je parle de nom de catégories je parle des balises h1 qu’on retrouve sur les pages des catégories.
Donc je vais vous montrer tout de suite de quoi je parle. Je vais aller sur une boutique donc c’est une boutique de test Prestashop que je viens d’installer et on va aller par exemple dans la catégorie t-shirts. Et ici, si on regarde le titre de la catégorie qui apparaît là on va voir qu’il est contenu dans une balise h1 ici.
Alors pourquoi les balises h1 ? Donc c’est un résumé rapide. En fait les balises h1 c’est une façon de hiérarchiser votre contenu. Vous avez des balises h1, h2, h3 etc et les balises h1 ont un poids plus important pour le référencement donc c’est intéressant d’y mettre vos mots-clés. Mais pour le coup justement ici le mot-clé qu’on a c’est « t-shirt » et à priori comme on est dans une catégorie de t-shirts pour femmes ce n’est pas très pertinent comme mot-clé. Ce serait plus intéressant d’essayer de se positionner sur un mot-clé tel que « t-shirts femme » ou « t-shirts femme made in France » par exemple. Il faut étudier les mots-clés qui sont intéressants mais clairement se positionner juste sur le mot-clé « t-shirts » à priori ça n’a pas d’intérêt. Donc c’est plus intéressant de trouver un mot-clé plus précis.
Donc imaginons qu’on veut se positionner sur le mot-clé « t-shirts femme made in France », on va aller modifier le nom de notre catégorie mais on va se rendre compte qu’on a un problème justement si on fait ça. Donc je vais dans ma catégorie. Donc ma catégorie est là, je la modifie et je lui mets le nom « t-shirts femme made in France ». Si je retourne sur ma catégorie, je rafraîchie la page et donc là on voit bien que j’ai « t-shirts femme made in France » qui apparaît là. Donc qui apparaît bien dans ma balise h1. Mais le problème c’est que le nom que j’ai indiqué ici, dans ce champ là, il est utilisé aussi dans mes menus. Donc il est utilisé dans mon fil d’Ariane, ce qui n’est pas très grave, mais on voit qu’il est utilisé aussi ici. Donc je vous laisse imaginer si vous commencez à mettre ce type de nom partout vous allez vous retrouver avec un menu qui va être astronomique, extrêmement grand et inutilisable. On le voit aussi ici, on commence à avoir un nom qui est très long. Donc si vous commencez à avoir beaucoup de noms de la même manière, ça va être compliqué au niveau du menu.
Donc une des solutions pour régler le problème, parce qu’il y a deux solutions. Une des solutions ça va être de remettre le nom court qui est adapté à vos menus. Voilà donc dans mon menu, j’ai bien récupéré le mot plus court et après la solution ça va être de deux choses : dans votre description de catégorie, vous allez ici dans la description où vous mettez le nom du mot-clé que vous voulez mettre en avant et vous lui mettez un titre 1. Donc ça lui donnera en fait la même chose, une balise h1. Ok, vous faites enregistrer. Si on retourne ici, voilà, on voit que là il apparaît ici. Le problème c’est qu’il apparaît en double, là et là. Donc la solution pour corriger ce problème là, c’est d’aller modifier le fichier template de votre thème et de supprimer tout simplement le nom qui est mis automatiquement et qui réutilise le nom que vous avez mis pour votre catégorie.
Donc je vais vous montrer comment faire ça. Vous allez dans votre thème et vous cherchez « category.tpl ». Donc vous recherchez le h1, voilà il est ici, et vous allez tout simplement le supprimer. Alors éventuellement, si vous ne voulez pas le supprimer, vous mettez en commentaires, comme ceci. Donc c’est « <!– » devant votre ligne et après votre ligne vous mettez « –> » et ça mettra votre ligne en commentaires. Vous sauvegardez et ensuite vous allez dans l’administration de votre site, dans « Paramètres avancés/Performances » et vous videz le cache. Une fois que le cache est vidé, vous retournez sur votre page donc là on l’a toujours. On rafraîchit et voilà, il a disparu.
Alors il y a aussi celui là à supprimer donc on va le supprimer également. Donc il n’est pas dans la h1 mais c’est le span class= »category-name », on va aller chercher ça tout de suite. Voilà, il est là alors on va faire exactement la même chose. On va le mettre en commentaires. Je sauvegarde et je retourne vider le cache. Et voilà.
Donc là maintenant, on a bien le nom de notre catégorie qui n’est pas trop long et qui s’adapte très bien à nos menus et ici, on a bien un h1 avec le nom de notre catégorie mais plus adapté pour le référencement avec le bon mot-clé. Alors il y a un défaut à cette technique, c’est le suivant : c’est que si vous allez dans une autre catégorie, en fait on voit qu’évidemment, comme on l’a supprimé du template de base, on a supprimé le nom qui se mettait automatiquement du template de base et il n’apparaît plus nulle part, plus sur aucune catégorie. Ça veut dire que vous devez faire la même démarche que j’ai fais avant, c’est-à-dire pour cette catégorie-là, aller dans « Catalogue/Catégories », vous allez trouver votre catégorie, vous la modifiez et ici vous rajoutez voilà par exemple imaginons que le mot-clé qui vous intéresse c’est « Robes pour femmes », vous rajoutez « Robes pour femmes » et vous mettez titre 1, puis vous enregistrez. Donc vous allez devoir le refaire pour chacune de vos catégories. Donc évidemment si vous avez que 5-6 ou une dizaine de catégories ça va aller. Si par contre, vous avez beaucoup plus de catégories, là ça peut poser problèmes. Dans ce cas, il y a une deuxième solution que je vais vous montrer. Et il y a un autre problème aussi avec cette méthode, c’est que le texte que vous avez là, celui que vous avez mis pour le mot-clé de votre catégorie, c’est que vous n’allez pas pouvoir le mettre en ailleurs. Il va forcément être juste ici avec le texte en dessous. Et donc ça ne va pas forcément vous arranger dans votre thème.
Donc l’autre solution, ça va être de rajouter un champ supplémentaire à la fiche d’une catégorie et on va le placer après où on veut dans notre code. Donc comment on va faire ça ?
On va créer un override, ça s’appelle comme ça. Pour ça, vous allez dans override/classes et vous créez un fichier qui s’appelle « Category » avec un « y » et un « C » ; « Category.php » et dedans vous mettez ce code là. Donc je vais vous l’expliquer rapidement et je vous donnerai le code complet dans l’article qui suit la vidéo. Donc class Category extends CategoryCore, ça veut dire que là c’est simplement la définition d’un override qui va étendre la classe Category et le champ qu’on va rajouter il va s’appeler seo_title. Et donc là la partie construct, en fait la fonction construct on va simplement faire un override de la fonction construct avec l’ajout du champ seo_title, et on spécifie ce que c’est. Donc c’est un champ de type string avec la possibilité la possibilité qu’il soit multi langue, ça c’est pour la validation. Il n’est pas obligatoire donc on met required false et on met une taille de 128 caractères. Voilà, et ensuite la ligne ici, on rappelle la fonction originale de la classe CategoryCore. Ensuite, vous allez faire un deuxième override qui cette fois va être dans controllers admin et c’est le controllers admin category que vous allez overrider. Donc le nom du fichier c’est « AdminCategoriesController.php » avec une majuscule à « Admin », « Categories » et « Controller ». Donc ce code là, on n’en aura pas besoin. Ici vous mettez « AdminCategoriesController extends AdminCategoriesControllerCore » donc ça c’est la même chose que toute à l’heure c’est pour overrider la classe AdminCategoriesControllerCore et c’est la fonction renderForm qu’on va overrider donc ici on rajoute le champ en précisant le type, le label donc le nom qui va être devant le champ, le nom du champ qu’on a rajouté dans notre classe précédente donc seo_title, c’est le même qu’on a mis là. On précise que c’est un multi langue et qu’il n’est pas obligatoire donc required false et on rappelle la fonction originale de la classe parent. Là vous avez créé vos deux override. A chaque fois vous sauvegardez, on va faire une chose c’est qu’on va aller dans le dossier « cache » et on va supprimer le fichier class_index sinon vos override ne seront pas pris en compte et là quand vous allez dans la fiche d’une catégorie dans l’admin vous allez voir que vous avez un nouveau champ qui apparaît. Donc si on descend tout en bas, on voit qu’on a un nouveau champ qui s’appelle seo_title. Alors il y a quelque chose qui faut faire en plus pour pouvoir enregistrer ça dans la base de données c’est rajouter le champ dans la base de données. Donc il va falloir aller dans votre base de données, voilà. Vous allez dans ps_category_lang et comme c’est un champ multi langue c’est dans cette table là qu’il faut le rajouter et vous allez dans Structure. Moi je l’ai déjà rajouté mais si vous le rajoutez, vous faites ajouter un champ, exécuter, ici vous mettez seo_title, bien mettre le même nom qu’on a mis dans les classes précédentes, VARCHAR 128 et vous pouvez laisser tout le reste et faire sauvegarder. Une fois que vous avez fait ça, vous avez votre nouveau champ qui apparaît dans votre table, dans votre structure, ici.
Donc là quand vous allez enregistrer votre seo_title, vous allez pouvoir mettre ce que vous voulez donc là on a, par exemple, tops. On va mettre « Tops femme made in France ». Si vous enregistrez, on va retourner voir s’il l’a bien pris en compte et donc là on voit bien « Tops femme made in France » il a été enregistré. Maintenant, pour autant il ne va pas encore s’afficher dans votre page Catégories.
Pour ça, vous allez devoir modifier votre Template Category. Donc vous allez dans votre thème, vous ouvrez le fichier category.tpl et donc moi j’ai déjà mis le code en place. Donc ici, vous avez l’ancien code donc vous faites comme moi éventuellement, vous le mettez en commentaires. L’ancien code c’était lui là, et là le nouveau code.
[php]
{if isset($category->seo_title) & $category->seo_title!= » »}
{$category->seo_title|escape:’html’:’UTF-8′}
{else}
{$category->name|escape:’html’:’UTF-8′}
{/if}
[/php]
Donc je vais vous l’expliquer aussi rapidement. Ici, on fait un test qui nous dit : si le champ seo_title de la catégorie courante existe et s’il n’est pas vide, on l’affiche ; sinon on affiche le nom normal de la catégorie comme c’était avant. Donc ça je l’ai fait à cet endroit là dans le code, ça correspond à cet endroit là ici. Et vous le faites aussi un peu plus bas, ici. Donc là encore j’ai l’ancien code et le nouveau code ça donne donc la balise h1 donc je l’ai gardé telle qu’elle était jusque là, j’ai gardé le span class cat-name et ici j’ai mis la même chose. C’est à dire que si le champs seo_title existe et est renseigné pour la catégorie courante, je l’affiche sinon je remets catégorie name, je ferme ma condition et ça c’est la fin du code précédent que j’ai repris et je referme ma balise h1.
Voilà, une fois que vous allez fait ça, il y a quelque chose qu’il faut que vous fassiez, c’est d’aller dans les performances pour vider le cache, là pour le coup j’avais désactivé mais je vais le réactiver et je vide le cache. Donc maintenant, on va aller voir la catégorie top que j’avais modifié et on voit bien qu’il m’a repris automatiquement ce que j’ai mis dans mon champ seo_title ici. Il me l’a repris également ici. Et si je vais dans une autre catégorie où j’ai rien modifié, j’ai bien le titre, le nom classique de la catégorie ici et là.
Donc du coup, avec cette méthode qui est quand même nettement plus compliquée, si vous n’avez pas les connaissances nécessaires pour le mettre en place, je vous conseille de demander à un développeur de le faire, vous pouvez lui montrer la vidéo et ce sera très simple pour lui de le faire. Mais une fois que vous aurez fait ça, vous pourrez faire progressivement vos catégories, ce n’est pas grave si vous en avez deux cents parce qu’elles vont garder leur nom actuel et celles que vous avez modifié prendront un nouveau nom. Par contre, l’intérêt aussi c’est que selon comment est fait votre thème, vous n’êtes pas bloqué à l’endroit où va se positionner votre titre en fait. Il va se mettre au bon endroit par rapport à actuellement comment se positionne vos noms de catégories dans votre thème.
Voilà, merci d’avoir regardé cette vidéo. Comme d’habitude, vous pouvez télécharger mes bonus « 41 secrets pour Prestashop » et « Comment ne pas planter votre site e-commerce? ». Vous pouvez également vous abonner à la chaîne Youtube ou me suivre sur les réseaux sociaux.
Merci, à bientôt, au revoir.
Passionné d’e-commerce et de SEO, je suis le créateur du site reussir-mon-ecommerce.fr. Depuis plus de 15 années, j’aide les e-commerçants à développer sainement leur entreprise. Et si je ne suis pas devant mon écran, c’est que je suis derrière ma batterie à jouer du rock ! !
très sympas, je préfère la deuxième version :-)
Bonjour
je suis sous préstashop 1.5.5
ça marche aussi?
Bonjour Michel,
je n’ai pas testé mais à priori oui le code doit être très proche.
Bonjour, tout d’abord merci pour ce tuto ! je voulais juste vous faire par d’un problème que je rencontre,
moi quand je vais dans le fichier “AdminCategoriesController.php” j’ai deja du code dedans est ma question est ou est ce que je met le bout de code que tu nous donne ?
Bonjour Othman,
j’ai retirer ton code du commentaire car il était bien trop long :).
Malheureusement si tu as déjà du code il va falloir en effet rajouter le mien sans casser l’ancien.
Si ça n’est pas toi qui l’a ajouté il va falloir que tu demande à un développeur de te le faire pour éviter de tout casser ;)
Bonjour,
petit problème dans PS1.6.0.7 dans override/classes j’ai déjà un fichier Category.php ….
comment je fait?
bien cordialement.
Bonjour Corcinos,
il faut que tu modifie le fichier sans casser ce qu’il y a déjà dedans.
Malheureusement je ne peux pas t’aider d’avantage.
ça marche pas, j’ai bien le champ qui s’enregistre mais le nom h1 reste le même…
As-tu bien vider le cache smarty ?
Bonjour Corcinos, as-tu réussi finalement?
J’ai également déjà un fichier Category.php dans lequel j’ai inséré le code. Cela semble fonctionner, mais les seo-titles ne s’enregistrent pas dans la base…Merci
Bonjour, merci pour l’astuce, j’ai une petit question (plus un problème) pour le 2 astuce je n’y arrive pas,est-t-il compatible sur le thème Wharehouse? Faut-il faire la 1 astuce puis la 2 (je pense que nom)
Merci encore, c’est du bon travaille.
Ps: dommage qu’on doit recopier à la main, le code de category.tpl
Bonjour,
alors je ne connais pas le thème Wharehouse donc je ne pourrai pas te dire mais à priori il n’y a pas de raison pour que ça ne marche pas il faut juste adapter le code à celui de ton thème.
Tu as raison c’est soit l’une soit l’autre des deux méthodes mais pas les deux en même temps.
Bonjour, super votre tuto!!
j’ai une question sur la deuxième partie de votre tuto.
Le champs « seo_title » peut il être importer en masse par csv via import catégorie?
merci
Bonjour Maurice,
bonne question à priori je dirais non mais j’avoue ne pas avoir utiliser l’import par CSV.
Si ça n’est pas possible de base il faut faire quelque modification sur la fonction pour quelle le fasse donc au fial c’est possible mais avec un peu de développement :)
Bonjour Olivier,
pour prestashop 1.7.1.1 le tuto fonctionne aussi ? ou la méthode est differente ?
Bonjour Fabrice,
je n’ai pas encore testé, mais si tu le fais n’hésites pas à revenir dire ici si ça fonctionne :)
Bonsoir,
Je vous remercie pour ce tuto. J’ai suivi pas à pas et tout semble Ok. A suivre dans le temps.
J’ai néanmoins une question:
Pourquoi la balise H1 n’est pas placé tout en haut dans le bloc catégorie, alors qu’actuellement elle est placée sous la catégorie?
Je me retrouve systématiquement confronté à une erreur de plan de page, si je rajoute autre chose que du texte dans la catégorie.
Même si je rajoute un bloc avec votre module, il y a une erreur de pagination.
Avez-vous une idée, ou une explication?
Avec tous mes remerciements pour votre aide
Cordialement
Bonjour,
j’avoue ne pas avoir bien compris votre question.
Pourriez-vous donner plus de détails ?
Bonjour,
Merci pour votre réponse.
Dans la vidéo (position 2:11) , vous montrez que la Balise H1 se trouve en dessous du cartouche. Après la deuxième modification, sa position reste toujours dessous le cartouche. C’est dommage, car si on rajoute une balise H2 dans le cartouche, on se retrouve avec une balise H2 avant la H1 puisque celle-ci est dessous le cartouche, et ce n’est pas bon pour la hiérarchisation des balises dans la page.
Alors que si elle se trouvait dans le cartouche (comme le présente la première modification position 6:18), on pourrait éviter ces erreurs de plan de page. On aurait alors le titre en H1, et on pourrait décliner du texte dans le cartouche avec d’autres balises (H2, H3…)en respectant la hiérarchie des balises.
Je ne sais pas pourquoi Prestashop place en natif la H1 des catégories à cet endroit.
En espérant être plus clair
Cordialement
Ok je comprends :)
Dans ce cas la solution c’est d’aller modifier le template category.tpl pour faire en sorte que le cartouche se place sous la balise h1.
Je n’ai pas testé, mais à mon avis ce n’est pas très compliqué à faire.
bonjour olivier question
j’ai les texte en bas des produits
donc en fesant ta manipe mon h1 ce retrouve en bas des h5
pense tu que cela soie perturbant ?
regarde le plan avant suppression h1 en haut
[h6] Produit ajouté au panier avec succès
[h6] Il y a0produits dans votre panier.Il y a 1 produit dans votre panier.
[h1] Smartphones Il y a 122 produits.
[h5] iPhone 5 noir 16go reconditionné à neuf
[h5] iPhone 5 blanc 16go reconditionné à neuf
[h5] iPhone 5 noir 32go reconditionné à neuf
[h5] iPhone 5 blanc 32go reconditionné à neuf
[h5] iPhone 5 noir 64go reconditionné à neuf
[h5] iPhone 5 blanc 64go reconditionné à neuf
[h1] Smartphone apple iphone reconditionéDiscountmymobile vous propose des smartphones neufs:
[h5] Apple iPhone…
[h2] Pourquoi commander son iPhone reconditionné à neuf chez Discountmymobile?
[h5] Smartphones chinois…
[h2] Pourquoi commander mon nouveau Smartphone chinois Huawei chez Discountmymobile?
[h5] Smartphones chinois…
[h2] Pourquoi commander son Smartphone OnePlus neuf chez Discountmymobile?
[h5] Smartphones chinois…
[h2] Tous nos smartphones neufs LeEco sont livrés dans leur boîte d’origine avec leurs accessoires.
[h5] Smartphones chinois…
[h4] Mon compte
[h4] Informations
[h4] Lettre d’informations
ça serait mieux en effet qu’il soit en premier.
Est-ce vraiment pertinent sur ta page que tu es c’est h5 ?
Et les H6 ne sont pas du tout logique :).
Enfin, tu as un deuxième h1 sur « smarpthones il y a 122 produits ».
L’idéal serait de corriger ton thème qui n’est pas très seoFriendly :)
salut jai fait ta manip mais lorsque j’enregistre seo erreur
Warning: session_start(): Cannot send session cache limiter – headers already sent (output started at /home/site4265/web/www/override/controllers/admin/AdminCategoriesController.php:2) in /home/site4265/web/www/modules/fbloginblock/backward_compatibility/backward.php on line 33
Warning: Cannot modify header information – headers already sent by (output started at /home/site4265/web/www/override/controllers/admin/AdminCategoriesController.php:2) in /home/site4265/web/www/classes/controller/AdminController.php on line 1494
Difficile à dire.
Tu as peut-être mal créer l’override.
j’ai trouve le problème la ligne commançais en 2 au lieu de 1
encore merci pour cette superbe modification qui va booster le seo
dans votre tuto Optimiser le nom de vos catégories pour améliorer le référencement de votre boutique Prestashop, je pense qu’il manque le code pour cette partie :
« ….Pour ça, vous allez devoir modifier votre Template Category. Donc vous allez dans votre thème, vous ouvrez le fichier category.tpl et donc moi j’ai déjà mis le code en place. Donc ici, vous avez l’ancien code donc vous faites comme moi éventuellement, vous le mettez en commentaires. L’ancien code c’était lui là, et là le nouveau code. Donc je vais vous l’expliquer aussi rapidement. Ici, on fait un test qui nous dit : si le champ seo_title de la catégorie courante existe et s’il n’est pas vide, on l’affiche ; sinon on affiche le nom normal de la catégorie comme c’était avant. Donc ça je l’ai fait à cet endroit là dans le code, ça correspond à cet endroit là ici. Et vous le faites aussi un peu plus bas, ici. Donc là encore j’ai l’ancien code et le nouveau code ça donne donc la balise h1 donc je l’ai gardé telle qu’elle était jusque là, j’ai gardé le span class cat-name et ici j’ai mis la même chose. C’est à dire que si le champs seo_title existe et est renseigné pour la catégorie courante, je l’affiche sinon je remets catégorie name, je ferme ma condition et ça c’est la fin du code précédent que j’ai repris et je referme ma balise h1. »
J’ai bien tenté de réécrire avec la vidéo , mais il y a des endroits ou je n’arrive pas à comprendre le sigle que vous avez utilisez.
Merci pour votre réponse.
Sinon, super tuto ! bravo
alain
Bonjour Alain,
je viens de rajouter le code dans l’article.
Merci !
Waouh, plus rapide que lucky luke ! Impressionnant.Génial.
Merci
Désolé, j’abuse , je suis sur presta 1.7.2.1 et il me propose plusieurs catégory.tpl:
– CMS
– catalogue miniature
– catalogue listing
Je suis débutant et j’ai du mal à trouver cette info et j’aurais terminé l’application de votre tuto que j’ai hâte de mettre en place.
Encore merci
A priori c’est catalogue listing.
Mais attention la démo que j’ai fait se base sur prestashop 1.6.
Il y a peut-être des nuance avec prestashop 1.7
Bonjour,
Voila la structure de ma page catégorie de mon site prestashop.
h1>(Missing heading)
Nos produits
(Missing heading)
Informations techniques
Cartouches pour machine à affranchir
(Missing heading)
(Missing heading)
(Missing heading)
Cartouches PITNEY BOWES alternatives
LES CARTOUCHES POUR MACHINE A AFFRANCHIR PITNEY BOWES
CARTOUCHES DE LA GAMME DP
CARTOUCHES DE LA GAMME DM
CARTOUCHES DE LA GAMME CONNECT PLUS
(Missing heading)
Cartouches NEOPOST alternatives
De mon point de vue c’est problématique. Qu’en pensez vous ?
Bonjour,
comme ça j’ai l’impression qu’en effet c’est assez mal organisé mais le système de commentaire de mon blog ne permet de bien voir la structure.