В этой статье пойдет речь о том, как сделать самообновляющийся файл 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 при переходе на которые и будет выводиться список страниц.