Иногда возникает необходимость использовать вместо статического файла «sitemap.xml» (XML-формат файла Sitemap) скрипт, генерирующий его динамически.
Когда это может понадобиться? Допустим у Вас имеется каталог объявлений, в котором каждый час появляются новые, соответственно, каждое из объявлений имеет уникальный URL-адрес, который побыстрее нужно сообщить поисковой системе посредством карты сайта. Или же для Вас важна динамическая генерация как «sitemap.xml» так и карты текстовой (TXT) карты сайта, содержащей просто список всех URL.
Решить данную задачу можно с помощью модуля «mod_rewrite» сервера «Apache». Требуется создать правила, которые будут при каждом обращении к файлам «sitemap.xml» или «sitemap.txt» запускать PHP-скрипт, передавая параметры, какую из карт запросили. PHP-скрипт в свою очередь соберет необходимые данные и создаст требуемую карту сайта.
Добавьте в файл «.htaccess» следующие строки:
RewriteRule ^sitemap.xml$ /sitemap.php?type=xml [L]
Эти два правила осуществляют подмену запросов к файлу карты сайта формата «xml» (sitemap.xml) и к файлу карты сайта формата «txt» (sitemap.txt).
Подмена происходит следующим образом: как только пользователь или поисковая система запросили файл «sitemap.xml», срабатывает правило, которое отсылает запрос скрипту «sitemap.php» с параметром «type=xml». Скрипт генерирует карту сайта, с помощью какой-либо своей собственной логики и выдает ее с помощью функции «echo».
Т.е. обратившись например по адресу http://localhost/sitemap.xml, на самом деле Вы получаете результат работы скрипта «sitemap.php».
Аналогично происходит и для текстовой версии карты сайта.
В скрипте «sitemap.php» необходимо проверить значение элемента «type» суперглобального массива «$_GET»:
switch ($_GET['type']){
case 'xml':
//Выполняем генерацию XML версии карты сайта.
//Лучше написать и вызвать в этом месте соответствующую функцию.
break;
case 'txt':
//Выполняем генерацию TXT версии карты сайта.
//Лучше написать и вызвать в этом месте соответствующую функцию.
break;
default:
echo 'Генератор поисковых карт сайта.';
echo 'Заходите на www.codeisart.ru';
}Преимущества
- карта сайта содержит самые последние URL на момент обращения;
- легко можно добавить статические элементы в набор URL карты сайта.
Недостатки
- при большом количестве URL на сайте, генерация карты может оказаться достаточно длительным и ресурсоемким процессом.
Подобным образом можно перехватывать обращения к любым файлам на сервере. Особенно это может быть актуально для файла «robots.txt».
Лично я сам не пользуюсь данным методом, т.к. он создает большую нагрузку на сервер, но может быть Вам материал этой статьи когда-нибудь пригодится.
В ближайшем будущем опубликую статью, в которой постараюсь описать объектно-ориентированный метод генерации карт (как XML-версию, так и TXT) сайта с использованием «DOMDocument» в PHP.