Зачем автоматизировать
Страницы появляются и исчезают каждый день. Если карта строится раз в месяц вручную, в ней остаются удалённые адреса и не хватает новых. Автоматическая генерация берёт актуальный список из базы или системы управления и обновляет файл по расписанию. Общие принципы карты описаны в статье про sitemap.xml, а сборка внутри приложения — в статье про генерацию из кода.
Правила содержимого
| Правило | Почему |
|---|---|
| Только адреса с ответом 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
- Для сайтов с частыми изменениями — раз в сутки или чаще, для стабильных — раз в неделю.
- Запись файла делайте атомарно: сначала во временный файл, затем переименование, чтобы робот не получил недописанный файл.
- Для крупных проектов формируйте индексный файл: индексный файл для крупных проектов.
Проверка результата
- Сравните число адресов с прошлой генерацией: резкий скачок вверх или вниз — повод остановиться.
- Проверьте выборку адресов: ответ 200, самоканонические, индексируемые: скрипт проверки кодов ответа.
- Убедитесь, что файл доступен по адресу и указан в robots.txt.
- Проверьте в панелях вебмастеров, что новый файл прочитан без ошибок.
Уведомление поисковых систем. Достаточно указать карту в robots.txt и в панелях вебмастеров; отдельная отправка при каждом обновлении обычно не требуется. Возможности уточняйте в справках сервисов. Про наблюдение за индексацией — в статье индексация во времени, а про другие способы построения — в статье автоматическая генерация карты сайта.
Частые вопросы
Как часто обновлять карту сайта?
Для активно меняющихся сайтов — раз в сутки или чаще, для стабильных — раз в неделю; главное, чтобы файл отражал реальное состояние.
Какие страницы нужно включать в карту?
Только канонические индексируемые адреса с ответом 200; ошибки, перенаправления и закрытые страницы включать не следует.
Что делать, если адресов больше 50 000?
Разбить карту на несколько файлов и объединить их индексным файлом.
Готовый адрес можно собрать прямо сейчас: откройте генератор ЧПУ — он транслитерирует фразу по таблице Яндекса, уберёт служебные слова и покажет длину адреса.