Вообще я к Joomla немного остыл, потому как для работы теперь в основном использую OcoberCMS но ещё много проектов на Joomla приходится обслуживать, и сегодня я столкнулся со следующей проблемой: После очередного обновления перезаписался index.php в корне, где были спрятаны мои костыли для sitemap.xml и я решил решить эту проблему более элегантно.
Итак, что-же это за проблема такая? Как известно любому человеку связанному с SEO, всё течёт, всё меняется кроме sitemap.xml который обязан быть в корне сайта! Для тех кто не в курсе что это такое, это карта всех ссылок сайта, которые робот поисковика должен проиндексировать. Если у вас не будет такой карты, ждать индексации придётся очень долго, а Ваши дальнейшие изменения контента на сайте будут долго оставаться незамеченными (подробнее тут: https://ru.wikipedia.org/wiki/Sitemaps)
У Joomla почти нет проблем с генерированием sitemap.xml, ведь есть бесплатные плагины OSMap или XMap, которые прекрасно справляются с поставленной задачей. Я сказал почти, потому что одна проблемка есть и это URL. Карта сайта сгенерированная данными плагинами доступа, к примеру, по адресу:
1 |
https://вашсайт.ру/index.php?option=com_osmap&view=xml&id=1 |
Что с одной стороны не является проблемой, ведь данный адрес можно указать в robots.txt и вручную прописать его в яндекс/гугл вебмастерах НО все остальные поисковики, где вы явно не пропишите этот линк, так и продолжат искать sitemap.xml в корне сайта. По этому я предпочитаю делать всё, что-бы по адресу https://мойсайт.ру/sitemap.xml отдавалась валидная xml-карта сайта. Итак как это сделать для Joomla? Очень просто:
Напрямую через .htaccess
В файле .htaccess (после команды «RewriteEngine On», если её нет то добавить/раскоментировать) добавляем правило:
1 2 3 4 |
RewriteEngine On RewriteCond %{REQUEST_URI} ^/sitemap.xml RewriteRule .* /index.php?option=com_osmap&view=xml&id=1 |
Через .htaccess в php (для возможности контроля и кеширования)
В файле .htaccess (после команды «RewriteEngine On», если её нет то добавить/раскоментировать) добавляем простое правило:
1 2 3 |
RewriteEngine On RewriteRule ^sitemap\.xml$ /sitemap.php [L] |
Таким образом мы все запросы на sitemap.xml перенаправляем на sitemap.php
Добавляем в корень сайта файл sitemap.php содержащий код:
1 2 3 |
<?php header('Content-Type: text/xml'); echo file_get_contents('https://'.$_SERVER['HTTP_HOST'].'/index.php?option=com_osmap&view=xml&id=1'); |
Отлично, теперь по адресу https://мойсайт.ру/sitemap.xml отдаётся валидный xml файл карты сайта.
Зачем отдавать сайтмап через php-файл спросите вы?
Теперь в sitemap.php можно дописать массу дополнительного функционала, например закешировать карту сайта для высоконагруженных проектов с большим количеством контента (кстати можно даже архивировать карту в формат .gzip что-бы снизить отдаваемый трафик, это актуально для магазинов), что-бы не напрягать кеширование Joomla (потому как оно не очень то если чесн.). Так-же можно вести лог ip с которых запрашивалась карта сайта, иногда это нужно сео-шникам что-бы отслеживать когда и чей робот заходил сканировать карту и много ещё чего.