Здравствуйте.
В данной теме я решил поделиться своими наработками по Joomla 1.5. Может кому-то пригодятся.
Недавно в процессе поискового продвижения сайта на Joomla 1.5 столкнулся с одной весьма серьезной проблемой встроенного механизма ЧПУ (SEF).
Суть проблемы заключается в том, что в Joomla одна и та же страница
site.ru/news/tech/1-news.html, например, может быть доступна по очень многим адресам:
site.ru/index.php?option=com_content&view=article&id=22
site.ru/news/tech/1.html/
site.ru/news/2-tech/1-news.html
site.ru/1-news/2-tech/1dsfsdkgjdfgklhfdgjf
site.ru/home/1.html
site.ru/component/content/frontpage....
Проблема весьма серьезная. Аналогично и с категориями, с site.ru/, site.ru/index.php, с разделами и так далее.
Проблема, как видите, серьезная.
Особого желания играться с редиректами в htaccess у меня не было, robots.txt тоже не вариант. Ну закрою я в robots.txt
site.ru/index.php, ну а что делать с вариантами вроде
site.ru/news/2-tech/1-news.htgjfhgsldfjkgd ?
Как частичное решение ситуации можно было бы рассмотреть sh404SEF, но опять же. Это стороннее решение, оно все же снижает производительность и стабильность работы системы в целом, ИМХО.
Вот и стал я искать выход. Решение оказалось очень простым: нужно при генерации страницы раздела, категории, статьи, главной страницы сравнивать адрес в запросе с вычисленным адресом страницы в системе. Вычисляется он на основе расположения страницы в меню, на основании псеводонимов (alias), идентификаторов, а также на основании раздела/категории. Для одной страницы существует лишь один так называемый системный адрес. Он используется по-умолчанию при генерации ссылок в системе.
Если адрес в запросе не совпадает с системным адресом страницы, то движок с помощью 301 редиректа перебросит пользователя или поискового бота на нужную страницу. Таким вот образом дубли страниц оперативно склеиваются поисковиками по 301 редиректу.
Для лучшей совместимости эту проверку я вынес в код шаблона. Да, это прямое нарушение концепции MVC, но это все же лучше чем правка системных файлов ручками при каждом обновлении. Если кому-то решение не понравится - можете аналогичным образом поправить контроллер
com_content.
Данный модуль был протестирован на Joomla 1.5.22 со стандартным ЧПУ и
com_content. Данный модуль должен заработать и на 1.6.
Ссылки на код модуля с подробным описанием и установкой: скачать / скачать.
Большая человеческая просьба не перезаливать архивы на другие файлообменники и не публиковать код с описанием на других страницах без моего разрешения. Просто кидаете ссылки на архивы. Отнеситесь к этому с пониманием.