Файл Sitemap.xml

Часто в "robots.txt" мы видим запись

Sitemap: http://sait.ru/Sitemap.xml.


Что же это такое? Sitemap - в переводе на русский язык Карта сайта... Это довольно таки нужный файл. Нужен он для роботов, которые индексируют наш сайт. В файле "robots.txt" прописывается эта строка и Робот уже знает, что может зайти в файл "Sitemap.xml" и найти ВСЕ ссылки, то есть ВСЕ страницы сайта. В этом случае индексация сайта роботами улучшается. Если сайт динамический и в нем постоянно добавляются странички, то файл "Sitemap.xml" просто обязателен. Итак,
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>http://f9r.ru/</loc>
    <priority>1</priority>
    <changefreq>hourly</changefreq>
  </url>
  <url>
    <loc>http://f9r.ru/index.html</loc>
    <priority>0.5</priority>
    <changefreq>weekly</changefreq>
  </url>
  <url>
    <loc>http://f9r.ru/all.php?act=forum&amp;how=web</loc>
    <priority>0.1</priority>
    <changefreq>monthly</changefreq>
  </url>
</urlset>


Вы видите листинг стандартного файла "Sitemap.xml", в нем прописаны ТРИ ссылки с нашего сайта:

http://f9r.ru/
http://f9r.ru/index.html
http://f9r.ru/all.php?act=forum&how=web

Причем, как Вы можете видеть символ "&" в файле Sitemap.xml заменен на "&amp;" - это одно из самых главных условий, которое надо неукоснительно выполнять.

Кроме этого, давайте разберем устройство сайта "Sitemap.xml", Вы видите, что он представляет собой открывающиеся и закрывающиеся теги, между которыми, как и в HTML располагается информация.

Итак, файл находится между тегами

<urlset>
Здесь основная инфа
</urlset> 


Далее идут теги, в которых располагаютя URLы

<url>
Здесь инфа об URLах
</url>


Далее:

    <loc>ИМЯ URLа</loc>
    <priority>Приоритет URLа</priority>
    <changefreq>Как часто сканировать URL</changefreq>


Вы видите, что сложного в этом ничего нет, Приоретет может быть от 0.1 до 1, в зависимости от значимости для вашего сайта данной страницы, Вы можете попросить робота сканировать данную страницу:

hourly - каждый час
weekly - раз в неделю
monthly - раз в месяц
Теперь, когда мы разобрались как устроен "Sitemap.xml" надо сказать о том, что еще совсем не значит, что роботы будут неукоснительно исполнять то, что прописано в данном файле, но тем не менее, практика показала, с файлом "Sitemap.xml" сканирование роботами происходит лучше.

Итак, перейдем к главному. Можно просто прописать файл в головную папку сайта и записать туда все Urlы вашего сайта, использую ту спецификацию, что здесь приведена. Если страниц на сайте немного, то труда это не составит. Но, если страниц больше 1000, то вы замучаетесь прописывать вручную все страницы вашего сайта в "Sitemap.xml". Однако, так же можно воспользоваться сервисами, которые сканируют ваш сайт и выдают Вам распечатку "Sitemap.xml", то же не очень хорошее решение, так как такие сервисы более 1000 страниц не выводят.

И самое главный минус в том, чтобы просто прописать файл Сайтемап в головную папку - это то, что ваш сайт может начать сканировать программа - робот с целью украсть его и сделать зеркально похожий сайт. В этом случае, такой программе даже не надо будет искать все Ваши ссылки, так как один раз скачав ваш "Sitemap.xml", такой программе Вы сами облегчете труды, она все ваши Urlы сразу узнает.

В итоге, приходим к выводы, что файл Сайтемап нельзя прописывать в головной папке, как же быть, чтобы нормальным роботам можно было его отдать, а всем остальным нет?

Решение напрашивается само собой, создавать его динамически, смотреть какой робот пытается его забрать, отдавать только хорошим роботам. На данный момент на нашем сайте мы отдаем этот файл только: Googlebot, Yandex, Rambler, Yahoo, Msnbot, Aport, Mail.Ru. Вы видите здесь только 7 роботов.

Без использования .htaccess здесь не обойтись, если на вашем сервере не работают эти файлы, то дальше ничего можете не читать. Если .htaccess работают, то пишем в него строки

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ˆ/Sitemap\.xml$ [NC]
RewriteRule ˆ.* /sitemap.php?type=xml [L]



Вы видите, что при запросе "http://f9r.ru/Sitemap.xml", скрыто без ридеректа мы отдадим страничку "http://f9r.ru/sitemap.php?type=xml", то есть отдаем файл sitemap.php, и дополнительно прописываем, что формат файла type=xml

Примерный листинг файла sitemap.php:

<?php 
    # Определим $_User_host, подробнее о функии ip() здесь... 
$_User_ip = ip(); 
$_User_host = @gethostbyaddr ($_User_ip); // узнаем host робота 

    # $_BName и $_Brobot определим, подробнее о функции здесь... 
$_ARR = detect_browser ($_User_agent); 
$_BName = $_ARR[0]; // если робот, то вывод будет $_BName = Robot 
$_Brobot = $_ARR[3]; // имя робота 

    # если зашел робот 
if ( $_BName == 'Robot' ){ 
    # Плохой броузер, который представляется Google Yandex Yahoo Rambler Msnbot Aport Mail.Ru 
     if ( $_User_ip != $_User_host and 
         ( $_Brobot == 'Googlebot' or 
         $_Brobot == 'Yandex' or 
         $_Brobot == 'Rambler' or 
         $_Brobot == 'Yahoo' or 
         $_Brobot == 'Msnbot' or 
         $_Brobot == 'Aport' or 
         $_Brobot == 'Mail.Ru') 
         ){ 

    # проверяем не врет ли нам робот, сверяя его имя с имененм хоста 
         if ( ( $_Brobot == 'Googlebot' and ! preg_match ('~googlebot\.com~', $_User_host) ) or 
         ( $_Brobot == 'Yandex' and ! preg_match ('~yandex(\.ru|\.net)~', $_User_host) ) or 
         ( $_Brobot == 'Rambler' and ! preg_match ('~rambler~', $_User_host) ) or 
         ( $_Brobot == 'Yahoo' and ! preg_match ('~yahoo\.net~', $_User_host) ) or 
         ( $_Brobot == 'Aport' and ! preg_match ('~wmd\.rol\.ru~', $_User_host) ) or 
         ( $_Brobot == 'Mail.Ru' and ! preg_match ('~mail\.ru~', $_User_host) ) or 
         ( $_Brobot == 'Msnbot' and ! preg_match ('~search\.(live|msn)\.com~', $_User_host) ) 
         ) 

    # если врет выводим error 401 
         { print 'error 401'; } 

    # если НЕ врет выводим sitemap.php 
     else { 

    # печатаем начало "Sitemap.xml" 
     $content = '<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
';


    # считываем файл 'data/site_map.dat' - в этом файле построчно лежат 
    # все наши Urlы плюс через "::" их значимость от 1 до 10 (приоритет) 
     $general = file ( 'data/site_map.dat' );
     $lines = count ($general);

    # прогоняем все это в цикле 
     for ($i=0; $i<$lines; $i++){
         list ($url, $level) = explode ("::",$general[$i]);
    # чему равен приоретет 
         if ($level == 0) { $changefreq = 'hourly'; }
         elseif ($level < 3) { $changefreq = 'weekly'; }
         else { $changefreq = 'monthly'; }
         if ($url=='') { $priority = 1; }
         else { $priority = 1 - $level/10; }

    # выводим url, заменяя в нем "&" на "&amp;" 
         $url = str_replace ('&', '&amp;', $url);

    # добавляем к $content 
        $content .= " <url>
        <loc>http://f9r.ru/".$url."</loc>
        <priority>".$priority."</priority>
        <changefreq>".$changefreq."</changefreq>
        </url>\n";
        }

    # когда цикл закончился, добавляем к $content конечный тег 
         $content .= "</urlset>\n";

    # печатем $content 
         echo $content;
         } 
     } 
}
    # если файл пытается скачать броузер отдаем ему ошибку 
else { print 'error 410'; } 
?>

Вы видите, что проблема решена... Остается вопрос каким образом все ваши странички попадут в файл - базу 'data/site_map.dat', наша программа ЭТО делает сама. Написать скрипт, который подошел бы для всех невозможно, потому что алгоритм хранения данных разный на разных сайтах. Тем не менее, скачайте скрипт нашего сайта и вы сможете увидеть как работает данный механизм, там все это реализовано и все автоматизировано. Кроме этого, можете попробовать в командной строке своего броузера набрать http://f9r.ru/Sitemap.xml, чтобы увидеть результат работы скрипта.
Теги:
Sitemap
Добавлено: 27 Апреля 2018 19:06:35 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...