Cоздаем карту сайта sitemap.xml «на лету»

01 Фев 2012 / Дарья Рыбалтович

В данной статье я постараюсь рассказать, как упростить создание и обновление файла sitemap.xml с помощью небольшого скрипта на PHP. Обязательным условием для работы данного скрипта является наличие на сайте базы данных в формате MySQL. Если же ваш сайт написан без использования баз данных, то, по идее можно модифицировать этот скрипт для прохода по дереву папок, но это будет куда больше работы, так что оставляю это на усмотрение фанатов.

Что такое карта сайта sitemap.xml?

Наверняка, посещая различные интернет ресурсы, вы сталкивались с пунктом меню «Карта сайта» или с вот таким значком -  . Так вот, это все нужно и хорошо, но это – для пользователей. А наша с вами задача сделать тоже самое, но для поисковых роботов. Файл sitemap.xml не виден пользователям и выполняет чисто технические задачи.

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

Подробная спецификация файла sitemap.xml описана на официальном сайте sitemaps.org.

Cоздание sitemap.xml вручную

Создать карту сайта можно в любом текстовом редакторе, опираясь на базовые знания стандарта XML.

Ниже приведен пример файла Sitemap, в котором содержится только один URL-адрес и использованы все необязательные теги. Необязательные теги выделены курсивом.

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
   <url>
      <loc>http://easydraw.ru/</loc>
      <lastmod>2012-02-01</lastmod>
      <changefreq>monthly</changefreq>
      <priority>0.8</priority>
   </url>
</urlset>

Генерация sitemap.xml с помощью специальных сервисов

Для создания файла sitemap.xml можно воспользоваться как готовыми сервисами, например, XML-Sitemaps.com (бесплатен, если на сайте до 500 страниц). На главной странице необходимо заполнить форму "Please enter details for sitemap generation" с полями:

  • "Начальный URL (Starting URL)" - в поле ввода нужно указать ссылку на главную страницу сайта,
  • "Частота изменений страниц (Change frequency)" - из выпадающего списка нужно выбрать частоту обновления страниц сайта,
  • "Последнее изменение (Last modification)" - нужно указать, когда страницы сайта в последний раз подвергались изменению("Никогда (None)", "Использовать дату сервера (Use server's response)", "Использовать указанную дату (Use this date/time)"),
  • "Приоритет стрниц (Priority)" - также можно назвать "весом (важностью)" страниц - нужно выбрать из выпадающего списка "Не указывать (None)"

После указания всех необходимых данных нужно нажать на кнопку "Старт (Start)".

Начнется обработка страниц указанного в "Начальный URL (Starting URL)" сайта. Этот процесс займет некоторое время. По его окончании Вам будет предложено скачать файл Sitemap.xml в различных форматах (xml, zip, tar.gz и т.п.).

Файл Sitemap готов! Теперь осталось загрузить его на сервер и составить инструкции поисковикам, где его найти.

Создание собственного скрипта на PHP

Этот способ предпочтителен, если вы знакомы с PHP и любите все делать сами, чисто и красиво. Преимуществом является простота настройки, и быстрота работы сервиса. Настроил один раз – пользуйся хоть всю жизнь, если сайт не поменяет кардинально свою структуру.

Для начала, проверим нашу базу данных, мы будем делать скрипт под таблицу со статьями (в моем случае, это таблица info). В ней обязательно должны присутствовать поля с адресом (url), дата изменения (modify) и приоритет страницы (priority). Первые два поля скорее всего есть, а последнее создается специально для этого скрипта. Кстати, данные в нем хранятся в десятичном формате от 0.1  до 0.9. Поля с приоритетом 0 мы будем игнорировать при выводе в карту сайта.

