Как и многие Joomla-администраторы, я использовал компонент JLSitemap для генерации карты сайта. Это был удобный инструмент, который автоматически собирал URL страниц, включая статьи, категории и даже кастомные компоненты, такие как страницы апартаментов на моём сайте. Sitemap был критически важен для SEO, обеспечивая быструю индексацию сотен страниц поисковыми системами вроде Яндекса и Google.

Однако после очередного обновления Joomla компонент JLSitemap утратил работоспособность. Ошибки в маршрутизации и несовместимость с кастомными URL-структурами сделали его бесполезным. К тому же разработчики перевели JLSitemap на платную модель. Платить за компонент, который больше не отвечает моим нуждам, не хотелось, особенно когда у меня есть VPS-сервер и Python — мощный инструмент для автоматизации. Так родилась идея заменить JLSitemap кастомным Python-скриптом.

Что было сделано

Для сайта требовался sitemap, включающий:

Я разработал Python-скрипт, который полностью заменил JLSitemap, выполняя те же функции, но с большей гибкостью и без затрат. Вот ключевые шаги:

1. Подключение к базе Joomla

Скрипт использует библиотеку mysql-connector-python для подключения к базе данных Joomla. Конфигурация (хост, имя базы, пользователь, пароль, префикс таблиц) загружается из файла .env через python-dotenv, что обеспечивает безопасность и удобство настройки.

2. Извлечение данных

Скрипт запрашивает данные из базы Joomla:

  • Главная страница: Добавляется напрямую как https://xxx.ru с текущей датой.
  • Апартаменты (категория 9): Запрос к {prefix}content с catid = 9 и state = 1 извлекает alias и modified/created для URL вида https://xxx.ru/{alias}.
  • Статьи (категория 10): Запрос к {prefix}content с catid = 10 и state = 1 формирует URL https://xxx.ru/xxx/{alias}.
  • Пункты главного меню: Запрос к {prefix}menu с published = 1, menutype = mainmenu, и parent_id = 1 извлекает alias для URL https://xxx.ru/{menu_alias}.

3. Формирование sitemap

  • Используется xml.etree.ElementTree для создания XML-структуры sitemap по стандарту http://www.sitemaps.org/schemas/sitemap/0.9.
  • xml.dom.minidom обеспечивает красивое форматирование XML.
  • Множество url_set исключает дубликаты.
  • <lastmod>: modified или created для контента, текущая дата для главной страницы и меню без связанной статьи.
  • <priority>: 1.0 для главной страницы, 0.8 для апартаментов, 0.7 для статей и меню.
  • <changefreq>: daily для главной страницы и апартаментов, weekly для статей и меню.

4. Сохранение sitemap

Sitemap сохраняется в /var/www/www-root/data/www/xxx.ru/sitemap.xml для доступа поисковых систем. Директория создаётся автоматически.

5. Логирование

Модуль logging записывает отладочную информацию в sitemap.log и выводит ключевые этапы в консоль, упрощая диагностику.

Зачем это нужно

  1. Экономия средств:
    JLSitemap стал платным, а Python-скрипт — бесплатное решение, использующее только ресурсы VPS и стандартные библиотеки.
  2. Надёжность:
    В отличие от JLSitemap, который сломался после обновления Joomla, скрипт работает напрямую с базой, избегая проблем совместимости.
    Прямой доступ к данным гарантирует актуальность sitemap.
  3. Гибкость:
    Скрипт адаптирован под кастомные URL (например, без .html для статей и меню), чего JLSitemap не мог обеспечить.
    Легко расширяется для новых категорий или правил маршрутизации.
  4. SEO-оптимизация:
    Sitemap включает только нужные страницы (апартаменты, статьи, главное меню), исключая "мусор" вроде служебных страниц.
    Корректные <lastmod>, <priority> и <changefreq> улучшают индексацию.
  5. Автоматизация:
    Скрипт запускается по расписанию (например, через cron), обновляя sitemap без вмешательства.
    Экономит время по сравнению с ручной настройкой JLSitemap.

Что сделано

  • Заменён JLSitemap: Разработан Python-скрипт для генерации sitemap, устраняющий зависимость от платного компонента.
  • Поддержка кастомных URL: Реализованы URL без .html для апартаментов, статей и меню, соответствующие структуре xxx.ru.
  • Автоматизация: Скрипт извлекает данные из базы, формирует sitemap и сохраняет его в публичной директории.
  • Логирование: Добавлено для отслеживания ошибок и проверки добавленных URL.

Следующие шаги

  • Добавление категорий: Включение других категорий (например, useful-information) по мере необходимости.
  • Cron-автоматизация: Настройка ежедневного запуска для актуальности sitemap.
  • Расширенные SEO-теги: Добавление <image:image> для апартаментов с фотографиями.
  • Мониторинг: Интеграция с системами мониторинга для уведомлений об ошибках генерации.

Отказ от JLSitemap в пользу Python-скрипта — это не просто экономия, а шаг к большей независимости и гибкости в управлении Joomla-проектом. Питонизация позволила быстро решить проблему, адаптировав sitemap под специфические нужды сайта xxx.ru. Этот опыт показывает, что с Python и VPS можно заменить многие платные компоненты, сделав разработку эффективнее и дешевле. В будущем мы планируем расширять питонизацию, автоматизируя другие аспекты Joomla, чтобы полностью избавиться от ограничений сторонних расширений.