Куда идем?

Многие 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, советую применить этот кейс. Поисковые системы оценят.

Об авторе
Wedal
(Виталий). Веб-разработчик полного цикла (Full Stack). Создатель и автор сайта Wedal.ru.
Основной профиль – создание сайтов и расширений на CMS Joomla.
Добавить комментарий

Комментарии  
0
Использую html5 шаблоны, и если не ошибаюсь, то в соответствии со спецификацией допустимо использование сколько угодно тегов h1 если они обрамлены в тег article или section. По крайней мере я так понял спецификацию и просто все статьи в блоге у меня обрамлены в article и заголовки в теге h1. Правильно ли делаю?
5
ALEHAN, да, в html5 допустимо, но это по спецификации. Мы же говорим про seo-оптимизацию. Здесь можно поспорить и кто-то скажет, что заголовков h1 можно делать несколько, разбавляя ключевыми словами, но я считаю, что для белых сайтов гораздо правильнее использовать только один заголовок.
0
Сделала все как вы сказали,заголовок все равно остается H2....
Что делать?
1
Raina97, искать ошибку. Перепроверьте еще раз правильно ли вы переопределили макет. Добавьте в переопределенный макет несколько единиц и посмотрите, появятся ли они на сайте. Если нет, что-то перепутали с путями копирования макета.
0
Спасибо за отличную статью! Написано подробно и понятно. Все получилось!
0
Спасибо большое за дельные указания! всё починилось и работает на ура! Правда после всех изменений ничего не поменялось, а поменялось сразу же после того, как очистил кэш в панели управления! Теперь заголовки выводятся по фэншую!!!)))
0
Самое правильное и точное решение проблемы из всех что нашел в сети! Спасибо! Сохраняю в закладки.
0
Только что то я совсем запутался... При поставке условия

Оно срабатывает там где нужно - внутри категории исчезают заголовки категории и появляются заголовки материала в H1.
НО. Заголовки так же пропадают на всех других страницах т.к. попадают под условие && ($view !== 'article')
Как это решить? Спасибо.
0
Антон, а на всех других страницах вы хотите использовать в качестве H1 заголовки пунктов меню или материалов?
0
Хотел бы использовать заголовки пунктов меню. Обычно для каждой страницы руками прописываю заголовки и мета-теги. Подскажите пожалуйста. Буду очень благодарен.
0
Антон, как я понимаю, ситуация следующая:
Есть две статьи: на одну ссылается непосредственно пункт меню 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 заголовков, один из них можно отключить в настройках соответствующего пункта меню.
-1
Шикарно! То, что нужно! Благодарю!

Спасибо еще раз!
0
Все сделал как описано в инструкции, все получилось, но страница материала стала отображаться очень криво, с чем это связанно?
0
Алан, скорее всего вы забыли где-то поставить закрывающий тег или разбили открывающий и закрывающий тег условием PHP (например, открывающий внутри условия, а закрывающий снаружи).
0
Вот начальный код http://pastebin.com/igDi9y2t можете посмотреть, все правильно там или нет ? Ну я просто заменил h2 на h1, а заголовки пункта меню у меня и так отключены в joomla.
0
Алан, где у вас в коде закрывается самый верхний div, который с классом item-page ?
0

Цитирую Wedal:

Алан, где у вас в коде закрывается самый верхний div, который с классом item-page ?


Верхний div закрывается в самом низу страницы, его не видно в коде который я вам отослал т.к это не весь код страницы.
0

Цитирую Алан:


Цитирую Wedal:

Алан, где у вас в коде закрывается самый верхний div, который с классом item-page ?


Верхний div закрывается в самом низу страницы, его не видно в коде который я вам отослал т.к это не весь код страницы.


Ну так что же делать с данной проблемой?
0
Алан, искать, где некорректно установлен закрывающий тег.
0

Цитирую Wedal:

Алан, искать, где некорректно установлен закрывающий тег.


Закрывающие теги везде корректно установлены т.к кроме смены атрибута h1 на h2 в коде ничего не менялось.
0
Алан, а если убрать измененный макет из папки с шаблоном Joomla, проблема остается?
0
Каталогов /com_content/article/ - не было - создала и дальше все по инструкции!

Спасибо большое! Теперь все работает : )
0
Здравствуйте. Хотел спросить совета и помощи. Возможно ли создать 2 заголовка для одного алиаса? Например: солнечные очки купить /продажа солнечных очков. Необходимо для разных вариантов поиска. Буду очень благодарен за помощь. С наступающим Новым годом!
0
Дмитрий, уточните вопрос. Пока не очень понимаю, что вы хотите получить.
0
Как вы можете видеть на фото (прилагаю) сайт компании glishitel.kz в различных вариантах поиска имеет 2 заголовка на один алиас. Возможно ли произвести такую настройку в Джумла? Спасибо.

0
Дмитрий, фото не открывается, сайт не работает.
0
Решили вопрос. Многое из вышеуказанного помогло найти решение. В случае необходимости, обязательно обращусь снова. Спасибо.
0
Стоит отметить, что в некоторых случаях,решение кроется в \templates\ШАБЛОН\html\com_content\article\default_detail.php
0
svpromo, нет такого макета в стандартной Joomla. Это альтернативный макет, относящийся, скорее всего, только к вашему шаблону.
0
Добрый день. Прошу помочь. Уже несколько дней не могу исправить. У меня сайт на Джумла 2.5. Шаблон был сделан в Артистер. А вот теперь проблема. На весь сайт подтягивается один Н1 но не заголовка, а модуля icagenda. При том, что заголовок модуля скрытый и вообще нет никакого текста. Отключив модуль, подтягивает Н1 с другой модуля. Пробовал менять все Н2 на Н1 различными методами и в разных файлах. Результата никакого. Пробовал установить плагин head tag. Так после его включения вообще сайт накрылся. Пришлось вычищать потом остатки этой программы.
0
Валерий, у меня только один вариант - кривой шаблон. Видимо прямо в коде в H1 подставляется заголовок первого опубликованного модуля. Нужно править шаблон. По-другому никак.
1
Ничего не получалось, чего только ни делал, ничего не получалось. А потом увидел, что я не в том шаблоне переопределение создал )) Ну прикол ) В общем все получилось, огромное спасибо!
1
Спасибо большое. Все получилось! Люблю такие простые и наглядные мануалы.
0
Спасибо, очень помогло!!
0
Супер! Спасибо!
0
Приветствую. Можете помочь? К сожалению в последней версии Жумла 3.9.14 последнего кода h2 в таком виде как вы написали нету. Есть вот такой код h2
И все. Не получится изменить по вашей инструкции? Есть еще коды H1. может они подойдут для изменения? Спасибо
1
Очень благодарен! После обновления до версии Joomla! 3.9.18 Stable [ Amani ] применил метод, описанный в данной статье. Всё прекрасно получилось!
0
Добрый день. А как поменять заголовки статей в К2?