Пошаговое руководство: создаём живой sitemap.xml на чистом PHP, без CMS, без WordPress, без костылей.
Статический sitemap.xml — это вчерашний день. Если у вас блог, интернет-магазин или любой сайт с часто обновляемым контентом — вам нужен динамический sitemap. Он генерируется “на лету”, всегда актуален и не требует ручного обновления. Никаких WordPress, Joomla, OpenCart. Только чистый PHP и ваша база данных. Создайте файл Начните с чистого листа:Зачем это нужно?
Шаг 1: Создаём файл sitemap.php
sitemap.php в корне вашего сайта (например, /var/www/your-site/public_html/sitemap.php).
<?php
// Очищаем буфер вывода
if (ob_get_level()) {
ob_clean();
}
// Говорим браузеру и поисковикам: это XML!
header('Content-Type: application/xml; charset=utf-8');
// Начинаем XML-документ
echo '<?xml version="1.0" encoding="UTF-8"?>' . PHP_EOL;
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' . PHP_EOL;
// Определяем базовый URL сайта
$protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https' : 'http';
$host = $_SERVER['HTTP_HOST'];
$base_url = "$protocol://$host";
echo ' <url>' . PHP_EOL;
echo ' <loc>' . htmlspecialchars($base_url . '/') . '</loc>' . PHP_EOL;
echo ' <lastmod>' . date('Y-m-d') . '</lastmod>' . PHP_EOL;
echo ' <changefreq>daily</changefreq>' . PHP_EOL;
echo ' <priority>1.0</priority>' . PHP_EOL;
echo ' </url>' . PHP_EOL;
Подключите ваш файл с настройками БД. Например:
require 'includes/db.php';
Убедитесь, что в db.php у вас инициализирован объект PDO: $pdo.
try {
$stmt = $pdo->query("SELECT id, created_at FROM articles ORDER BY created_at DESC");
while ($row = $stmt->fetch()) {
$url = $base_url . '/article.php?id=' . (int)$row['id'];
$lastmod_date = date('Y-m-d', strtotime($row['created_at']));
echo ' <url>' . PHP_EOL;
echo ' <loc>' . htmlspecialchars($url) . '</loc>' . PHP_EOL;
echo ' <lastmod>' . $lastmod_date . '</lastmod>' . PHP_EOL;
echo ' <changefreq>weekly</changefreq>' . PHP_EOL;
echo ' <priority>0.8</priority>' . PHP_EOL;
echo ' </url>' . PHP_EOL;
}
} catch (Exception $e) {
error_log('Sitemap DB error: ' . $e->getMessage());
}
Важно! Убедитесь, что в таблице articles есть поля id и created_at. Если у вас есть поле updated_at — используйте его для .
echo '</urlset>';
Да, вы не ослышались. Просто отправьте в Google Search Console и Яндекс.Вебмастер ссылку:
https://ваш-сайт.ru/sitemap.php
Поисковики прекрасно понимают динамические sitemap. Главное — чтобы он возвращал валидный XML.
Если вы используете Cloudflare, Nginx Cache или любой другой CDN/кэш — он может закэшировать ваш sitemap и не обновлять его неделями.
Решение:
sitemap.php и sitemap.xml не кэшировались.*ваш-сайт.ru/sitemap* → Cache Level: Bypass.Если хочется красивый URL, создайте файл .htaccess в корне сайта:
RewriteEngine On RewriteRule ^sitemap\.xml$ sitemap.php [L]
Теперь поисковики могут ходить по /sitemap.xml, а сервер будет выполнять /sitemap.php.
Динамический sitemap — это просто, надёжно и актуально. Вам не нужны плагины, которые тормозят сайт и ломаются при обновлении. Чистый PHP + ваша логика — и поисковики всегда знают, где ваши новые статьи.
P.S. Не забудьте очистить кэш 😉
Блог только запустил, все статьи генерирую через нейросеть т.к. лень, возможны ошибки. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
Если у вас есть вопросы, или Нашли неточность? пишите в коментах — вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.
Комментарии
Пока нет комментариев. Будьте первым!