Sitemap — это файл со ссылками на страницы сайта, который сообщает поисковым системам об актуальной структуре сайта.
Основные поддерживаемые форматы поисковыми системами
Яндекс поддерживает форматыВ Google поддерживается несколько форматов файлов Sitemap.
- XML
- TXT
- XML
- RSS, mRSS и Atom 1.0
- Текстовый
Формат протокола Sitemap состоит из XML-тегов. Для всех значений данных в файле Sitemap должно использоваться маскирование . В файле необходимо использовать кодировку UTF-8.
Sitemap должен:
- В начале поставьте открывающий тег
< urlset >
, а в конце поставьте закрывающий тег</urlset>
.- Укажите область имен (стандарт протокола) в теге
<urlset>
.- Включите запись
< url >
для каждого URL-адреса как родительский тег XML.- Включите дочернюю запись
< loc >
для каждого родительского тега<url>
.
Все теги необязательны. Поддержка необязательных тегов может отличаться в зависимости от поискового сервера. Чтобы получить более подробную информацию, обратитесь к документации поискового сервера.
Также все URL-адреса в файле Sitemap должны быть с одного узла, например
www.example.com
илиstore.example.com
.
Ниже приведен пример файла Sitemap, в котором содержится только один URL-адрес и использованы все необязательные теги. Необязательные теги выделены курсивом.
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://www.example.com/</loc>
<lastmod>2005-01-01</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
</urlset>
Атрибут | Обязательно | Описание |
---|---|---|
<urlset>
|
обязательный |
Инкапсулирует этот файл и указывает стандарт текущего протокола. |
<url>
|
обязательный |
Родительский тег для каждой записи URL-адреса. Остальные теги являются дочерними для этого тега. |
<loc>
|
обязательный |
URL-адрес страницы. Этот URL-адрес должен начинаться с префикса (например, HTTP) и заканчиваться косой чертой, если Ваш веб-сервер требует этого. Длина этого значения не должна превышать 2048 символов. |
<lastmod>
|
необязательно |
Дата последнего изменения файла. Эта дата должна быть в формате W3C Datetime . Этот формат позволяет при необходимости опустить сегмент времени и использовать формат ГГГГ-ММ-ДД. Обратите внимание, что этот тег не имеет отношения к заголовку "If-Modified-Since (304)", который может вернуть сервер, поэтому поисковые системы могут по-разному использовать информацию из этих двух источников. |
<changefreq>
|
необязательно |
Вероятная частота изменения этой страницы. Это значение предоставляет общую информацию для поисковых систем и может не соответствовать точно частоте сканирования этой страницы. Допустимые значения:
Значение"всегда" должно использоваться для описания документов, которые изменяются при каждом доступе к этим документам. Значение "никогда" должно использоваться для описания архивных URL-адресов. Имейте в виду, что значение для этого тега рассматривается как подсказка , а не как команда. Несмотря на то, что сканеры поисковой системы учитывают эту информацию при принятии решений, они могут сканировать страницы с пометкой "ежечасно" менее часто, чем указано, а страницы с пометкой "ежегодно" – более часто, чем указано. Сканеры могут периодически сканировать страницы с пометкой "никогда", чтобы отслеживать неожиданные изменения на этих страницах. |
<priority>
|
необязательно |
Приоритетность URL относительно других URL на Вашем сайте. Допустимый диапазон значений — от 0,0 до 1,0. Это значение не влияет на процедуру сравнения Ваших страниц со страницами на других сайтах — оно только позволяет указать поисковым системам, какие страницы, по Вашему мнению, более важны для сканеров. Приоритет страницы по умолчанию — 0,5. Следует учитывать, что приоритет, который Вы назначили странице, не влияет на положение Ваших URL на страницах результатов той или иной поисковой системы. Поисковые системы используют эту информацию при обработке URL, которые относятся к одному и тому же сайту, поэтому можно использовать этот тег для увеличения вероятности присутствия в поисковом индексе Ваших самых важных страниц. Кроме того, следует учитывать, что назначение высокого приоритета всем URL на Вашем сайте не имеет смысла. Поскольку приоритетность – величина относительная, этот параметр используется для того, чтобы определить очередность обработки URL в пределах сайта. |
Символ | Маскирование | |
---|---|---|
Амперсанд | & |
&
|
Одинарные кавычки | ' |
'
|
Двойные кавычки | " |
"
|
Больше | > |
>
|
Меньше | < |
<
|
Рассмотрит простую таблицу с постами в которой есть параметры дня нашего Sitemap.
Теперь на основании данной таблицы построим sitemap.xml
Для генерации sitemap.xml с помощью php убедитесь, что у вас включено расширение xmlwriter
XMLWriter является модулем PHP. Он создаёт xmlWriter API на основе библиотеки libxml.
Модуль представляет собой класс-писатель, который является некэшируемым, однонаправленным средством генерирования потоков или файлов, содержащих данные XML.
Модуль может быть использован в объектно-ориентированном либо в процедурном стилях. Каждый документированный метод описывает альтернативные процедурные вызовы.
<?php
//Отправляем заголовок с указанием что у нас XML документ
header('Content-Type: application/xml; charset=utf-8');
//Константа нашего хоста сайта
define('HOST', 'https://'. $_SERVER['HTTP_HOST'] .'/');
//Подключаемся к базе данных
$dbh = new PDO('mysql:dbname=test;host=localhost', 'root', 'root');
// Получение статей из базы данных.
$sql = 'SELECT *, DATE_FORMAT(`createt_at`, "%Y-%m-%d") AS `date` FROM `posts`';
$sth = $dbh->prepare($sql);
$sth->execute();
$posts = $sth->fetchAll(PDO::FETCH_OBJ);
//Включаем буферизацию вывода
ob_start();
/**
* Создаем объект XMLWriter()
* Убедитесь что у вас включено соответствующее расширение для PHP
* */
$writer = new \XMLWriter();
$writer->openURI('php://output');
$writer->startDocument('1.0', 'UTF-8');
$writer->startElement('urlset');
$writer->writeAttribute('xmlns', 'http://www.sitemaps.org/schemas/sitemap/0.9');
foreach($posts as $items){
$writer->startElement('url');
$writer->writeElement('loc',htmlspecialchars(HOST . $items->alias));
$writer->writeElement('lastmod', $items->date);
$writer->writeElement('changefreq', $items->changefreq);
$writer->writeElement('priority', $items->priority);
$writer->endElement();
}
$writer->endElement();
$writer->endDocument();
//Очищаем буфер, отдаем содержимое
echo ob_get_clean();
?>
Внимание:
Если данный скрипт лежит у вас в корне сайта с именем sitemap.php, вы хотите чтобы он открывался по адресу https://example.com/sitemap.xml. В файле .htaccess нужно добавить запись:
RewriteEngine On
RewriteRule ^sitemap.xml$ sitemap.php [L,QSA]
Чтобы поисковые системы знали где расположен файл карты сайта нужно добавить директиву Sitemap в robots.txt:
User-agent: *
Sitemap: https://example.com/sitemap.xml
08/12/2022 16:17:04