В этой статье мы рассмотрим один из способов как сделать XML карту для сайта. Вариантов реализации данного функционала множество, но тут я опишу способ который, по моему мнению, наиболее универсальный и удобный.
Для начала давайте рассмотрим, какие у нас есть варианты создания XML карты, вот несколько из них:
- Использовать различные XML карт генераторы, которые можно найти в интернете;
- Написать скрипт, который непосредственно будет работать c XML файлом и изменять его структуру при добавлении контента на сайт;
- Третий вариант написать обработчик, который будет эмитировать XML файл.
Возможно, есть и другие варианты, но эти мне пришли сразу на ум. В этой же статье пойдёт речь о третьем способе. Для реализации, которого нам потребуется для начала добавить пару строк в htaccess, если он есть, или создать.
RewriteEngine on
RewriteRule ^sitemap.xml?$ sitemap.php [L,QSA]
Эти два правила и будут выполнять первую часть способа, а именно эмитировать XML документ. RewriteEngine включает механизм преобразования на сервере, вторая строчка задает правило этого преобразования. Фактически когда приходит запрос на XML файл, идет выполнение PHP скрипта, который и выдает нам нужные ссылки для карты в XML формате.
Именно такой принцип, по моему мнению, очень удобен. Используя его, мы можем для каждого поискового робота сделать свою XML карту, немного изменив скрипт.
Теперь приступим к написанию самого обработчика:
// Подключаемся к БД
$db = new mysqli("localhost", "root", "", "db");
$db->set_charset("utf8");
if($db->connect_error){
echo "<div style='color: red;'>ERROR БД</div>";
exit;
}
// Вытягиваем нужные данные
$result = $db->query("SELECT id FROM articles");
$row = array();
for($i = 0; $i < $result->num_rows; $i++){
$row[] = $result->fetch_assoc();
}
// Генерируем XML Карту
header("Content-type: text/xml; charset=UTF-8");
echo('<?xml version="1.0" encoding="UTF-8"?>'."\n");
echo('<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'."\n");
echo("\t<url>\n");
echo("\t\t<loc>http://mysite.ru</loc>\n");
echo("\t</url>\n");
// Ссылки
foreach($row as $r){
$url = 'http://mysite.ru/article/id/'.$r['id'];
echo("\t<url>\n");
echo("\t\t<loc>$url</loc>\n");
echo("\t</url>\n");
}
echo('</urlset>'."\n");
Визуально скрипт делиться на три части: подключение к БД, вытягивание данных (в примере - id статей) и генерация XML файла. В этом скрипте я использовал минимум необходимого кода, поэтому, если вам понравился способ, нужно будет изменить всего пару строк.
В результате мы получим вот такую картину, если обратиться непосредственно к XML файлу.
Вот и всё, карта сайта готова.