Создал сайт на CMS Joomla, запустил его и увидел что в URL при просмотре категорий проставляется ID документа и статьи, что не соответствует ссылке на документ при переходе через меню. Для поисковых систем это критично, на сайте будут куча дублей, что очень плохо скажется на SEO продвижение. Самый оптимальный способ убрать ID и ссылок при просмотре через категорий.
Есть несколько вариантов ухода от появления ID элемента в URL. Опишу один из них без установки плагинов.
Необходимо будет поправить файл components\com_content\router.php. В функции ContentBuildRoute(&$query) на 27 строчке необходимо поменять параметр с 0 на 1.
$advanced = $params->get('sef_advanced_link', 0);
на
$advanced = $params->get('sef_advanced_link', 1);
И в функции ContentParseRoute($segments) на строчке 208 также меняем переменную с 0 на 1.
$advanced= $params->get('sef_advanced_link', 0);
на
$advanced= $params->get('sef_advanced_link', 1);
Все, теперь у нас ссылка на Материал или Категорию без номера ID. Если у вас в меню есть ссылка на документ то он будет прекрасно открываться. Если нет, то продолжим. Далее необходимо за комментировать 228-232 строчки что бы не получать ошибку 404 при открытии наших страници материалов или категории не привязанные к пункту меню.
if (strpos($segments[0], ':') === false) {
$vars['view'] = 'article';
$vars['id'] = (int)$segments[0];
return $vars;
}
на
/*
if (strpos($segments[0], ':') === false) {
$vars['view'] = 'article';
$vars['id'] = (int)$segments[0];
return $vars;
}
*/
На этом можно и закончить, но можно и привести в должный вид путем добавления переключателя в настройки отображения Материалов. Для этого необходимо добавить XML код(указан ниже) в сектор 'fieldset' в файл administrator\components\com_content\config.xml
<field name="sef_advanced_link"
type="radio"
default="0"
label="Отображение ID в ссылке"
description="Убрать ItemID в содержание URL?">
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
Можно и не менять в файлах переменные и воспользоваться добавлением только XML кодом, но во избежания ошибки 404 необходимо тогда создавать каждый пункт меню либо расширить условие в файле router.php. Необходимо будет найти тогда за комментированную строчку:
// then we assume it is a category. If they don't we assume it is an article
и дополнить условие:
if ($count == 1) {
на
if ($count == 1 && !$advanced) {
Все, на этом я думаю проблема решена до следующего обновления, но может разработчики дополнят и будет все круто.