Для того чтобы добавить вывод 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>