Генератор sitemap на PHP

Опубликовано: 07.10.2017

видео Генератор sitemap на PHP

How to Create Dynamic XML Sitemap in PHP

Sitemap - это специальный файл сайта, содержащий в себе информацию о новых страницах сайта (или вообще всех). Нужен для того, чтобы сообщить поисковым системам какие страницы нужно индексировать. Какие чаще, а какие реже. Sitemap обычно генерируют скриптами или создают сами, после чего добавляют в панели вебмастера поисковых систем о ее наличии.


Write a PHP Site Map Generator

Sitemap создают в формате XML, подробнее о протоколе sitemap можно почитать на сайте .

Если у Вас сайт работает на какой-либо популярной CMS, то плагин для генерации sitemap можно найти в сети. Мы же рассмотрим вариант создания своего генератора sitemap на обычном самописном сайте.

И так, раз это формат XML то сразу предлагаю использовать DomDocument, который был введен в PHP начиная с версии 4.30. Почему? Потому что использовать его проще простого, логичнее и в будущем можно избавиться от кучи проблем.

Также сразу скажу, что карту мы будем генерировать в файл, а не отдавать скриптом. Т.к. если мы будем карту отдавать скриптом, то скрипт будет каждый раз обращаться к базе что повлияет на нагрузку сервера. Если ее запросят один раз - ничего страшного, а если будут запрашивать постоянно то вероятнее всего повесят сервер - такая вероятность велика когда генерируется мегабольшой файл sitemap.xml. Если у вас получается очень большая карта сайта, то лучше сделать постраничный вывод .

Также предположим, что мы генерируем список последних постов вашего блога. Нам нужно кроме того, что составить правильный xml файл еще и отдать параметры постов, такие как время/дату создания, URL, приоритет, частоту обновления.

Ну и собственно сам код.

<?php // Подключаемся к базе данных global $db; $db=new db(); $db->MySqlConnect($host, $user, $password, $base); //Нужно для даты define('DATE_FORMAT_RFC822','r'); // Создаем документ $xml = new DomDocument('1.0','utf-8'); //Заголовки $urlset = $xml->appendChild($xml->createElement('urlset')); $urlset->setAttribute('xmlns:xsi','http://www.w3.org/2001/XMLSchema-instance'); $urlset->setAttribute('xsi:schemaLocation','http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd'); $urlset->setAttribute('xmlns','http://www.sitemaps.org/schemas/sitemap/0.9'); $db->result=$db->QueryDB("SELECT id,user_login, time FROM blog ORDER BY `id` DESC"); if (mysql_num_rows($db->result)>=1) {//2 while($row=mysql_fetch_array($db->result)) { // Вы можете сконвертировать свою дату в нужный формат DATE_FORMAT_RFC822 $lastmod_value = date(DATE_FORMAT_RFC822, $data['time']);; $url = $urlset->appendChild($xml->createElement('url')); $loc = $url->appendChild($xml->createElement('loc')); $lastmod = $url->appendChild($xml->createElement('lastmod')); $changefreq = $url->appendChild($xml->createElement('changefreq')); $priority = $url->appendChild($xml->createElement('priority')); $loc->appendChild($xml->createTextNode('http://ваш_урл.ру/post/'.$row['user_login'].'/'.$row['id'].'/')); $lastmod->appendChild($xml->createTextNode($lastmod_value)); $changefreq->appendChild($xml->createTextNode('monthly')); //Укажем средний приоритет $priority->appendChild($xml->createTextNode('0.5')); } } $xml->formatOutput = true; //Записываем файл $xml->save('sitemap.xml'); ?>

На выходе получим вот что: