Sitemap.xml или «Делать было нечего…»

от автора

Новогодние праздники 666+666+666+6+6+6-го года в самом разгаре. За серьезные вещи совсем не хочется браться. Зато можно заняться всякими мелочами, до которых обычно не доходят руки. Такой мелочью для меня стала генерация файлов Sitemap.xml.
Sitemap.xml — это файл, содержащий в специальном формате ссылки на страницы сайта, которые должны быть проиндексированы поисковыми системами. Исчерпывающая информация о формате может быть найдена на Sitemaps.org.
Давно хотелось иметь удобный инструмент для формирования данных файлов.
Генерация Sitemap.xml

Поиски в сети дали множество «удобных online-сервисов» для ручного создания карты сайта и несколько простеньких скриптов, которые также непригодны для создания карты сайта с большим количеством ссылок.

Что хотим?..

Чтобы сгенерировать sitemap.xml для небольшого сайта не нужно много усилий. Для больших же ресурсов есть особенности.
Существуют ограничения на размер файлов sitemap.xml в 10Мб, а также ограничения на в 50000 ссылок на один файл. Автоматическая обработка данных ограничений и стала моей целью.
Таким образом, были сформированы следующие требования:

  1. Скрипт должен следить за размером получаемых файлов и количеством добавленных url. При необходимости, создавать несколько файлов в соответствии с форматом;
  2. Не хранить промежуточные данные в памяти;
  3. Создавать по необходимости сжатые версии файлов, для отдачи с помощью nginx;
  4. Автоматически выполнять простейшие проверки данных.

Сказано — сделано. Конечный вариант скриптов можно найти по ссылке в конце статьи.

Чего не делает скрипт?

Чтобы предупредить дальнейшие вопросы скажу, что скрипт не является универсальным решением, которое в один чих сгенерирует карту для произвольного сайта.
Это лишь инструмент, и список ссылок, которые будут добавляться в файл, необходимо формировать самостоятельно, возможно, в несколько заходов.
Кроме того, скрипт не исправляет и не кодирует url, переданные ему. Поэтому позаботиться о соответствии ссылок стандарту RFC-3986 для URI, стандарту RFC-3987 для IRI и XML-стандарту.

Пример

С помощью данного инструмента карту сайта можно создавать примерно так:

Пример скрипта, генерирующего карту сайта

<?php require_once(dirname(__FILE__)."/../common.inc.php"); set_time_limit(0); ini_set('memory_limit', '128M');  $dir = dirname(__FILE__);//document root path $tmp_dir = dirname(__FILE__);//temp path $base_url = 'http://mysite.ru/';//url with sitemaps (http://mysite.ru/sitemap.xml) $gzip = true; $config = array('path' => $dir , 'tmp_dir'=>$tmp_dir,'base_url'=>$base_url,'gzip'=>$gzip, 'gzip_level'=>9);  $builder = new SitemapBuilder($config);  $time = time();      $builder->start(); $builder->addUrl($base_url,$time,1.0); $builder->addUrl($base_url."news",$time,1.0);  /* //this is example adding url  $documents = News::find(array('criteria'=>'is_published=1')); foreach($documents as $document)   $builder->addUrl($document->getUrl(),$document->getUtime(),0.8); */     $builder->commit(); 

Ссылки

  1. Sitemaps.org
  2. Исходники скриптов генерации Sitemap.xml
  3. Репозиторий на github.com

ссылка на оригинал статьи http://habrahabr.ru/post/274557/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *