Динамическая подмена запросов к Sitemap.XML

VitaliyRodnenko, 04.08.2008

Иногда возникает необходимость использовать вместо статического файла «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]
RewriteRule ^sitemap.txt$ /sitemap.php?type=txt [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.

Подписаться на обновления блога

Вам понравился наш блог, хотите следить за обновлениями? Подпишитесь на RSS рассылку или рассылку по электронной почте. Так же вы можете следить за нами в Twitter.

Категории: PHP | Комментировать

Комментарии

  1. Иван / 16.03.2009 в 18:35

    Если хотите посадить сайт то используйте, тем более что скрипт на хостах больше 20сек не работают, да и робот вас пошлет нафиг скорее чем дождеться ответа. Cron вам в руки

  2. copist / 30.06.2009 в 21:20

    Да, кэширование не помешало бы. Был у меня один такой, взял с раздатчика, так у него в конце стояли подряд четыре HTTP запроса для пинга поисковиков. Вот он реально работал долго. Я потом статьюшку нашёл (http://www.catanich.com/sitemap-ping-services.asp) — там ссылки для пинга прямо в тексте стоят, каждый встречный поперечный в них тыкается :)

  3. Вкладыши в зеркало / 13.02.2017 в 17:06

    А для интернет магазина применимо?

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

480×60
480×60