N'hésitez pas à me le signaler si nécessaire via le formulaire de contact.
Sur magento 2 ( comme sur magento 1 ) , les contenus et notamment les pages cms sont accessibles via plusieurs url avec ou sans slash à la fin.
Vous pouvez le constater sur la page de la politique de confidentialité qui est à la fois disponible sous les urls :
http://magento2-demo.nexcess.net/privacy-policy-cookie-restriction-mode et http://magento2-demo.nexcess.net/privacy-policy-cookie-restriction-mode/
Au niveau Seo c’est assez moyen c’est pourquoi il est utile de préciser à Google quelle est la version à indexer.
Ceci peut être réalisé via l’ajout d’une balise link rel= »canonical ».
Nous allons voir ensemble comment réaliser cela pour magento 2 via un module qui s’appellera Hhennes/Cms
Ce module ajoutera automatiquement une balise canonical sur les pages cms, il est possible de configurer en back office quelle sera l’url à utiliser ( avec ou sans le slash )
Ce module sera dépendant du module Magento_Cms.
Je vais juste détailler le fonctionnement global, vous trouverez le lien vers github en fin d’article pour le télécharger. (sans la partie création initiale )
La logique est relativement simple , nous allons rajouter un block spécifique sur les pages cms dans le container « head.additional »
Pour cela il faut créer le fichier ( dans app/Code/Hennes/Cms ) view/frontend/layout/cms_page_view.xml ( il sera évalué uniquement lors de l’affichage d’une page cms ) avec le contenu suivant :
<?xml version="1.0"?> <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd"> <body> <referenceContainer name="head.additional"> <block class="Hhennes\Cms\Block\Page\Canonical" name="cms_page.canonical"/> </referenceContainer> </body> </page> |
Le contenu du block qui sera situé dans Block/Page/Canonical.php sera le suivant (version simplifiée ) :
<?php namespace Hhennes\Cms\Block\Page; use \Magento\Framework\View\Element\AbstractBlock; class Canonical extends AbstractBlock { /** @var \Magento\Cms\Model\Page */ protected $_page; /** @var \Hhennes\Cms\Helper\Data */ protected $_helper; /** * Canonical constructor. * @param \Magento\Framework\View\Element\Context $context * @param array $data * @param \Magento\Cms\Api\Data\PageInterface $page * @param \Hhennes\Cms\Helper\Data $helper */ public function __construct( \Magento\Framework\View\Element\Context $context, array $data = [], \Magento\Cms\Api\Data\PageInterface $page, \Hhennes\Cms\Helper\Data $helper ) { $this->_page = $page; $this->_helper = $helper; parent::__construct($context, $data); } /** * @return \Magento\Cms\Api\Data\PageInterface */ public function getPage() { return $this->_page; } /** * Get Canonical Page Url ( simplified version ) */ public function getCanonicalPageUrl() { if ($this->getPage()) { return $this->getUrl() . $this->getPage()->getIdentifier(); } else { return false; } } /** * Display block * @return string */ public function _toHtml() { if ($this->getCanonicalPageUrl()) { return "\n" . '<link rel="canonical" href="' . $this->getCanonicalPageUrl() . '"/>' . "\n"; } return ''; } } |
Pour télécharger le module vous pouvez vous rendre sur github : https://github.com/nenes25/magento2-cms
Ou l’installer directement via composer avec la commande suivante :
composer require hhennes/module-cms dev-master |
Une fois installé la balise canonical sera bien présente sur la page :