Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Next »

https://github.com/magesuite/seo-canonical

This extension adds an extra setting to output canonical link meta tags for category and product pages. Canonical URLs prevent duplication of content and increase SEO.

Installation

This module is part of MageSuite metapackage

Installation if metapackage is not used:

composer require "creativestyle/magesuite-seo-canonical" ^1.0.0

Admin settings

Admin settings can be found under Stores -> Configuration -> MageSuite -> SEO tab.

Settings:

Name

Value

Comment

Canonical Tag For Other Pages

 Yes/No 

Enables canonical tag for pages which Magento doesn't support out of the box like CMS ones. Read more.
You can enable this tag for category and product pages under Stores→Configuration→Catalog→Catalog.

Backend

Backend documentation in progress

view/frontend/templates/canonical.phtml
<?php
$canonicalUrl = $block->getCanonicalUrl();
if ($canonicalUrl):
?>
<link rel="canonical" href="<?= $canonicalUrl; ?>">
<?php
endif;

vendor/creativestyle/magesuite-seo-canonical/Block/Canonical.php:25
class Canonical extends \Magento\Framework\View\Element\Template
{
    protected $_template = 'MageSuite_SeoCanonical::canonical.phtml';
    .....
    public function getCanonicalUrl()
    {
        return $this->canonicalUrl->getCanonicalUrl();
    }
}

vendor/creativestyle/magesuite-seo-canonical/Service/CanonicalUrl.php:33
class CanonicalUrl
{
    const SEO_CANONICAL_TAG_PATH = 'seo/configuration/canonical_tag_enabled';
    .....
    public function getCanonicalUrl()
    {
        if (!$this->isEnabled()) {
            return null;
        }

        $canonicalUrl = $this->urlBuilder->getUrl('*/*/*', ['_current' => true, '_use_rewrite' => true]);
        return $this->formatCanonicalUrl($canonicalUrl);
    }
    
    private function formatCanonicalUrl($canonicalUrl)
    {
        $urlWithoutParams = $this->stripGetParams($canonicalUrl);
        if ($this->isHomepageWithStoreCodeInPath($urlWithoutParams)) {
            return $urlWithoutParams;
        }
        return rtrim($urlWithoutParams, '/');
    }

    private function stripGetParams($canonicalUrl)
    {
        return strtok($canonicalUrl, '?');
    }
}

Frontend

Frontend template for canonical URLs is located under Creativestyle_SeoCanonicalExtension::canonical.phtml It uses getCanonicalUrl() in order to display a canonical url.

  • No labels