Для того чтобы добавить вывод canonical на сайт под управлением HostCMS, надо сначала создать файл utils.php со следующим содержимым
<?php
defined('HOSTCMS') || exit('HostCMS: access denied.');
/**
* Some useful helpers
*
* @package HostCMS 6\Core
* @version 6.2
* @author Rain
* @copyright 2021
*
* path to file: /modules/core/utils.php
*/
class Core_Utils
{
/**
* Core_Utils::getCanonicalUrl()
*
* @param mixed $iSiteId
* @return string
*/
static public function getCanonicalUrl($iSiteId = CURRENT_SITE)
{
$sUri = strval(Core_Array::get($_SERVER, 'REQUEST_URI', ''));
$sQuery = strval(Core_Array::get($_SERVER, 'QUERY_STRING', ''));
$sLink = str_replace('?' . $sQuery, '', $sUri);
$aLink = explode('/',trim($sLink,'/'));
if((count($aLink)>1)&&($aLink[0]=='reviews')){
return '';
}
$oSite_Alias = Core_Entity::factory('Site', intval($iSiteId))->getCurrentAlias();
if(!is_null($oSite_Alias)) {
return 'http://' . $oSite_Alias->name . $sLink;
} else {
return $sLink;
}
}
}
Обратите внимание, на условие
$aLink = explode('/',trim($sLink,'/'));
if((count($aLink)>1)&&($aLink[0]=='reviews')){
return '';
}
данное условие нужно для того, чтобы не выводить canonical на страницах отзыва, урл который имеет такой вид
/reviews/21721/
Далее заливаем файл на сайта, в следующую папку
/modules/core/utils.php
Выводим в макете, используя наш класс и метод Core_Utils::getCanonicalUrl();
<!DOCTYPE html>
<html lang="ru">
<head>
. . .
<?php $con = Core_Utils::getCanonicalUrl(); ?>
<?php if($con != ''){ ?>
<link rel="canonical" href="<?=$con; ?>"/>
<?php } ?>
. . .
</head>
<body>



