В этой статье пойдет речь о том, как сделать самообновляющийся файл sitemap.xml (что это).
Более того, речь пойдет о файле сайтмэп для сайтов с огромным количеством страниц (10 000, 100 000). Страницы должны генерироваться из базы данных, вы должны хорошо понимать алгоритм образования страниц на вашем сайте, т.к. в примере приведены фиктивные данные для вывода определенных страниц.
Так как же сделать sitemap для таких сайтов так, чтобы сервер не упал от нагрузки?
Нам потребуется создать 3 файла.
1. Файл sitemap.php
В нем мы высчитываем количество записей, и генерируем ссылки на страницы для других сайтмепов, по 1000 на страницу, чтобы не было нагрузки на сервер. Ессно, нужно прописать свои названия таблиц, свое доменное имя и бд..
<?
header("content-type: text/xml;");
echo '<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9
http://www.sitemaps.org/schemas/sitemap/0.9/siteindex.xsd">
';
include 'config.php';
DEFINE('ITEMS_PER_PAGE', 1000);
$query="SELECT COUNT(*) FROM queries";
$res = mysql_query( $query );
$total = mysql_result( $res, 0, 0 );
$howmuch=ceil($total/ITEMS_PER_PAGE);
for($i=1; $i<=$howmuch; $i++)
{
echo '<sitemap><loc>http://mysomesite.ru/sitemap'.$i.'.xml</loc></sitemap>';
}
?>
</sitemapindex>
Обратите внимание: файл config.php содержит в себе подключение к базе данных, его примерное содержимое
<?
$host = "localhost";
$dbuser = "user";
$dbpass = "pass";
$db = "db";
$link = mysql_connect($host, $dbuser, $dbpass) or die("cannot connect");
mysql_select_db($db, $link);
?>
2. Далее файл sitemap2.php
<?
header("content-type: text/xml;");
include 'config.php';
// let us generate sitemap!
$data_r.='<?xml version="1.0" encoding="UTF-8" ?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
';
############1 data from pages table
DEFINE('ITEMS_PER_PAGE', 1000);
$query="SELECT COUNT(*) FROM queries";
$res = mysql_query( $query );
$total = mysql_result( $res, 0, 0 );
if ( isset($_GET['page']) ) {
$page = (int)$_GET['page'];
if ( $page < 1 ) $page = 1;
} else {
$page = 1;
}
if ($page==1)
{
$data_r.='<url><loc>http://mysomesite.ru</loc>
<changefreq>always</changefreq>
<priority>0.5</priority>
</url>
';
}
// Сколько всего получится страниц
$cnt_pages = ceil( $total / ITEMS_PER_PAGE );
if ( $page > $cnt_pages ) $page = $cnt_pages;
// Начальная позиция
$start = ( $page - 1 ) * ITEMS_PER_PAGE;
$sm_data=mysql_query("SELECT * FROM
queries LIMIT ".$start.", ".ITEMS_PER_PAGE);
while($sm_row=mysql_fetch_array($sm_data))
{
$sm_row['query2']=str_replace(" ","+", $sm_row['query']);
$data_r.= '
<url>
<loc>http://mysomesite.ru/res.php?q='.$sm_row['query2'].'</loc>
<changefreq>never</changefreq>
<priority>0.1</priority>
</url>
';
}
$data_r.='</urlset>';
$content = $data_r;
echo $content;
?>
3. Если у вас нет файла .htaccess – создайте его, если есть – просто допишите следующее
RewriteEngine On RewriteRule ^sitemap.xml$ sitemap.php [L] RewriteRule ^sitemap([^/]*).xml$ sitemap2.php?page=$1 [L]
Если у вас уже есть этот файл, проверьте, была ли в нем строка RewriteEngine On. Если была – не добавляйте ее повторно.
Теперь можно перейти по адресу http://ваш_сайт.ru/sitemap.xml – если все верно сделали, увидите список ссылок на другие файлы сайтмэпа, потипу http://ваш_сайт.ru/sitemap1.xml при переходе на которые и будет выводиться список страниц.