На практике совершенно необязательно, чтобы весь веб-сайт управлялся при помощи единой системы управления контентом. Например, основная часть веб-сайта может управляться при помощи системы управления контентом GetSimple CMS, а один из его разделов может состоять из статических страниц, формируемых с помощью генератора статических веб-сайтов, или формироваться динамически на основании данных, хранящихся в отдельной базе данных. Для посетителя веб-сайта разницы не будет, но она может быть для роботов поисковых систем, которые получают информацию о доступных к индексации страницах из файла карты веб-сайта sitemap.xml.
Для улучшения индексирования веб-сайта и упрощения работы администратора, система управления контентом GetSimple CMS автоматически создаёт и изменяет файл sitemap.xml при любых действиях пользователя со страницами. Однако это касается только тех страниц, которые управляются через GetSimple CMS, остальные страницы веб-сайта не будут добавлены в файл sitemap.xml, так как они не имеют отношения к системе управления контентом, и система не может учитывать их существование в структуре веб-сайта.
В этом случае, чтобы не проигрывать в эффективности индексирования веб-сайта, можно выбрать один из двух вариантов:
- Создать отдельные карты с адресами страниц для разделов веб-сайта, не управляемых системой управления контентом, и передать их роботам поисковых систем для индексирования;
- Передать информацию о страницах разделов веб-сайта, не управляемых системой управления контентом, системе управления контентом для включения этих страниц в единый файл sitemap.xml, создаваемый и автоматически управляемый ею.
Для тех, кто использует GetSimple CMS в рамках рассматриваемого сценария и выбирает вариант с единым файлом sitemap.xml, приведу вариант решения задачи.
Причём сама задача разделяется на две подзадачи:
- Получение списка адресов страниц разделов;
- Передача списка адресов страниц разделов системе управления контентом.
Как получить список адресов страниц раздела веб-сайта - подзадача, решаемая частным способом в зависимости от метода организации и инструментов, которыми управляются разделы веб-сайта. Здесь может быть и получение списка HTML файлов из файловой системы, и использование заранее подготовленных индексов, и обращение с запросом к системе управления базами данных. Поэтому практическую часть решения этой подзадачи в рамках рассматриваемой темы следует опустить.
После того, как получен список адресов страниц, задача сводится к ответу на следующий вопрос.
Как добавить собственные страницы в карту веб-сайта в GetSimple CMS?
Здесь под собственными страницами понимаются страницы, которые пользователь хочет добавить в карту веб-сайта, которые при этом не управляются системой управления контентом.
За создание и сохранение в файл sitemap.xml отвечает функция generate_sitemap()
. Внутри функции выполняется создание XML-документа карты сайта, который, после добавления в него всех страниц веб-сайта, управляемых системой управления контентом GetSimple CMS, передаётся фильтру sitemap
. Используя этот фильтр, в XML-документ можно добавить собственные страницы.
Для этого понадобится создать и добавить новый или расширить возможности уже имеющегося плагина. Далее приведён пример функции, которую можно использовать в плагине для GetSimple CMS. После объявления функции её имя следует использовать при вызове фильтра sitemap
.
/*
* Add Custom Pages to Sitemap
*
* Add custom pages to the given sitemap XML document
*
* @global string $SITEURL Website URL
* @param SimpleXMLElement $sitemap Sitemap XML document
* @return SimpleXMLElement Sitemap XML document with custom pages
*/
function addCustomPagesToSitemap($sitemap) {
global $SITEURL;
$pages = array(
'/static/' => array(
'changefreq' => 'daily',
'priority' => '1.0'
),
'/static/01/' => array(
'changefreq' => 'monthly',
'priority' => '0.5'
),
'/static/02/' => array(
'changefreq' => 'monthly',
'priority' => '0.5'
),
'/static/03/' => array(
'changefreq' => 'monthly',
'priority' => '0.5'
)
);
foreach ($pages as $url => $data) {
$url_item = $sitemap->addChild('url');
$url_item->addAttribute('custom', true);
$url_item->addChild('loc', rtrim($SITEURL, '/') . $url);
foreach ($data as $key => $value) {
$url_item->addChild($key, $value);
}
}
return $sitemap;
}
add_filter('sitemap', 'addCustomPagesToSitemap');
В результате вызова фильтром sitemap
функция addCustomPagesToSitemap()
добавит в XML-документ страницы, заданные в определённом внутри неё массиве $pages
. Как уже было сказано, формирование массива $pages
это частный случай и может быть выполнено любым способом. С целью идентификации всех включённых в карту сайта собственных страниц, каждому XML-элементу url
назначен атрибут custom
. Это сделано для наглядности, при практическом использовании маркировка и назначение атрибутов не требуется.
Для избежания возможных ошибок, следует обратить внимание на то, что передаваемый функции параметр $sitemap
является объектом класса SimpleXMLElement
, а не DOMDocument
, что тоже могло бы быть ожидаемо.
После того, как PHP-код написан, оформлен и подключён в виде плагина, адреса страниц веб-сайта, не управляемые GetSimple CMS, будут сохранены в файле sitemap.xml
и не будут потеряны для поисковых роботов. Это ещё один наглядный пример гибкости, доступной при выборе системы управления контентом GetSimple CMS для обеспечения работы своего веб-сайта.