Создать URL
Генератор Правила транслитерации Как сделать ЧПУ Блог Вопросы и ответы Создать URL
Практика

Автоматическая генерация карты сайта по расписанию

Настроим регулярное построение карты и разберём, как убедиться, что результат корректен.

Зачем автоматизировать

Страницы появляются и исчезают каждый день. Если карта строится раз в месяц вручную, в ней остаются удалённые адреса и не хватает новых. Автоматическая генерация берёт актуальный список из базы или системы управления и обновляет файл по расписанию. Общие принципы карты описаны в статье про sitemap.xml, а сборка внутри приложения — в статье про генерацию из кода.

ИсточникактуальныхстраницФильтрациятолько 200и индексируемыеЗаписьфайлакартыПроверкаи уведомление
ИсточникактуальныхстраницФильтрациятолько 200и индексируемыеЗаписьфайлакартыПроверкаи уведомление
Конвейер генерации карты

Правила содержимого

Что должно быть в карте
ПравилоПочему
Только адреса с ответом 200Ошибки и перенаправления в карте — признак небрежности
Только индексируемые страницыЗакрытые от индексации адреса противоречат карте
Только канонические адресаДубли и варианты с параметрами не нужны
Реальная дата измененияИскусственная «свежесть» лишает значения этого поля
Не более 50 000 адресов в файлеОграничение формата: для большего объёма — несколько файлов и индексный файл
Разбивка по разделамУдобно смотреть статистику по каждому файлу

Пример генерации

from xml.sax.saxutils import escape

def build_sitemap(items):
    lines = ['<?xml version="1.0" encoding="UTF-8"?>',
             '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">']
    for url, lastmod in items:
        lines.append("  <url><loc>%s</loc><lastmod>%s</lastmod></url>"
                     % (escape(url), lastmod))
    lines.append("</urlset>")
    return "\n".join(lines)

Функция принимает список пар «адрес — дата изменения» и возвращает готовый файл; специальные символы в адресах экранируются. Список пар вы получаете из базы данных, отфильтровав страницы по правилам выше.

Расписание

30 3 * * * python3 /opt/seo/build_sitemap.py
  • Для сайтов с частыми изменениями — раз в сутки или чаще, для стабильных — раз в неделю.
  • Запись файла делайте атомарно: сначала во временный файл, затем переименование, чтобы робот не получил недописанный файл.
  • Для крупных проектов формируйте индексный файл: индексный файл для крупных проектов.

Проверка результата

  1. Сравните число адресов с прошлой генерацией: резкий скачок вверх или вниз — повод остановиться.
  2. Проверьте выборку адресов: ответ 200, самоканонические, индексируемые: скрипт проверки кодов ответа.
  3. Убедитесь, что файл доступен по адресу и указан в robots.txt.
  4. Проверьте в панелях вебмастеров, что новый файл прочитан без ошибок.

Уведомление поисковых систем. Достаточно указать карту в robots.txt и в панелях вебмастеров; отдельная отправка при каждом обновлении обычно не требуется. Возможности уточняйте в справках сервисов. Про наблюдение за индексацией — в статье индексация во времени, а про другие способы построения — в статье автоматическая генерация карты сайта.

Частые вопросы

Как часто обновлять карту сайта?

Для активно меняющихся сайтов — раз в сутки или чаще, для стабильных — раз в неделю; главное, чтобы файл отражал реальное состояние.

Какие страницы нужно включать в карту?

Только канонические индексируемые адреса с ответом 200; ошибки, перенаправления и закрытые страницы включать не следует.

Что делать, если адресов больше 50 000?

Разбить карту на несколько файлов и объединить их индексным файлом.

Готовый адрес можно собрать прямо сейчас: откройте генератор ЧПУ — он транслитерирует фразу по таблице Яндекса, уберёт служебные слова и покажет длину адреса.

Читайте также