PHP

Формирование файла sitemap.xml

Полное описание протокола - http://www.sitemaps.org/ru/protocol.html

Требования к файлу

  • Файл может содержать до 50 000 URL.
  • Размер не более 10 Мб.
  • Кодировка файла должна быть в UTF-8.
  • Кириллические домены записываются в виде http://xn--80aswg.xn--p1ai/
  • Символы в URL (& ' " < >) должны быть заменены на мнемоники (&amp; &apos; &quot; &gt; &lt;).

PHP код

Предполагается что в таблице стаей есть даты публикации и последнего изменения
(`date_add` и `date_edit`).

<?php
$dom = new DOMDocument('1.0', 'utf-8');
$urlset = $dom->createElement('urlset');
$urlset->setAttribute('xmlns','http://www.sitemaps.org/schemas/sitemap/0.9');

// Получение статей из БД.
$articles = DB::getAll("SELECT * FROM `articles`");

foreach($articles as $row) {
    // Дата изменения статьи.
    $date = max(array($row['date_add'], $row['date_edit']));

    $url = $dom->createElement('url');

    // Элемент <loc> - URL статьи.
    $loc = $dom->createElement('loc');
    $text = $dom->createTextNode(
        htmlentities('http://site.com/articles/' . $row['id'] . '.html', ENT_QUOTES)
    );
    $loc->appendChild($text);
    $url->appendChild($loc);

    // Элемент <lastmod> - дата последнего изменения статьи.
    $lastmod = $dom->createElement('lastmod');
    $text = $dom->createTextNode(date('Y-m-d', $date));
    $lastmod->appendChild($text);
    $url->appendChild($lastmod);

    // Элемент <priority> - приоритетность (от 0 до 1.0, по умолчанию 0.5).
    // Если дата публикации/изменения статьи была меньше недели назад ставим приоритет 1.
    $priority = $dom->createElement('priority');
    $text = $dom->createTextNode((($date + 604800) > time()) ? '1' : '0.5');
    $priority->appendChild($text);
    $url->appendChild($priority);

    $urlset->appendChild($url);
}

$dom->appendChild($urlset);

// Сохранение в файл.
$dom->save(__DIR__ . '/sitemap.xml');

// Или отправка в браузер.
header('Content-Type: text/xml');
header('Expires: Thu, 19 Feb 1998 13:24:18 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-cache, must-revalidate');
header('Cache-Control: post-check=0,pre-check=0');
header('Cache-Control: max-age=0');
header('Pragma: no-cache');

echo $dom->saveXML();
exit();

Пример файла

<?xml version="1.0" encoding="utf-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    <url>
        <loc>http://site.com/articles/16.html</loc>
        <lastmod>2016-11-19</lastmod>
        <priority>1</priority>
    </url>
    <url>
        <loc>http://site.com/articles/3.html</loc>
        <lastmod>2016-11-08</lastmod>
        <priority>0.5</priority>
    </url>
</urlset>

Заменить расширение файла .php на .xml

Например данный скрипт лежит в корне сайта с именем sitemap.php, вы хотите чтобы он открывался по адресу http://site.com/sitemap.xml

В файле .htaccess нужно добавить запись после RewriteEngine On (если ее нет, добавить).

RewriteRule ^sitimap.xml$ sitimap.php [L,QSA]

Директива Sitemap в robots.txt

Чтобы поисковые системы знали где расположен файл карты сайта нужно добавить директиву в robots.txt:

User-agent: *
Sitemap: http://site.com/ИМЯ_ФАЙЛА
19 ноября 2016
В последнее время письма отправляемые с хостингов через функции mail() и mb_send_mail() часто попадают или совсем не...
cURL PHP – это библиотека предназначенная для получения и передачи данных через такие протоколы, как HTTP, FTP, HTTPS....
В статье приведены основные примеры работы с расширением PHP PDO. Такие как подключение к БД, получение, изменение и...
Библиотека GD дает возможность работать с изображениями в PHP. Далее представлены примеры как изменить размер, вырезать...