Создаем файл sitemap.php где-нибудь на сайте, желательно в защищенной директории (подробнее о методах защиты сайта с помощью .htaccess - http://www.softtime.ru/info/apache.php?id_article=27).

Сначала опишем заголовки файла и корневую директорию:


$zag = "<?xml version='1.0' encoding='UTF-8'?>\n<urlset xmlns='http://www.sitemaps.org/schemas/sitemap/0.9'>\n";
$url = "http://easydraw.ru/";
$str = "";
$str0 = " <url>\n\t\t<loc>.".$url."</loc>\n\t\t<priority>0.8</priority>\n\t</url>\n";
$end = "</urlset>";

//создадим соединение с базой и выберем нужные нам записи из таблицы
require_once('constants.inc.php'); //подключаем файл с константами соединения
mysql_connect(DB_HOST, DB_USERNAME, DB_PASSWORD) or die("Не могу создать соединение ");
mysql_select_db(DB_NAME) or die(mysql_error());
$result = mysql_query ("SELECT url, priority, modify FROM `info` WHERE `priority`<>'0' ") or die (mysql_error()); //выбираем из таблицы все записи

while ($row = mysql_fetch_assoc($result)) {
	$str1 = "\t<url>\n\t\t<loc>".$url.$row[url].".html</loc>\n";  //адрес страницы, если есть страницы во вложенных папках, которые надо проиндексировать, то перед переменной $url можно добавить переменную с категорией
	$str2 = "\t\t<priority>".$row['priority']."</priority>\n"; //приоритетность
	$str3 = "\t\t<lastmod>".$row['modify']."</lastmod>\n"; //дата изменения страницы
	$str4 = "\t</url>\n";
	$str = $str.$str1.$str2.$str3.$str4; //собираем итоговую строку.
}

$str = $zag.$str0.$str.$end;

Теперь добавим обработчик файла:

$file = "./sitemap.xml"; //адрес, куда запишем файл (я пишу в корень)
if(!$handle = fopen($file, "w")){
	echo "Cannot open file ($file)";
	exit;
}

if (fwrite($handle, $str) === FALSE) {
	echo "Cannot write to file ($file)";
	exit;
}

echo "Success";
fclose($handle);

В итоге наш файл будет выглядеть так:

<?php
$zag = "<?xml version='1.0' encoding='UTF-8'?>\n<urlset xmlns='http://www.sitemaps.org/schemas/sitemap/0.9'>\n";
$url = "http://easydraw.ru/";
$str = "";
$str0 = " <url>\n\t\t<loc>.".$url."</loc>\n\t\t<priority>0.8</priority>\n\t</url>\n";
$end = "</urlset>";

require_once('constants.inc.php');
mysql_connect(DB_HOST, DB_USERNAME, DB_PASSWORD) or die("Не могу создать соединение ");
mysql_select_db(DB_NAME) or die(mysql_error());
$result = mysql_query ("SELECT url, priority, modify FROM `info` WHERE `priority`<>'0' ") or die (mysql_error());
while ($row = mysql_fetch_assoc($result)) {
	$str1 = "\t<url>\n\t\t<loc>".$url.$row['from'].".html</loc>\n";
	$str2 = "\t\t<priority>".$row['priority']."</priority>\n";
	$str3 = "\t\t<lastmod>".$row['modify']."</lastmod>\n";
	$str4 = "\t</url>\n";
	$str = $str.$str1.$str2.$str3.$str4;
}

$str = $zag.$str0.$str.$end;
$file = "./sitemap.xml";
if(!$handle = fopen($file, "w")){
	echo "Cannot open file ($file)";
	exit;
}

if(fwrite($handle, $str) === FALSE) {
	echo "Cannot write to file ($file)";
	exit;
}

echo "Success";
fclose($handle);
?>

Загружаем файл на сервер и запускаем из браузера. Если все сделано правильно, получаем сообщение "Success" и наслаждаемся результатом.

Куда дать знать о sitemap.xml поисковикам

Обычно файл sitemap.xml загружается в корневую папку сайта. Но, при желании, его можно загружать в любую, доступную через браузер папку сайта. Далее, необходимо прописать путь к файлу sitemap.xml в файле robots.txt.

Если на вашем сайте ещё нет файла robots.txt, то нужно создать его минимальную версию, полностью разрешающую всем поисковикам сканирование всего сайта. Для этого нужно сделать файл всего из двух строчек:

User-agent: *
Allow: /

После того, как в нашем распоряжении оказался готовый работающий файл robots.txt, нам нужно добавить всего одну строку.

Sitemap: http://easydraw.ru/sitemap.xml

В данном случае файл sitemap.xml находится в корне сайта и доступен поисковым роботам.

Автор: Дарья Рыбалтович, 01.02.2012

Метки: СЕО, Сайтостроение