Как сделать rel=canonical на PHP для разных CMS


На разных движках иногда URL строятся с параметрами, слешем в конце или без него и тд. По этому, порой, при SEO продвижении появляются дубли страниц, чего не должно быть. По этому следует использовать rel=canonical, чтобы избежать проблем при SEO продвижении. 

Ниже приведён код, который следует вставить между <head></head> либо сделать через функцию. 

<?
	if((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') || $_SERVER['SERVER_PORT'] == 443){
		$protocol='https://';
	}else{
		$protocol='http://';
	}
	
	$url=$protocol.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
	
	if($_SERVER['QUERY_STRING']!=''){
	    $url=str_replace($_SERVER['QUERY_STRING'], '', $url);
    	$url=substr($url, 0, -1);
	}
	
	if(mb_substr($url, -1)=='/') //Тут оставляем, если ссылки на сайте не заканчиваются на /, либо удаляем, если заканчиваются на /.
		$url=substr($url, 0, -1);

    echo '<link rel="canonical" href="'.$url.'"/>';
?>

Немного подробнее про код. 
Вначале определяем, открывается ли сайт по безопасному протоколу или нет.
Потом собираем наш URL из протокола ($protocol), домена ($_SERVER[‘SERVER_NAME’]) и ссылки ($_SERVER[‘REQUEST_URI’]).
Далее определяем, есть ли в URL параметры или нет ($_SERVER[‘QUERY_STRING’]). Если есть, их удаляем, они не нужны для тега.
И в конце (не обязательно) удаляем слеш, если ссылки формируются без него. Так-же это полезно, чтобы не использовать 301 редирект, который конфликтует с обработкой 404 страницы на разных CMS.


Для связи

Если у вас появились какие-либо вопросы, хотите получить индивидуальный совет или у вас есть интересное предложение, вы можете связаться через форму обратной связи.

Или написать прямо на почту info@bobreod.ru





Отправляя форму, вы соглашаетесь с нашей политикой конфиденциальности