
Многие web-мастера, работающие с Joomla и знакомые с SEO, замечали одну неприятную особенность. По умолчанию Joomla обрамляет заголовки материалов тегом H2, что, с точки зрения продвижения, является грубой ошибкой. В этом кейсе я опишу, почему так происходит и как сделать выделение заголовков тегом H1.
Почему Joomla выделяет заголовки материалов тегом H2.
Это не ошибка разработчиков, как может показаться сначала. Но это их странная логика. Разработчики Joomla отдали тег H1 для выделения заголовка пункта меню, к которому привязан материал или категория, содержащая материал. При этом если материал не привязан ни к одной категории, то его собственный заголовок все равно остается в теге H2.
Давайте разберем эту ситуацию на примере.
Например, вы создали категорию «Joomla». В этой категории у вас находятся статьи с заголовками «Статья 1» и «Статья 2». Затем вы создали пункт меню типа «блог категории» для отображения материалов категории в виде блога на сайте. В настройках пункта меню вы указали заголовок с целью показать его на странице блога категории:
Что в результате происходит? На странице блога категории показан заголовок пункта меню в теге H1 и заголовки материалов, которые идут списком, в теге H2. Это правильно.
Но если вы перейдете на страницу материала «Статья 1», то увидите заголовок пункта меню «Joomla» в теге H1 и заголовок материала «Статья 1» ниже, в теге H2.
Таким образом, получается, что все материалы категории «Joomla» будут иметь заголовок H1 в виде текста «Joomla». На мой взгляд, это грубейшая ошибка во внутренней оптимизации сайта.
Дополнительным неприятным сюрпризом может стать то, что заголовок пункта меню «Joomla» нельзя оставить отображаться только на странице блога категории. Его отображение регулируется единственной настройкой, которая включает или отключает этот заголовок и на странице блога категории и на страницах материалов категории.
Без изменений в коде эти проблемы можно решить только одним способом – создать для каждого материала категории отдельный пункт меню. В случае сайтов-визиток это может быть оправданно, но если у вас десятки или сотни материалов, этот способ не подойдет.
Делаем заголовки материалов Joomla в теге H1.
К счастью, эта ошибка исправляется легко, быстро и без использования хаков. Порядок действий:
1. Переопределение макета материала Joomla в используемом шаблоне.
Нам нужно внести изменение в макет материала Joomla. Чтобы это изменение не было затерто при обновлениях Joomla, необходимо переопределить макет материала в используемый вами шаблон.
Находим файл:
components/com_content/views/article/tmpl/default.php
и копируем его в:
templates/ВАШ_ШАБЛОН/html/com_content/article/
Если каких-то из указанных каталогов в вашем шаблоне нет, то создаем их вручную.
2. Внесение изменений в код макета материала.
После того, как макет материала скопирован в шаблон, вносим в него изменения.
Открываем файл:
templates/ВАШ_ШАБЛОН/html/com_content/article/default.php
через notepad++ или другой редактор, подсвечивающий код.
В начале файла находим строчку:
$user = JFactory::getUser();
и вставляем после нее:
$input = JFactory::getApplication()->input; $view = $input->get('view');
Далее, чуть ниже, находим условие:
<?php if ($this->params->get('show_page_heading')) : ?>
и изменяем его на:
<?php if ($this->params->get('show_page_heading') && ($view !== 'article')) : ?>
И, наконец, находим теги H2:
<h2 itemprop="name"> <?php if ($params->get('show_title')) : ?> <?php echo $this->escape($this->item->title); ?> <?php endif; ?> </h2>
и изменяем их на H1:
<h1 itemprop="name"> <?php if ($params->get('show_title')) : ?> <?php echo $this->escape($this->item->title); ?> <?php endif; ?> </h1>
Что мы сделали? Мы добавили проверку в коде, которая отключает заголовок пункта меню на страницах материалов Joomla, и изменили обрамление заголовка материала с H2 на H1.
Если у вас на сайте заголовки материалов на страницах материалов все еще обрамлены тегом H2, советую применить этот кейс. Поисковые системы оценят.
Комментарии
Что делать?
Оно срабатывает там где нужно - внутри категории исчезают заголовки категории и появляются заголовки материала в H1.
НО. Заголовки так же пропадают на всех других страницах т.к. попадают под условие && ($view !== 'article')
Как это решить? Спасибо.
Есть две статьи: на одну ссылается непосредственно пункт меню Joomla, а другая находится в категории, для которой создан пункт меню типа "Блог категории".
В первом случае у статьи будет URL вроде:
index.php?option=com_content&view=article&id=1&Itemid=107
Во втором случае:
index.php?option=com_content&view=article&id=15:master-klass-po-fotografii&catid=8&Itemid=108
Эти URL, фактически, различаются только тем, что в случае блога у нас появляется дополнительный параметр catid.
Таким образом:
1) Заменяете:
Код:
$view = $input->get('view');
на:
Код:
$catid= $input->get('catid');
2) Заменяете:
Код:
<?php if ($this->params->get('show_page_heading') && ($view !== 'article')) : ?>
на:
Код:
<?php if ($this->params->get('show_page_heading') && (!$catid)) : ?>
В результате, если мы находимся в материале блога категории, то заголовок пункта меню показан не будет. Если мы находимся на странице материала, напрямую связанного с пунктом меню, то будет показан заголовок пункта меню, и заголовок материала в H1. Чтобы в H1 не было 2 заголовков, один из них можно отключить в настройках соответствующего пункта меню.
Спасибо еще раз!
Верхний div закрывается в самом низу страницы, его не видно в коде который я вам отослал т.к это не весь код страницы.
Ну так что же делать с данной проблемой?
Закрывающие теги везде корректно установлены т.к кроме смены атрибута h1 на h2 в коде ничего не менялось.
Спасибо большое! Теперь все работает : )
И все. Не получится изменить по вашей инструкции? Есть еще коды H1. может они подойдут для изменения? Спасибо