Нужно вывести тег

Есть многостраничный сайт на php. На некоторых страницах сайта уже вручную прописаны теги "canonical". Нужно с помощью кода выводить тег, только на тех страницах, где его нет.

Нашел в сети такой код:

<?
    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.'"/>';
?>

Код работает, но если на странице уже прописан тег "canonical", то будет 2 тега, что неправильно.

Как усовершенствовать код, чтобы код срабатывал только там где нет тега "canonical"?

Буду благодарен любой помощи. Сам я имею минимальные знания в php. В основном я сам пытаюсь сделать, но здесь не получается.


Ответы (1 шт):

Автор решения: Virid

Короче сам кое-как сделал. Спасибо пользователю "Quazimorda" за подсказку.

Кому нужно пользуйтесь, вот рабочий код:

<?
    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);
    }

    // Проверка на присутствие в коде тега <link rel=“canonical”:
    
    // Считываем текущий файл в переменную "$file"
    $file = file_get_contents($_SERVER['DOCUMENT_ROOT'].$_SERVER['SCRIPT_NAME']);
    // Осуществляем поиск на присутствие в документе "canonical"
    if (preg_match("/<link\s+rel=\"canonical\"/i", "$file")) {
    echo '';
    } else {
    echo '<link rel="canonical" href="'.$url.'" />';
    }
?>
→ Ссылка