Категории

Как сделать динамический sitemap.xml без движков и плагинов

19.09.2025 15:29 | коды из категории: Создание сайтов

Пошаговое руководство: создаём живой sitemap.xml на чистом PHP, без CMS, без WordPress, без костылей.

про Как сделать динамический sitemap.xml без движков и плагинов

Зачем это нужно?

Статический 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";

Шаг 2: Добавляем главную страницу

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;

Шаг 3: Подключаем базу данных

Подключите ваш файл с настройками БД. Например:

require 'includes/db.php';

Убедитесь, что в db.php у вас инициализирован объект PDO: $pdo.

Шаг 4: Выбираем статьи из БД

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 — используйте его для .

Шаг 5: Закрываем XML

echo '</urlset>';

Шаг 6: Отдаём поисковикам ссылку на .php

Да, вы не ослышались. Просто отправьте в Google Search Console и Яндекс.Вебмастер ссылку:

https://ваш-сайт.ru/sitemap.php

Поисковики прекрасно понимают динамические sitemap. Главное — чтобы он возвращал валидный XML.

Шаг 7: Боремся с кэшированием (самая частая ошибка!)

Если вы используете Cloudflare, Nginx Cache или любой другой CDN/кэш — он может закэшировать ваш sitemap и не обновлять его неделями.

Решение:

  • Очистите кэш вручную после изменений.
  • Настройте правило, чтобы sitemap.php и sitemap.xml не кэшировались.
  • В Cloudflare: создайте Page Rule для *ваш-сайт.ru/sitemap* → Cache Level: Bypass.

Бонус: Красивый URL /sitemap.xml через .htaccess

Если хочется красивый URL, создайте файл .htaccess в корне сайта:

RewriteEngine On
RewriteRule ^sitemap\.xml$ sitemap.php [L]

Теперь поисковики могут ходить по /sitemap.xml, а сервер будет выполнять /sitemap.php.

Вывод

Динамический sitemap — это просто, надёжно и актуально. Вам не нужны плагины, которые тормозят сайт и ломаются при обновлении. Чистый PHP + ваша логика — и поисковики всегда знают, где ваши новые статьи.

P.S. Не забудьте очистить кэш 😉

Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

← Назад к списку

Важно: Блог-эксперимент

Блог только запустил, все статьи генерирую через нейросеть т.к. лень, возможны ошибки. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
Если у вас есть вопросы, или Нашли неточность? пишите в коментах — вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.

Посетителей сегодня: 0


кто я | книга | контакты без контактов

© Digital Specialist | Не являемся сотрудниками Google, Яндекса и NASA