Hi All,
I am a Magento Newbie and am having difficulty figuring out exactly where I would add canonical tag to content pages in Magento 2. We are having a duplicate content issue on content pages as multiple variants of urls are created based on the user path. I am trying to figure out exactly where I add the canonical html tag. I changed the setting for the products and categories. I would like to update the Home page as well as other content pages but I am not 100% certain where to do that. If someone can share the exact path on where I would update that I would really appreciate it.
Thanks
Solved! Go to Solution.
Hello @brandon_pagan ,
I hope that I gave you correct answer for content page(CMS) page to add canonical tag. Please follow below steps
<head> <link rel="canonical" src="www.example.com/page-url-key" src_type="url"/> </head>
--
If my answer is useful, please Accept as Solution & give Kudos
Hello @brandon_pagan ,
I hope that I gave you correct answer for content page(CMS) page to add canonical tag. Please follow below steps
<head> <link rel="canonical" src="www.example.com/page-url-key" src_type="url"/> </head>
--
If my answer is useful, please Accept as Solution & give Kudos
Hey @gelanivishal and @brandon_pagan
I think I know a better way to do it correct and conveniently.
1. Create your module.
2. Create your Helper, e.g. [Namespace]/[Module]/Helper/Canonical.php
<?php declare(strict_types=1); namespace [Namespace]\[Module]\Helper; use Magento\Cms\Model\Page; use Magento\Framework\App\Helper\AbstractHelper; use Magento\Framework\App\Helper\Context; /** * Class Canonical * @package [Namespace]\[Module]\Helper */ class Canonical extends AbstractHelper { /** * @var Page */ protected $cmsPage; /** * Canonical constructor. * @param Context $context * @param Page $cmsPage */ public function __construct( Context $context, Page $cmsPage ) { $this->cmsPage = $cmsPage; parent::__construct($context); } /** * This method is used in XML layout. * @return string */ public function getCanonicalForAllCmsPages(): string { if ($this->cmsPage->getId()) { return $this->createLink( $this->scopeConfig->getValue('web/secure/base_url') . $this->cmsPage->getIdentifier() ); } return ''; } /** * @param $url * @return string */ protected function createLink($url): string { return '<link rel="canonical" href="' . $url . '" />'; } }
3. Create layout: [Namespace]/[Module]/view/frontend/layout/default.xml
<?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> <referenceBlock name="head.additional"> <container name="canonical.url.cms.page.container"> <block class="Magento\Framework\View\Element\Text" name="canonical.url.cms.page"> <arguments> <argument name="label" xsi:type="string">Adding canonical link with base URL</argument> <argument name="text" xsi:type="helper" helper="[Namespace]\[Module]\Helper\Canonical::getCanonicalForAllCmsPages"/> </arguments> </block> </container> </referenceBlock> </body> </page>
4. Run bin/magento setup:upgrade
5. See if it works the way you wanted.
Now, on every CMS Page the canonical link will be added automatically.
Have a nice day.
It's not there. There's no "update XML" in that location.
Not there. can you please provide screenshot?
Here is a guide on how you can add canonical tags in Magento 2 for CMS, blog, contacts and other pages, including products and categories.
Quick tip: it doesn't require code updating. So, it's a perfect option for non-techies like me