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

в 10:13, , рубрики: php, seo, sitemap, 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

Автор: vasiatka

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js