Доопрацювання Joomla! 3.3-2.5 для поліпшення пошукової оптимізації

  1. Ще трохи про заголовках в Joomla!
  2. Тема як посилання в Joomla!
  3. Що робити з циклічними посиланнями в меню в Joomla! ?

Як відомо, Joomla - одна з найбільш популярних безкоштовних CMS в світі. Популярність ця цілком заслужена, оскільки у неї є безліч переваг - проста і зручна Адаменко, безліч безкоштовних розширень, за допомогою яких можна створювати найрізноманітніші сайти. Але ніщо не ідеально, і, звичайно ж, у цієї системи є також і безліч недоліків. Сьогодні я хотів би, спираючись на свій особистий досвід доопрацювання Joomla, поговорити про те, як виправити деякі її недоліки, а саме - пов'язані з SEO.

На даний момент остання стабільна версія Joomla - це 3.3.6, і описувати я буду в першу чергу її. Але більшість змін, про які піде мова, цілком актуальні і для попередніх версій - таких як 3.0, 3.1 і 3.2, а деякі з них дуже навіть підходять для більш ранніх гілок - 2.5.x і старше.

Тож почнемо…

... з перевизначення в Joomla!

Як відомо, правити модулі та компоненти Joomla в самому ядрі системи - справа невдячна. При оновленні файли перезапишуть, і ваші зміни благополучно полетять коту під хвіст. Тому по можливості те, що ми правимо, потрібно перевизначати в шаблон (для цього в ньому існує навіть спеціальна папочка - html). В Joomla 3 з'явився дуже зручний інструмент перевизначення прямо з адмінки. Для цього потрібно зайти за адресою: Розширення - Менеджер шаблонів - Шаблони - ваш шаблон - вкладка «Створити перевизначення», після чого клікнути по тому модулю, компоненту або макету, який вам потрібен. В результаті він буде перевизначений в папку html шаблону, і правити його потрібно буде вже там.

Справедливості заради зазначу, що перевизначати можна далеко не все. З деякими файлами система не дозволяє цього робити, і доведеться повозитися, вносячи в них зміни при кожному оновленні системи, або ж робити так, щоб вони не перезаписувати. Але якщо є можливість перевизначити файли, це краще зробити.

перевизначення файлів

Заголовки в Joomla!

Як відомо, в Joomla Як відомо, в Joomla! є різні типи пунктів меню - це шаблон матеріалу, шаблон блогу категорії і т.п. У більшості з них за замовчуванням автоматично виводиться заголовок сторінки. Але практично скрізь він виводиться в тезі h2. Чому? Напевно, у розробників була своя логіка. Так чи інакше, для просування краще, щоб основний заголовок сторінки був в тезі h1. Тому це краще змінити.

Давайте змінимо тег заголовка в найбільш поширених типах сторінок - це матеріал і блог категорії. Для цього нам потрібно перенаправити в компоненті com_content папки article і category. Потім для матеріалу нам потрібно в файлі templates / ваш_шаблон / html / com_content / article в файлі default.php знайти рядки:

<H2 itemprop = "name"&gt; <? Php if ($ params-> get ( 'show_title')):?&gt; <? Php if ($ params-> get ( 'link_titles') &&! Empty ($ this-> item-> readmore_link)):?&gt; <a href="<?php echo $this-> item-> readmore_link;?> "itemprop =" url "&gt; <? php echo $ this-> escape ($ this-> item-> title); ?> </a&gt; <? Php else:?&gt; <? Php echo $ this-> escape ($ this-> item-> title); ?&gt; <? Php endif; ?&gt; <? Php endif; ?> </ H2>

І замінити тут h2 на h1.

Для того, щоб замінити заголовок в блозі категорії на h1, ми проробляємо аналогічні дії з файлом templates / ваш_шаблон / html / com_content / category / blog.php і знаходимо в ньому такі рядки:

<? Php if ($ this-> params-> get ( 'show_category_title', 1) or $ this-> params-> get ( 'page_subheading')):?> <H2&gt; <? Php echo $ this-> escape ($ this-> params-> get ( 'page_subheading')); ?&gt; <? Php if ($ this-> params-> get ( 'show_category_title')):?> <Span class = "subheading-category"&gt; <? Php echo $ this-> category-> title; ?> </ Span&gt; <? Php endif; ?> </ H2&gt; <? Php endif; ?>

Як ви вже могли здогадатися, тут теж потрібно замінити h2 на h1. Варто однак зазначити, що цей заголовок буде виводитися тільки в тому випадку, якщо в настройках відображення категорії в пункті меню у вас стоїть «Показувати заголовок категорії» (за замовчуванням ця функція в адмінки Joomla! Відключена).

Ще трохи про заголовках в Joomla!

Якщо ми вже заговорили про заголовках, то хочу згадати ще одну проблему Joomla !, яку було б добре виправити. Як відомо, в блозі категорії текст зазвичай виводиться за шаблоном: Тема - Вступний текст (плюс-мінус додаткова інформація). Причому заголовок виводиться в тезі h2. Насправді більше 2-3 заголовків h2 на сторінці - це помилка SEO, а в блозі категорії цих заголовків часто буває 10-15 на сторінку. Тому краще виправити тег заголовка в блозі категорії.

