Генерация sitemap на PHP
Sitemap - это специальный файл сайта, содержащий в себе информацию о новых страницах сайта (или вообще всех). Нужен для того, чтобы сообщить поисковым системам какие страницы нужно индексировать. Какие чаще, а какие реже. Sitemap обычно генерируют скриптами или создают сами, после чего добавляют в панели вебмастера поисковых систем о ее наличии.
Sitemap создают в формате XML, подробнее о протоколе sitemap можно почитать на сайте .
Если у Вас сайт работает на какой-либо популярной CMS, то плагин для генерации sitemap можно найти в сети. Мы же рассмотрим вариант генерации sitemap на обычном самописном сайте.
И так, раз это формат XML то сразу предлагаю использовать DomDocument, который был введен в PHP начиная с версии 4.30. Почему? Потому что использовать его проще простого, логичнее и в будущем можно избавиться от кучи проблем.
Также сразу скажу, что карту мы будем генерировать в файл, а не отдавать скриптом. Т.к. если мы будем карту отдавать скриптом, то скрипт будет каждый раз обращаться к базе что повлияет на нагрузку сервера. Если ее запросят один раз - ничего страшного, а если будут запрашивать постоянно то вероятнее всего повесят сервер - такая вероятность велика когда генерируется мегабольшой файл sitemap.xml.
Также предположим, что мы генерируем список последних постов вашего блога. Нам нужно кроме того, что составить правильный xml файл еще и отдать параметры постов, такие как время/дату создания, URL, приоритет, частоту обновления.
Ну и собственно сам код.
<?php
// Подключаемся к базе данных
global $db;
$db=new db();
$db->MySqlConnect($host, $user, $password, $base);
//Нужно для даты
define('DATE_FORMAT_RFC822','r');
// Создаем документ
$xml = new DomDocument('1.0','utf-8');
//Заголовки
$urlset = $xml->appendChild($xml->createElement('urlset'));
$urlset->setAttribute('xmlns:xsi','http://www.w3.org/2001/XMLSchema-instance');
$urlset->setAttribute('xsi:schemaLocation','http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd');
$urlset->setAttribute('xmlns','http://www.sitemaps.org/schemas/sitemap/0.9');
$db->result=$db->QueryDB("SELECT id,user_login, time FROM blog ORDER BY `id` DESC");
if (mysql_num_rows($db->result)>=1) {//2
while($row=mysql_fetch_array($db->result)) {
// Вы можете сконвертировать свою дату в нужный формат DATE_FORMAT_RFC822
$lastmod_value = date(DATE_FORMAT_RFC822, $data['time']);;
$url = $urlset->appendChild($xml->createElement('url'));
$loc = $url->appendChild($xml->createElement('loc'));
$lastmod = $url->appendChild($xml->createElement('lastmod'));
$changefreq = $url->appendChild($xml->createElement('changefreq'));
$priority = $url->appendChild($xml->createElement('priority'));
$loc->appendChild($xml->createTextNode('http://ваш_урл.ру/post/'.$row['user_login'].'/'.$row['id'].'/'));
$lastmod->appendChild($xml->createTextNode($lastmod_value));
$changefreq->appendChild($xml->createTextNode('monthly'));
//Укажем средний приоритет
$priority->appendChild($xml->createTextNode('0.5'));
}
}
$xml->formatOutput = true;
//Записываем файл
$xml->save('sitemap.xml');
?>
На выходе получим вот что:
<?xml version="1.0" encoding="utf-8"?>
<urlset 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/sitemap.xsd">
<url>
<loc>http://ваш_урл.ру/post/ваш_логин/2308/</loc>
<lastmod>Wed, 04 Aug 2010 00:00:06 +0400</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>http://ваш_урл.ру/post/ваш_логин/2307/</loc>
<lastmod>Wed, 04 Aug 2010 00:00:06 +0400</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
<url>
<loc>http://ваш_урл.ру/post/ваш_логин/2306/</loc>
<lastmod>Wed, 04 Aug 2010 00:00:06 +0400</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
...
</urlset>

(13 votes, average: 4,31 из 5)
13 Комментариев на «Генерация sitemap на PHP»
А как сделать чтобы мой скрипт заходил на мой же сайт и строил карту. Вот мой сайт писан на CodeIgniter
Ответить
Для CodeIgniter существует плагин.
Ответить
не фига не работает пишит:Fatal error: Class ‘primer’ not found in Z:\home\localhost\www\primer.ru\sitemap.php on line 4
я новичок в этом деле но очень надо сделать!!!!
Ответить
Компилятор не может найти класс primer в файле sitemap.php, смотрите 4 строчку.
Ответить
извени!!!написано супер!неподскажеш как сделать скрытую переадресацию с sitemap.xml на sitemap.php
Ответить
makecode Ответил:
Апрель 11th, 2011 at 13:56
В .htaccess
RewriteRule ^sitemap.xml $ /sitemap.php
Ответить
Ответил:
Апрель 11th, 2011 at 13:57
спасибо
Ответить
makecode Ответил:
Апрель 11th, 2011 at 13:57
Только после xml пробела не должно быть, т.е. вот так
RewriteRule ^sitemap.xml$ /sitemap.php
Ответить
Ответил:
Апрель 12th, 2011 at 13:00
извени!!!класс db он тоже не может найти???что исправить то надо???
Ответить
Ответил:
Апрель 12th, 2011 at 13:30
всё я исправил!извени за беспокойство!
не знаеш как сделать что бы sitemap.xml не было на сервере???
Ответить
makecode Ответил:
Апрель 12th, 2011 at 14:18
Почитайте документацию и примеры по PHP DOMDocument, вопросы сразу отпадут.
echo $xml->saveXML():
Ответить
Hidden due to low comment rating. Click here to see.
Poorly-rated. Like or Dislike:
0
4
Ответить
саша Ответил:
Ноябрь 3rd, 2011 at 13:50
echo $xml->saveXML():
Ответить