Зачем нужен sitemap.xml
Файл sitemap (от англ. site — «сайт», map — «карта») — это файл с перечнем всех страниц сайта, подлежащих индексированию поисковыми системами. Он не должен включать адреса страниц со служебной информацией, например, корзину интернет-магазина или адреса страниц пагинации, начиная со второй. Для небольших сайтов (100-200 страниц) он вовсе не нужен, так как робот поисковой системы сам всё найдёт по ссылкам, а редкие исключения можно добавить через Вебмастер.
Официальные данные:
Пример файла sitemap.xml
- Индексный файл:
http://shpargalkablog.ru/sitemap.xml - Файл
sitemap:http://shpargalkablog.ru/sitemap.xml?p=0
Как создать sitemap.xml на PHP и MySQL
Для базы данных table, содержащей такие столбцы:
+----------------+--------------------------------+-----------------------------+----------------------------+ | id | url | update | meta | | smallint(5) | varchar(255) | timestamp | set('noindex', 'feed', '') | | UNSIGNED | | CURRENT_TIMESTAMP | | | AUTO_INCREMENT | | ON UPDATE CURRENT_TIMESTAMP | | +----------------+--------------------------------+-----------------------------+----------------------------+ | 1 | 2017/02/sitemap-php-mysql.html | 2017-02-14 09:07:30 | | +----------------+--------------------------------+-----------------------------+----------------------------+ | 2 | 2017/02/example.html | 2017-01-26 12:00:00 | noindex | +----------------+--------------------------------+-----------------------------+----------------------------+
Файл db.php
<?php
if (defined('dbOn')) {
$mysqli = new mysqli('localhost', 'my_user', 'my_password', 'my_db'); // подключение к серверу MySQL: тут указывается пароль к базе данных
if ($mysqli->connect_error) {
die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}
} else {
exit();
}
Файл sitemap.php
<?php
if (isset($_GET['p']) && in_array($_GET['p'], array('0','1'))): sitemapN($_GET['p']); // in_array($_GET['p'], array('0','1')) убирает невостребованные страницы site.ru/sitemap.xml?p=2, site.ru/sitemap.xml?p=3 и т.д.
elseif ($_SERVER['QUERY_STRING'] == ''): sitemap();
else: sitemap404();
endif;
function sitemap() { // файл индекса Sitemap
// подключить файл с паролем от базы данных
define('dbOn', '');
require_once 'абсолютный_адрес/db.php';
if (!$mysqli->set_charset("utf8")) {
printf("Ошибка при загрузке набора символов utf8: %s\n", $mysqli->error);
exit();
} else {
if ($result = $mysqli->query("SELECT FLOOR(id/1000) FROM table WHERE meta NOT LIKE '%noindex%' ORDER BY id DESC LIMIT 1;")) { // 1000 — это максимальное количество адресов страниц сайта, хранящихся в одном Sitemap, которое можно изменить на другое число, но не более 50000; условие WHERE meta NOT LIKE '%noindex%' не заносит адрес страницы в Sitemap, если в столбце meta есть значение noindex
$row = $result->fetch_row();
$row = intval($row[0]);
header("Content-Type: application/xml;");
echo '<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
for ($i=0; $i<=$row; $i++) {
echo '<sitemap><loc>http://site.ru/sitemap.xml?p='.$i.'</loc></sitemap>'; // http://site.ru/ — это домен рассматриваемого сайта, например, http://shpargalkablog.ru/
}
echo '</sitemapindex>';
}
}
$mysqli->close();
exit();
}
function sitemapN($i) { // файлы Sitemap
define('dbOn', '');
require_once 'абсолютный_адрес/db.php';
if (!$mysqli->set_charset("utf8")) {
printf("Ошибка при загрузке набора символов utf8: %s\n", $mysqli->error);
exit();
} else {
if ($result = $mysqli->query("SELECT url, update FROM table WHERE id>=". $i*1000 ." AND id<". ($i+1)*1000 ." AND meta NOT LIKE '%noindex%' LIMIT 1000;")) {
header("Content-Type: application/xml;");
echo '<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
while ($row = $result->fetch_assoc()) {
echo '
<url>
<loc>http://site.ru/'. $row['url'] .'</loc>
<lastmod>'. date('c', strtotime($row['update'])) .'</lastmod>
// теги priority и changefreq не являются обязательными и есть большие сомнения относительно того, что они как-то учитываются поисковыми системами
</url>';
}
echo '
</urlset>';
}
}
$mysqli->close();
exit();
}
function sitemap404() { // 404 ошибка
http_response_code(404);
include_once 'http://site.ru/404.php'; // подключить файл со своим оформлением 404 ошибки
exit();
}
Файл .htaccess
RewriteEngine On # если запись отсутствует RewriteRule ^sitemap.xml$ /sitemap.php
Файл robots.txt
User-agent: * Allow: / # запись для примера, разрешает сканировать все страницы Sitemap: http://site.ru/sitemap.xml
Как добавить файл sitemap.xml в Яндекс и Google
Сообщить поисковым системам о созданном файле с картой сайта можно двумя способами.
- Добавить директиву
sitemapс его адресом в файлrobots.txt(см. выше) - Добавить его адрес в соответствующее поле в Вебмастере