Для цього нам потрібно перевизначити макет content. Потім у файлі /templates/ваш_шаблон/html/layouts/joomla/content/blog_style_default_item_title.php знаходимо рядки:

<? Php if ($ params-> get ( 'show_title')):?> <H2 itemprop = "name"&gt; <? Php if ($ params-> get ( 'link_titles') && $ params-> get ( ' access-view ')):?&gt; <a href="<?php echo JRoute::_(ContentHelperRoute::getArticleRoute($displayData-> slug, $ displayData-> catid));?> "itemprop =" url " &gt; <? php echo $ this-> escape ($ displayData-> title); ?> </a&gt; <? Php else:?&gt; <? Php echo $ this-> escape ($ displayData-> title); ?&gt; <? Php endif; ?> </ H2&gt; <? Php endif; ?>

і міняємо відкриває і закриває теги h2, наприклад, на <div class = "title" itemprop = "name»> </ div>.

Тема як посилання в Joomla!

Як відомо, коли ми створюємо блог категорії, дуже добре, щоб заголовки матеріалів, що входять в цей блог, були посиланнями. Для цього в Joomla! є навіть спеціальна настройка - «заголовок як посилання». Все б добре, але от тільки коли ми вибираємо цю настройку, то, переходячи на сторінку будь-якого матеріалу, бачимо, що його основний заголовок теж став посиланням. Тобто по суті у нас на сторінці утворилася циклічна посилання - та, що посилається на сторінку, на якій ми вже знаходимося. За рекомендацією пошукових машин, таких посилань на сторінці не повинно бути, оскільки вони знижують її вагу. Та й взагалі, навіть з точки зору користувача це нерозумно і незручно. Тому краще прибрати посилається сам на себе заголовок.

Для цього відкриємо вже знайомий нам файл templates / ваш_шаблон / html / com_content / article / default.php і знаходимо ті ж рядки, в яких ми вже замінили h2 на h1. Тільки тепер нам потрібно замінити

<? Php if ($ params-> get ( 'show_title')):?&gt; <? Php if ($ params-> get ( 'link_titles') &&! Empty ($ this-> item-> readmore_link)):? &gt; <a href="<?php echo $this-> item-> readmore_link;?> "itemprop =" url "&gt; <? php echo $ this-> escape ($ this-> item-> title); ?> </a&gt; <? Php else:?&gt; <? Php echo $ this-> escape ($ this-> item-> title); ?&gt; <? Php endif; ?&gt; <? Php endif; ?>

на

<? Php if ($ params-> get ( 'show_title')):?&gt; <? Php echo $ this-> escape ($ this-> item-> title); ?&gt; <? Php endif; ?>

Після цього заголовок в матеріалі перестає бути посиланням.

Після цього заголовок в матеріалі перестає бути посиланням

Що робити з циклічними посиланнями в меню в Joomla! ?

Циклічні посилання створюються не тільки заголовками, які посилаються самі на себе. Найбільш поширеними джерелами таких посилань є логотип в шапці сайту, який зараз традиційно робиться посиланням на головну сторінку, а також пункти меню, які залишаються розмітки, коли вони активні. Відповідно, логотип на головній сторінці рекомендується робити неклікабельним, і активний пункт меню теж не повинен бути посиланням. Ці тонкощі SEO втілені далеко не на кожному сайті, але якщо ми подивимося на сайти великих компаній, які серйозно підходять до оптимізації своїх сайтів, і відомих SEO-агенств, у них все зроблено саме так.

Як же зробити це на Joomla? Ну, з заголовком можна поступити банально - вивести в адмінці 2 модуля, один з неклікабельним заголовком, другий з клікабельним, і прив'язати один до головної сторінки, а другий до всіх інших. Але що робити з меню? В налаштуваннях Joomla неклікабельний активний пункт меню не передбачений взагалі. Тому доводиться «допілівать» стандартний модуль меню.

Але і тут не все так просто. Існує простий спосіб зробити будь-який активний пункт меню неклікабельним, прописавши умови начебто «прибирати посилання з пункту класу active», але в цьому випадку, наприклад, якщо у нас список матеріалів категорії, і ми зайдемо в будь-який матеріал, пункт меню як і раніше залишиться неклікабельним . А ось цього вже не хотілося б. Тому я особисто використовую більш складний фікс, з логікою «якщо ми в матеріалі (або десь ще), пункт меню залишається клікабельним». А оскільки сторінки в різних компонентах відрізняються, то фікс прописаний для 3х самих часто використовуваних з них: це матеріали стандартного com_content Joomla, матеріали компонента K2 і товари інтернет-магазину JoomShopping.

Технічно це зроблено так. Переобумовленої mod_menu Joomla і редагуємо файл /templates/ваш_шаблон/html/mod_menu/default_component.php. після рядка

{$ Linktype = $ item-> title; }

додаємо:

$ ActiveCustom = false; $ OptionCustom = JRequest :: getString ( 'option'); // тип контенту $ menu = & JSite :: getMenu (); switch ($ optionCustom) {case 'com_content': if (! JRequest :: getInt ( 'catid')) {// в категорії показує 0, в матеріалі категорії! = 0 $ activeCustom = true; } Break; case 'com_k2': if (JRequest :: getString ( 'view') && JRequest :: getString ( 'view') == 'itemlist') {// в категорії К2 немає ВД, в матеріалі К2 - є $ activeCustom = true ; } Break; case 'com_jshopping': if (! JRequest :: getInt ( 'product_id')) {// в списку продуктів jshop немає product_id, в самому продукті є product_id і category_id $ activeCustom = true; } Break; } If ($ menu-> getActive () == $ menu-> getDefault ()) {// якщо головна - завжди активна $ activeCustom = true; } If ($ activeCustom && ($ menu-> getActive () == $ menu-> getItem ($ item-> id))) {// якщо ІД меню == активному меню $ activeCustom = true; } Else {$ activeCustom = false; }

І далі, замінюємо

{Default: case 0:?> <A <? Php echo $ class; ?> Href = "<? Php echo $ item-> flink;?>" <? Php echo $ title; ? >&gt; <? Php echo $ linktype; ?> </a>

на

switch ($ item-> browserNav) {default: case 0:?&gt; <? php if ($ activeCustom) {?&gt; <? php echo $ linktype; ?&gt; <? Php} else {?> <A <? Php echo $ class; ?> Href = "<? Php echo $ item-> flink;?>" <? Php echo $ title; ? >&gt; <? Php echo $ linktype; ?> </a&gt; <? }?>

Після цього отримуємо те, що нам потрібно.

Після цього отримуємо те, що нам потрібно

І пагінація створить дублі в Joomla!

Ще одна, чи не найпомітніша проблема Joomla 3.x (та й більш ранніх версій теж) полягає в пагінацію. Симптоми такі. Заходимо на будь-яку сторінку, де є пагінація. Посилання на неї - це зазвичай щось виду www.mysite.com/page.html. Переходимо на другу, третю або будь-яку іншу сторінку пагінацію. А тепер спробуйте повернутися назад на першу сторінку, з якої ми почали! Посилання набуває вигляду www.mysite.com/page.html?limitstart=0. Таким чином, у нас одна і та ж сторінка доступна по двом посиланням, що, як відомо, в SEO вкрай не рекомендується.

Вирішити цю проблему шляхом стандартних налаштувань Joomla неможливо. Вона, знову ж таки, вирішується шляхом «допилювання». В цьому випадку доведеться правити ядро ​​системи, файл, який перенаправити неможливо. Він знаходиться за адресою /libraries/cms/pagination/pagination.php. тут:

рядок

$ Data-> start-> link = JRoute :: _ ($ params. '&'. $ This-> prefix. 'Limitstart = 0');

замінюємо на

$ Data-> start-> link = JRoute :: _ ($ params. '&'. $ This-> prefix);

далі рядок

$ Data-> previous-> link = JRoute :: _ ($ params. '&'. $ This-> prefix. 'Limitstart ='. $ Page);

замінюємо на

if ($ page == 0) {$ data-> previous-> link = JRoute :: _ ($ params. '&'. $ this-> prefix); } Else {$ data-> previous-> link = JRoute :: _ ($ params. '&'. $ This-> prefix. 'Limitstart ='. $ Page); }

і далі, рядок

$ Data-> pages [$ i] -> link = JRoute :: _ ($ params. '&'. $ This-> prefix. 'Limitstart ='. $ Offset);

замінюємо на:

if ($ offset == 0) {$ data-> pages [$ i] -> link = JRoute :: _ ($ params. '&'. $ this-> prefix); } Else {$ data-> pages [$ i] -> link = JRoute :: _ ($ params. '&'. $ This-> prefix. 'Limitstart ='. $ Offset); }

Це рішення, на жаль, має один недолік - після поновлення зміни не будуть збережені. Тому доведеться міняти файл кожного разу. Це, втім, не так складно, якщо зберегти його собі і пере від випадку до випадку.

В загальному…

Як завжди, хочу сказати, що цей список проблем і їх рішень далеко не повний. В Joomla є ще багато недоліків, які вимагають виправлення. Я описав кілька з них, одні - дуже поширені і постійно необхідні для виправлення, інші - рішення яких складно знайти в Мережі. Маю велику надію, що це буде корисно як розробникам, так і рядовим користувачам.

2. Чому?
Php if ($ params-> get ( 'show_title')):?
Gt; <?
Empty ($ this-> item-> readmore_link)):?
Gt; <a href="<?
Php echo $this-> item-> readmore_link;?
Php echo $ this-> escape ($ this-> item-> title); ?
Php else:?
Gt; <?
Php echo $ this-> escape ($ this-> item-> title); ?