Как прописать rel=canonical на PHP странице

D2
На сайте с 27.05.2014
Offline
5
6683

Здравствуйте ув. вебмастера. Подскажите пожалуйста, как прописывается тег rel=canonical в php файле. Файл отвечающий за вывод 10 категорий view_cat.php генерирует view_cat.php&cat=1,2,3... Те в свою очередь разбиваются постраничной навигацией на view_cat.php&cat=1&page=1,2,3.....

Догадался загнать тег в таблицу и выводить на положеной странице. Правильно ли это? Если нет, предложите пожалуйста вариант или скиньте ссылку, где об этом почитать. Заранее спасибо.

L1
На сайте с 21.09.2007
Offline
114
#1

rel=canonical нужно писать внутри head. Куда Вы говорите его прописали?

Что бы ответить на Ваш вопрос, нужно знать что у вас за CMS или что именно генерирует страницы.

Joker-jar
На сайте с 26.08.2010
Offline
166
#2

Используется ли какая-то CMS или фреймворк? Нужно искать функцию добавления заголовка.

D2
На сайте с 27.05.2014
Offline
5
#3

У меня не cms, а самописный движок на пхп. Еще ничего я не прописывал, а думаю выводить rel=canonical из таблицы в БД. Вот исходный код:

<?php include ("blocks/bd.php");

if(isset($_GET['cat'])) {$cat = $_GET['cat']; }

if (!isset($cat)) {$cat = 1;}

/* Проверяем, является ли переменная числом */

if (!preg_match("|^[\d]+$|", $cat)) {

exit ("<p>Неверный формат запроса! Проверьте URL!");

}

$result = mysql_query("SELECT * FROM categories WHERE id = '$cat'",$db);

if (! $result)

{

echo "<p>no</p>";

exit (mysql_error());

}

$myrow = mysql_fetch_array($result);

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

<title><?php echo $myrow ["title"]; ?></title>

<link href="style.css" rel="stylesheet" type="text/css">

<link rel="icon" href="img/favicon.ico" type="image/x-icon">

<meta name="description" content="<?php echo $myrow ["meta_d"]; ?>">

<meta name="keywords" content="<?php echo $myrow ["meta_k"]; ?>">

</head>

<body>

<div id="container">

<div id="header"> <?php include ("blocks/header.php");?>

</div>

<div id="left">

<?php include ("blocks/lefttd.php");?>

</div>

<div id="content">

<div id="tabsI"><?php include ("blocks/nav.php");?>

</div>

<div id="text"><?php

printf ("<p class='post_title2'>%s</p>",

$myrow ["title"]);?>

<noindex><div id="adsens"><?php include ("adsens2.php");?></div></noindex>

<?php

echo $myrow ["text"];

$result77 = mysql_query("SELECT str FROM options", $db);

$myrow77 = mysql_fetch_array($result77);

$num = $myrow77["str"];

// Извлекаем из URL текущую страницу

$page = $_GET['page'];

// Определяем общее число сообщений в базе данных

$result00 = mysql_query("SELECT COUNT(*) FROM data WHERE cat='$cat'");

$temp = mysql_fetch_array($result00);

$posts = $temp[0];

// Находим общее число страниц

$total = (($posts - 1) / $num) + 1;

$total = intval($total);

// Определяем начало сообщений для текущей страницы

$page = intval($page);

// Если значение $page меньше единицы или отрицательно

// переходим на первую страницу

// А если слишком большое, то переходим на последнюю

if(empty($page) or $page < 0) $page = 1;

if($page > $total) $page = $total;

// Вычисляем начиная с какого номера

// следует выводить сообщения

$start = $page * $num - $num;

// Выбираем $num сообщений начиная с номера $start

$result2 = mysql_query("SELECT id,title,description,date,author,mini_img,view FROM data WHERE cat='$cat' ORDER BY id LIMIT $start, $num",$db);

if (! $result2)

{

echo "<p>no</p>";

exit (mysql_error());

}

$myrow2 = mysql_fetch_array($result2);

do

