Как настроить атрибут rel=»canonical» на сайте написанном на php


Как настроить атрибут rel=»canonical» на сайте написанном на чистом php

Нашел неплохой код, проверил работает. Подходит отлично для самописных сайтов на PHP. Памятка для себя, так сказать.

<!-- вывод канониклов -->
    <?php
    if((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') || $_SERVER['SERVER_PORT'] == 443){
        $protocol = 'https://';
    }else{
        $protocol = 'http://';
    }

    $url = $protocol.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];

    $urlend = strrpos($url, '?', -1); // Находим и удаляем все параметры (номер страницы, параметры фильтра и тд.)
    if ($urlend!==false) $url = substr($url, 0, $urlend);


    if(mb_substr($url, -1) == '/'){ // Тут оставляем, если ссылки на сайте не заканчиваются на /, либо удаляем, если заканчиваются на /.
        $url = substr($url, 0, -1);
    }

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

Пользуйтесь кому надо

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

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

Немного подробнее про код. 
Вначале определяем, открывается ли сайт по безопасному протоколу или нет.

Потом собираем наш URL из протокола ($protocol), домена ($_SERVER[‘SERVER_NAME’]) и ссылки ($_SERVER[‘REQUEST_URI’]).

Далее определяем, есть ли в URL параметры или нет ($_SERVER[‘QUERY_STRING’]). Если есть, их удаляем, они не нужны для тега.

И в конце (не обязательно) удаляем слеш, если ссылки формируются без него. Так-же это полезно, чтобы не использовать 301 редирект, который конфликтует с обработкой 404 страницы на разных CMS

Взято отсюда: https://bobroed.ru/php/kak-sdelat-relcanonicial-na-php-dlya-raznykh-cms/

Рубрика: php

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *