Найти в Дзене

PHP-скрипт для генерации sitemap.xml

PHP-скрипт для генерации sitemap.xml, который включает URL с параметрами ?act=* для локального сайта. Скрипт сканирует файлы в указанной директории и формирует валидный XML-файл. <?php // Конфигурация $siteUrl = 'http://localhost'; // Базовый URL вашего локального сайта $targetDir = __DIR__; // Директория для сканирования (текущая или укажите путь, например: '/path/to/your/site' $sitemapPath = __DIR__ . '/sitemap.xml'; // Куда сохранить sitemap.xml $includeQueryUrls = true; // Включать URL с параметрами ?act=* // Функция для рекурсивного сканирования директории function scanDirectory($dir, $siteUrl, $baseDir, &$urls, $includeQueryUrls) { $files = scandir($dir); foreach ($files as $file) { if ($file === '.' || $file === '..') continue; $path = $dir . '/' . $file; if (is_dir($path)) { scanDirectory($path, $siteUrl, $baseDir, $urls, $includeQueryUrls); } else { // Обработка файлов $relativePath = str_replace($baseDir, '', $path); $relativePath = str_replace('\\', '/', $relativePath); //
Оглавление

PHP-скрипт для генерации sitemap.xml, который включает URL с параметрами ?act=* для локального сайта. Скрипт сканирует файлы в указанной директории и формирует валидный XML-файл.

Файл: generate_sitemap.php

<?php
// Конфигурация
$siteUrl = 'http://localhost'; // Базовый URL вашего локального сайта
$targetDir = __DIR__; // Директория для сканирования (текущая или укажите путь, например: '/path/to/your/site'
$sitemapPath = __DIR__ . '/sitemap.xml'; // Куда сохранить sitemap.xml
$includeQueryUrls = true; // Включать URL с параметрами ?act=*
// Функция для рекурсивного сканирования директории
function scanDirectory($dir, $siteUrl, $baseDir, &$urls, $includeQueryUrls) {
$files = scandir($dir);
foreach ($files as $file) {
if ($file === '.' || $file === '..') continue;
$path = $dir . '/' . $file;
if (is_dir($path)) {
scanDirectory($path, $siteUrl, $baseDir, $urls, $includeQueryUrls);
} else {
// Обработка файлов
$relativePath = str_replace($baseDir, '', $path);
$relativePath = str_replace('\\', '/', $relativePath); // Для Windows
// Исключаем ненужные файлы (настройте под свой проект)
if (preg_match('/\.(php|html|htm)$/i', $file)) {
$url = $siteUrl . $relativePath;
// Добавляем URL с параметрами ?act=*
if ($includeQueryUrls && strpos($file, 'index.php') !== false) {
$urls[] = $url . '?act=main';
$urls[] = $url . '?act=news';
// Добавьте другие параметры по необходимости
}
$urls[] = $url; // Основной URL без параметров
}
}
}
}
// Собираем все URL
$urls = [];
scanDirectory($targetDir, $siteUrl, $targetDir, $urls, $includeQueryUrls);
// Удаляем дубликаты
$urls = array_unique($urls);
// Генерируем XML
$xml = new DOMDocument('1.0', 'UTF-8');
$xml->formatOutput = true;
$urlset = $xml->createElement('urlset');
$urlset->setAttribute('xmlns', 'http://www.sitemaps.org/schemas/sitemap/0.9');
foreach ($urls as $url) {
$urlElement = $xml->createElement('url');
$loc = $xml->createElement('loc', htmlspecialchars($url));
$urlElement->appendChild($loc);
$lastmod = $xml->createElement('lastmod', date('Y-m-d'));
$urlElement->appendChild($lastmod);
$urlset->appendChild($urlElement);
}
$xml->appendChild($urlset);
// Сохраняем файл
$xml->save($sitemapPath);
echo "Sitemap успешно создан: " . $sitemapPath . "\n";
?>

Как использовать?

  1. Поместите скрипт в корневую директорию вашего локального сайта.
  2. Настройте параметры:
  • $siteUrl — базовый URL (например, http://localhost).
  • $targetDir — путь к файлам сайта (по умолчанию текущая директория).
  • $includeQueryUrls — включать ли URL с ?act=*.

3. Запустите в браузере или через командную строку:

php generate_sitemap.php

4. Результат: В той же папке появится файл sitemap.xml.

Что делает скрипт?

1. Рекурсивно сканирует указанную директорию.

2. Находит все .php, .html, .htm файлы.

3. Для index.php добавляет URL с параметрами:

- ?act=main

- ?act=news

(добавьте свои параметры при необходимости).

4. Генерирует валидный XML с:

- <loc> — URL страницы.

- <lastmod> — текущая дата.

Пример сгенерированного sitemap.xml

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://localhost/index.php</loc>
<lastmod>2024-03-25</lastmod>
</url>
<url>
<loc>http://localhost/index.php?act=main</loc>
<lastmod>2024-03-25</lastmod>
</url>
<url>
<loc>http://localhost/index.php?act=news</loc>
<lastmod>2024-03-25</lastmod>
</url>
</urlset>

Доработки под ваш проект

1. Добавьте больше параметров:

Измените блок:

$urls[] = $url . '?act=main';
$urls[] = $url . '?act=news';

2. Исключите лишние файлы:

Добавьте проверки в scanDirectory(), например:

if (strpos($file, 'admin') !== false) continue;

3. Для WordPress/Joomla:

Лучше использовать плагины (Yoast SEO, OSMap), так как они учитывают ЧПУ.

Проверка валидности

1. Откройте sitemap.xml в браузере:

http://localhost/sitemap.xml

2. Проверьте через [валидатор](https://www.xml-sitemaps.com/validate-xml-sitemap.html).

Скрипт готов к использованию для локальных проектов! Для рабочих сайтов добавьте фильтрацию дублей и приоритизацию URL.