{

printf ("<table align ='center' class ='post'>

<tr>

<td class='post_title'>

<p class = 'post_name'><img class = 'mini' align='left' src = '%s'><a class='a' href ='view_post.php?id=%s'>%s</a></p>

<p class='post_adds'>Дата добавления: %s </p>

<p class='post_adds'>Автор: %s </p></td>

</tr>

<tr>

<td>%s <p class = 'post_view'> Просмотров: %s</p></td>

</tr>

</table>",$myrow2["mini_img"], $myrow2["id"], $myrow2["title"], $myrow2["date"], $myrow2["author"], $myrow2["description"], $myrow2["view"]) ;

}

while ($myrow2 = mysql_fetch_array($result2));

// Проверяем нужны ли стрелки назад

if ($page != 1) $pervpage = '<a href=view_cat.php?cat='.$cat.'&page=1>Первая</a> | <a href=view_cat.php?cat='.$cat.'&page='. ($page - 1) .'>Предыдущая</a> | ';

// Проверяем нужны ли стрелки вперед

if ($page != $total) $nextpage = ' | <a href=view_cat.php?cat='.$cat.'&page='. ($page + 1) .'>Следующая</a> | <a href=view_cat.php?cat='.$cat.'&page=' .$total. '>Последняя</a>';

// Находим две ближайшие станицы с обоих краев, если они есть

if($page - 5 > 0) $page5left = ' <a href=view_cat.php?cat='.$cat.'&page='. ($page - 5) .'>'. ($page - 5) .'</a> | ';

if($page - 4 > 0) $page4left = ' <a href=view_cat.php?cat='.$cat.'&page='. ($page - 4) .'>'. ($page - 4) .'</a> | ';

if($page - 3 > 0) $page3left = ' <a href=view_cat.php?cat='.$cat.'&page='. ($page - 3) .'>'. ($page - 3) .'</a> | ';

if($page - 2 > 0) $page2left = ' <a href=view_cat.php?cat='.$cat.'&page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';

if($page - 1 > 0) $page1left = '<a href=view_cat.php?cat='.$cat.'&page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';

if($page + 5 <= $total) $page5right = ' | <a href=view_cat.php?cat='.$cat.'&page='. ($page + 5) .'>'. ($page + 5) .'</a>';

if($page + 4 <= $total) $page4right = ' | <a href=view_cat.php?cat='.$cat.'&page='. ($page + 4) .'>'. ($page + 4) .'</a>';

if($page + 3 <= $total) $page3right = ' | <a href=view_cat.php?cat='.$cat.'&page='. ($page + 3) .'>'. ($page + 3) .'</a>';

if($page + 2 <= $total) $page2right = ' | <a href=view_cat.php?cat='.$cat.'&page='. ($page + 2) .'>'. ($page + 2) .'</a>';

if($page + 1 <= $total) $page1right = ' | <a href=view_cat.php?cat='.$cat.'&page='. ($page + 1) .'>'. ($page + 1) .'</a>';

// Вывод меню если страниц больше одной

if ($total > 1)

{

Error_Reporting(E_ALL & ~E_NOTICE);

echo "<div class=\"pstrnav\">";

echo $pervpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage;

echo "</div>";

}

?>

</div>

<p class='post_title3'>Лучшие статьи</p>

<?php

$result3 = mysql_query("SELECT id,title,mini_img FROM data ORDER BY view DESC,id DESC LIMIT 5 ",$db);

if (! $result3)

{

echo "<p>no</p>";

exit (mysql_error());

}

$myrow3 = mysql_fetch_array($result3);

do

{

printf ("<p class='post_name3'><img class = 'mini2' align='left' src = '%s'><a class='nav_link2' href ='view_post.php?id=%s'>%s</a></p>",

$myrow3["mini_img"], $myrow3["id"], $myrow3["title"]) ;

}

while ($myrow3 = mysql_fetch_array($result3));

?>

</div>

<div id="clear"></div>

<div id="footer">

<?php include ("blocks/footer.php");?>

</div>

</div>

</body>

</html>

L1
На сайте с 21.09.2007
Offline
114
#4

<link rel="canonical" href="..."/>

Пропишите его сюда:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title><?php echo $myrow ["title"]; ?></title>
<link href="style.css" rel="stylesheet" type="text/css">
<link rel="icon" href="img/favicon.ico" type="image/x-icon">

<meta name="description" content="<?php echo $myrow ["meta_d"]; ?>">
<meta name="keywords" content="<?php echo $myrow ["meta_k"]; ?>">
<link rel="canonical" href="http://ваш_сайт/view_cat.php?cat=<?=$cat?>"/>
</head>

Надеюсь вы только учитесь? Так как код оставляет желать лучшего.. Даже парсер кода на форуме не хочет его понимать.

siv1987
На сайте с 02.04.2009
Offline
427
#5

denis21, https://support.google.com/webmasters/answer/139066?hl=en

Google:
Add a <link> element with the attribute rel="canonical" to the <head> section of these pages:
if(isset($_GET['cat'])) {$cat = $_GET['cat']; }
if (!isset($cat)) {$cat = 1;}

Чувствуется стиль мастера. ТС, откройте для себя if-else, или тернарные выражения

$cat = (isset($_GET['cat'])) ? $_GET['cat'] : 1;

D2
На сайте с 27.05.2014
Offline
5
#6
L3n1n:
<link rel="canonical" href="..."/>


Надеюсь вы только учитесь? Так как код оставляет желать лучшего.. Даже парсер кода на форуме не хочет его понимать.

Так и есть. Спасибо за ответ

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий