В этом кейсе я опишу как сделать выделение заголовков материалов Joomla тегом H1.
Как сделать заголовки материалов Joomla в теге H1 (Кейс #6).

Многие 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 # ALEHAN 06.08.2015 17:57
Использую html5 шаблоны, и если не ошибаюсь, то в соответствии со спецификацией допустимо использование сколько угодно тегов h1 если они обрамлены в тег article или section. По крайней мере я так понял спецификацию и просто все статьи в блоге у меня обрамлены в article и заголовки в теге h1. Правильно ли делаю?
Ответить | Ответить с цитатой | Цитировать
+4 # Wedal 07.08.2015 03:55
ALEHAN, да, в html5 допустимо, но это по спецификации. Мы же говорим про seo-оптимизацию. Здесь можно поспорить и кто-то скажет, что заголовков h1 можно делать несколько, разбавляя ключевыми словами, но я считаю, что для белых сайтов гораздо правильнее использовать только один заголовок.
Ответить | Ответить с цитатой | Цитировать
0 # Raina97 06.03.2016 12:29
Сделала все как вы сказали,заголовок все равно остается H2....
Что делать?
Ответить | Ответить с цитатой | Цитировать
+1 # Wedal 09.03.2016 08:29
Raina97, искать ошибку. Перепроверьте еще раз правильно ли вы переопределили макет. Добавьте в переопределенный макет несколько единиц и посмотрите, появятся ли они на сайте. Если нет, что-то перепутали с путями копирования макета.
Ответить | Ответить с цитатой | Цитировать
0 # Денис 24.06.2016 14:42
Спасибо за отличную статью! Написано подробно и понятно. Все получилось!
Ответить | Ответить с цитатой | Цитировать
0 # Дмитрий 11.08.2016 17:20
Спасибо большое за дельные указания! всё починилось и работает на ура! Правда после всех изменений ничего не поменялось, а поменялось сразу же после того, как очистил кэш в панели управления! Теперь заголовки выводятся по фэншую!!!)))
Ответить | Ответить с цитатой | Цитировать
0 # Антон 10.10.2016 18:31
Самое правильное и точное решение проблемы из всех что нашел в сети! Спасибо! Сохраняю в закладки.
Ответить | Ответить с цитатой | Цитировать
0 # Антон 10.10.2016 18:50
Только что то я совсем запутался... При поставке условия

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

Спасибо еще раз!
Ответить | Ответить с цитатой | Цитировать
0 # Алан 14.12.2016 21:10
Все сделал как описано в инструкции, все получилось, но страница материала стала отображаться очень криво, с чем это связанно?
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 15.12.2016 05:27
Алан, скорее всего вы забыли где-то поставить закрывающий тег или разбили открывающий и закрывающий тег условием PHP (например, открывающий внутри условия, а закрывающий снаружи).
Ответить | Ответить с цитатой | Цитировать
0 # Алан 15.12.2016 08:04
Вот начальный код http://pastebin.com/igDi9y2t можете посмотреть, все правильно там или нет ? Ну я просто заменил h2 на h1, а заголовки пункта меню у меня и так отключены в joomla.
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 16.12.2016 05:18
Алан, где у вас в коде закрывается самый верхний div, который с классом item-page ?
Ответить | Ответить с цитатой | Цитировать
0 # Алан 16.12.2016 06:33
Цитирую Wedal:
Алан, где у вас в коде закрывается самый верхний div, который с классом item-page ?

Верхний div закрывается в самом низу страницы, его не видно в коде который я вам отослал т.к это не весь код страницы.
Ответить | Ответить с цитатой | Цитировать
0 # Алан 17.12.2016 07:29
Цитирую Алан:
Цитирую Wedal:
Алан, где у вас в коде закрывается самый верхний div, который с классом item-page ?

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

Ну так что же делать с данной проблемой?
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 19.12.2016 04:59
Алан, искать, где некорректно установлен закрывающий тег.
Ответить | Ответить с цитатой | Цитировать
0 # Алан 19.12.2016 20:35
Цитирую Wedal:
Алан, искать, где некорректно установлен закрывающий тег.

Закрывающие теги везде корректно установлены т.к кроме смены атрибута h1 на h2 в коде ничего не менялось.
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 20.12.2016 08:11
Алан, а если убрать измененный макет из папки с шаблоном Joomla, проблема остается?
Ответить | Ответить с цитатой | Цитировать
0 # Анастасия 22.12.2016 10:19
Каталогов /com_content/article/ - не было - создала и дальше все по инструкции!

Спасибо большое! Теперь все работает : )
Ответить | Ответить с цитатой | Цитировать
0 # Дмитрий 30.12.2016 22:14
Здравствуйте. Хотел спросить совета и помощи. Возможно ли создать 2 заголовка для одного алиаса? Например: солнечные очки купить /продажа солнечных очков. Необходимо для разных вариантов поиска. Буду очень благодарен за помощь. С наступающим Новым годом!
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 09.01.2017 05:26
Дмитрий, уточните вопрос. Пока не очень понимаю, что вы хотите получить.
Ответить | Ответить с цитатой | Цитировать
0 # Дмитрий 10.01.2017 12:05
Как вы можете видеть на фото (прилагаю) сайт компании glishitel.kz в различных вариантах поиска имеет 2 заголовка на один алиас. Возможно ли произвести такую настройку в Джумла? Спасибо.

Ответить | Ответить с цитатой | Цитировать
0 # Wedal 11.01.2017 06:40
Дмитрий, фото не открывается, сайт не работает.
Ответить | Ответить с цитатой | Цитировать
0 # Дмитрий 15.01.2017 06:19
Решили вопрос. Многое из вышеуказанного помогло найти решение. В случае необходимости, обязательно обращусь снова. Спасибо.
Ответить | Ответить с цитатой | Цитировать
0 # svpromo.ru 13.02.2018 11:02
Стоит отметить, что в некоторых случаях,решение кроется в \templates\ШАБЛОН\html\com_content\article\default_detail.php
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 15.02.2018 03:48
svpromo, нет такого макета в стандартной Joomla. Это альтернативный макет, относящийся, скорее всего, только к вашему шаблону.
Ответить | Ответить с цитатой | Цитировать
0 # Валерий 19.04.2018 12:52
Добрый день. Прошу помочь. Уже несколько дней не могу исправить. У меня сайт на Джумла 2.5. Шаблон был сделан в Артистер. А вот теперь проблема. На весь сайт подтягивается один Н1 но не заголовка, а модуля icagenda. При том, что заголовок модуля скрытый и вообще нет никакого текста. Отключив модуль, подтягивает Н1 с другой модуля. Пробовал менять все Н2 на Н1 различными методами и в разных файлах. Результата никакого. Пробовал установить плагин head tag. Так после его включения вообще сайт накрылся. Пришлось вычищать потом остатки этой программы.
Ответить | Ответить с цитатой | Цитировать
0 # Wedal 20.04.2018 01:44
Валерий, у меня только один вариант - кривой шаблон. Видимо прямо в коде в H1 подставляется заголовок первого опубликованного модуля. Нужно править шаблон. По-другому никак.
Ответить | Ответить с цитатой | Цитировать
+1 # iygv 21.04.2018 08:21
Ничего не получалось, чего только ни делал, ничего не получалось. А потом увидел, что я не в том шаблоне переопределение создал )) Ну прикол ) В общем все получилось, огромное спасибо!
Ответить | Ответить с цитатой | Цитировать
+1 # Valentyna 27.02.2019 16:37
Спасибо большое. Все получилось! Люблю такие простые и наглядные мануалы.
Ответить | Ответить с цитатой | Цитировать
0 # Александр 25.03.2019 15:33
Спасибо, очень помогло!!
Ответить | Ответить с цитатой | Цитировать
0 # Антон 25.06.2019 11:27
Супер! Спасибо!
Ответить | Ответить с цитатой | Цитировать
0 # Сергей Астахов 27.12.2019 01:21
Приветствую. Можете помочь? К сожалению в последней версии Жумла 3.9.14 последнего кода h2 в таком виде как вы написали нету. Есть вот такой код h2
И все. Не получится изменить по вашей инструкции? Есть еще коды H1. может они подойдут для изменения? Спасибо
Ответить | Ответить с цитатой | Цитировать
+1 # Николай Шевцов 28.04.2020 08:13
Очень благодарен! После обновления до версии Joomla! 3.9.18 Stable [ Amani ] применил метод, описанный в данной статье. Всё прекрасно получилось!
Ответить | Ответить с цитатой | Цитировать
0 # Guest 03.02.2022 07:17
Добрый день. А как поменять заголовки статей в К2?
Ответить | Ответить с цитатой | Цитировать