[PrestaShop 1.7] Ajouter l'url canonique aux pages CMS

Photo by Merakist on Unsplash

Prestashop 1.7 est considéré comme étant la meilleure version PrestaShop au niveau SEO (Search Engine Optimization), malgré cela, il reste encore des lacunes comme l'absence d'url canonique pour les pages CMS intégrés à la solution.

En analysant le code de Prestashop, même sur la prochaine version 1.7.7, il semble que le code pour transmettre l'information au template ne soit tout simplement pas existant. 

Il vous faudra donc surcharger le fonctionnement de votre installation PrestaShop en ajoutant un override à votre installation. Si vous ne savez pas ce qu'est un fichier override sur PrestaShop, je vous laisse découvrir ce point dans cet article .

Je sais que l'usage des Pages/CMS sont sous-exploitées dans PrestaShop et beaucoup d'entre vous préfèrent installer un module de Blog, mais n'oubliez pas que ces pages font intégralement partie de la solution et sont donc appelées régulièrement par vos clients, il ne faut donc pas les négliger.

Passons dans le concret et voici le code que j'ai utilisé :

class CmsController extends CmsControllerCore
{
    public function getTemplateVarPage()
    {
        // On récupère les données ranvoyées par la fonction originale
        $page = parent::getTemplateVarPage();

        if (isset($this->cms->id)) { // On test si on est sur une page CMS
            $page['canonical'] = $this->context->link->getCMSLink($this->cms, $this->cms->link_rewrite, $this->ssl);
        } elseif ($this->cms_category->id) { // On test si on est sur une catégorie CMS
            $page['canonical'] = $this->context->link->getCMSCategoryLink($this->cms_category, $this->cms_category->link_rewrite);
        }
        
        // et on retourne simplement le résultat de la fonction pour qu'il soit exploité
        return $page;
    }
}

J'ai donc fait une extension du controller original CmsControllerCore pour lui rajouter simplement l'information nécessaire pour afficher l'url canonique puisque si l'on regarde le template de Prestashop, dans le fichier head.tpl,  on se constate qu'il suffit de transmettre la valeur à la variable canonical pour qu'elle s'affiche :

  {if $page.canonical}
    <link rel="canonical" href="{$page.canonical}">
  {/if}

C'est pour cela que ma fonction de surcharge est aussi simple.

Au départ, elle était encore plus simple mais j'ai constaté que cela provoquait le plantage de l'affichage lorsque l'on se trouve sur une page de catégorie de pages CMS. Ce qui est bonne chose et m'a permis de rajouter la gestion de l'url canonique aussi pour les catégories cms.

Ce code doit être enregistré dans le fichier CmsController.php et placé dans le répertoire /override/controllers/front/

Et pour ceux qui ne veulent pas tenter le copier/coller du code ci-dessus, voici l'archive du fichier complet à placer à l'endroit indiqué au paragraphe précédent après l'avoir extrait de l'archive : CmsController.php

Si vous ne voyez aucun changement après la mise en place du fichier, il vous suffira de réinitialiser la liste des classes utilisées par votre installation PrestaShop  en effaçant le fichier class_index.php présent dans le répertoire /var/cache/prod/ et/ou /var/cache/dev/

Commentaires