Нужно вывести тег
Есть многостраничный сайт на 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.'" />';
}
?>