{"id":1843,"date":"2018-09-25T21:22:11","date_gmt":"2018-09-25T19:22:11","guid":{"rendered":"https:\/\/www.h-hennes.fr\/blog\/?p=1843"},"modified":"2018-09-25T21:22:11","modified_gmt":"2018-09-25T19:22:11","slug":"magento-2-ajouter-des-link-alternate-sur-les-pages-cms","status":"publish","type":"post","link":"https:\/\/www.h-hennes.fr\/blog\/2018\/09\/25\/magento-2-ajouter-des-link-alternate-sur-les-pages-cms\/","title":{"rendered":"Magento 2 : Ajouter des link alternate sur les pages cms"},"content":{"rendered":"<p>Sur magento 2 ( comme sur magento 1 ) , les contenus et notamment les pages cms sont accessibles via plusieurs url avec ou sans slash \u00e0 la fin.<\/p>\n<p>Vous pouvez le constater sur la page de la politique de confidentialit\u00e9 qui est \u00e0 la fois disponible sous les urls :<br \/>\n<a href=\"http:\/\/magento2-demo.nexcess.net\/privacy-policy-cookie-restriction-mode\" target=\"_blank\" rel=\"noopener\">http:\/\/magento2-demo.nexcess.net\/privacy-policy-cookie-restriction-mode<\/a> et <a href=\"http:\/\/magento2-demo.nexcess.net\/privacy-policy-cookie-restriction-mode\/\" target=\"_blank\" rel=\"noopener\">http:\/\/magento2-demo.nexcess.net\/privacy-policy-cookie-restriction-mode\/<\/a><\/p>\n<p>Au niveau Seo c&rsquo;est assez moyen c&rsquo;est pourquoi il est utile de pr\u00e9ciser \u00e0 Google quelle est la version \u00e0 indexer.<br \/>\nCeci peut \u00eatre r\u00e9alis\u00e9 via l&rsquo;ajout d&rsquo;une balise link rel=\u00a0\u00bbcanonical\u00a0\u00bb.<\/p>\n<p>Nous allons voir ensemble comment r\u00e9aliser cela pour magento 2 via un module qui s&rsquo;appellera <em>Hhennes\/Cms<\/em><br \/>\nCe module ajoutera automatiquement une balise canonical sur les pages cms, il est possible de configurer en back office quelle sera l&rsquo;url \u00e0 utiliser ( avec ou sans le slash )<\/p>\n<p>Ce module sera d\u00e9pendant du module Magento_Cms.<\/p>\n<p>Je vais juste d\u00e9tailler le fonctionnement global, vous trouverez le lien vers github en fin d&rsquo;article pour le t\u00e9l\u00e9charger. (sans la partie cr\u00e9ation initiale )<\/p>\n<p>La logique est relativement simple , nous allons rajouter un block sp\u00e9cifique sur les pages cms dans le container \u00ab\u00a0head.additional\u00a0\u00bb<br \/>\nPour cela il faut cr\u00e9er le fichier ( dans app\/Code\/Hennes\/Cms ) <strong><em>view\/frontend\/layout\/cms_page_view.xml<\/em><\/strong> ( il sera \u00e9valu\u00e9 uniquement lors de l&rsquo;affichage d&rsquo;une page cms ) avec le contenu suivant :<\/p>\n<pre lang=\"xml\" escaped=\"true\">&lt;?xml version=\"1.0\"?&gt;\r\n&lt;page xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"urn:magento:framework:View\/Layout\/etc\/page_configuration.xsd\"&gt;\r\n    &lt;body&gt;\r\n        &lt;referenceContainer name=\"head.additional\"&gt;\r\n            &lt;block class=\"Hhennes\\Cms\\Block\\Page\\Canonical\" name=\"cms_page.canonical\"\/&gt;\r\n        &lt;\/referenceContainer&gt;\r\n    &lt;\/body&gt;\r\n&lt;\/page&gt;\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Le contenu du block qui sera situ\u00e9 dans <strong>Block\/Page\/Canonical.php<\/strong> sera le suivant (version simplifi\u00e9e ) :<\/p>\n<pre lang=\"php\" escaped=\"true\">&lt;?php\r\n\r\nnamespace Hhennes\\Cms\\Block\\Page;\r\n\r\nuse \\Magento\\Framework\\View\\Element\\AbstractBlock;\r\n\r\nclass Canonical extends AbstractBlock\r\n{\r\n\r\n    \/** @var \\Magento\\Cms\\Model\\Page *\/\r\n    protected $_page;\r\n\r\n    \/** @var \\Hhennes\\Cms\\Helper\\Data *\/\r\n    protected $_helper;\r\n\r\n    \/**\r\n     * Canonical constructor.\r\n     * @param \\Magento\\Framework\\View\\Element\\Context $context\r\n     * @param array $data\r\n     * @param \\Magento\\Cms\\Api\\Data\\PageInterface $page\r\n     * @param \\Hhennes\\Cms\\Helper\\Data $helper\r\n     *\/\r\n    public function __construct(\r\n        \\Magento\\Framework\\View\\Element\\Context $context,\r\n        array $data = [],\r\n        \\Magento\\Cms\\Api\\Data\\PageInterface $page,\r\n        \\Hhennes\\Cms\\Helper\\Data $helper\r\n    )\r\n    {\r\n        $this-&gt;_page = $page;\r\n        $this-&gt;_helper = $helper;\r\n        parent::__construct($context, $data);\r\n    }\r\n\r\n    \/**\r\n     * @return \\Magento\\Cms\\Api\\Data\\PageInterface\r\n     *\/\r\n    public function getPage()\r\n    {\r\n        return $this-&gt;_page;\r\n    }\r\n\r\n    \/**\r\n     * Get Canonical Page Url ( simplified version )\r\n     *\/\r\n    public function getCanonicalPageUrl()\r\n    {\r\n        if ($this-&gt;getPage()) {\r\n            \r\n                return $this-&gt;getUrl() . $this-&gt;getPage()-&gt;getIdentifier();\r\n        } else {\r\n            return false;\r\n        }\r\n    }\r\n\r\n    \/**\r\n     * Display block\r\n     * @return string\r\n     *\/\r\n    public function _toHtml()\r\n    {\r\n        if ($this-&gt;getCanonicalPageUrl()) {\r\n            return \"\\n\" . '&lt;link rel=\"canonical\" href=\"' . $this-&gt;getCanonicalPageUrl() . '\"\/&gt;' . \"\\n\";\r\n        }\r\n\r\n        return '';\r\n    }\r\n\r\n}<\/pre>\n<p>Pour t\u00e9l\u00e9charger le module vous pouvez vous rendre sur github : <a href=\"https:\/\/github.com\/nenes25\/magento2-cms\" target=\"_blank\" rel=\"noopener\">https:\/\/github.com\/nenes25\/magento2-cms<\/a><br \/>\nOu l&rsquo;installer directement via composer avec la commande suivante :<\/p>\n<pre lang=\"bash\"> composer require hhennes\/module-cms dev-master\r\n<\/pre>\n<p>Une fois install\u00e9 la balise canonical sera bien pr\u00e9sente sur la page :<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1844\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2018\/09\/canonical.jpg\" alt=\"Canonical magento 2\" width=\"780\" height=\"76\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2018\/09\/canonical.jpg 780w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2018\/09\/canonical-300x29.jpg 300w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2018\/09\/canonical-768x75.jpg 768w\" sizes=\"auto, (max-width: 780px) 100vw, 780px\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sur magento 2 ( comme sur magento 1 ) , les contenus et notamment les pages cms sont accessibles via plusieurs url avec ou sans slash \u00e0 la fin. Vous pouvez le constater sur la page de la politique de confidentialit\u00e9 qui est \u00e0 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 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[246],"tags":[530,110,482,264],"class_list":["post-1843","post","type-post","status-publish","format-standard","hentry","category-magento-2","tag-alternate","tag-cms","tag-magento-2","tag-seo"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1843","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/comments?post=1843"}],"version-history":[{"count":3,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1843\/revisions"}],"predecessor-version":[{"id":1847,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/1843\/revisions\/1847"}],"wp:attachment":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/media?parent=1843"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/categories?post=1843"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/tags?post=1843"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}