В этом кейсе я расскажу, как добавить к внешним ссылкам меню Joomla "nofollow" без использования дополнительных расширений и хаков ядра.

В Joomla существует удивительное упущение. В настройках пункта меню нет опции, позволяющей закрыть внешнюю ссылку от индексации при помощи атрибута rel=”nofollow”. В этом кейсе я расскажу, как можно исправить эту проблему без использования дополнительных расширений и хаков ядра.

Часто бывает так, что меню Joomla содержит пункты типа «Внешняя ссылка». Это может быть ссылка на скачивание или партнерская ссылка, либо какая-то еще. Иногда таких ссылок на сайте может быть много. Чтобы не терять ссылочный вес, а также участвовать в различных системах монетизации сайта, желательно свести количество сквозных внешних ссылок к минимуму, либо закрыть их от индексации через nofollow. Стандартной опции, позволяющей это сделать, в настройках Joomla нет. Есть опция «Мета-тег Robots», но она дает совсем не такой результат, который нужен.

На самом деле, эта проблема встала передо мной уже довольно давно. Но лишь недавно я наткнулся на изящное решение, которое не потребует затрагивать ядро или устанавливать плагин. Вот оно:

1. Копируем файл default_url.php из modules/mod_menu/tmpl/ в templates/ВАШ_ШАБЛОН/html/mod_menu/

2. В скопированном файле находим строчку:

defined('_JEXEC') or die;

и вставляем после нее:

$linkhost = JURI::getInstance( $item->flink )->getHost(); //хост вашей ссылки
$basehost = JURI::getInstance( JURI::base() )->getHost(); //хост вашего сайта
/*сравниваем:*/
if ($linkhost !== $basehost) {
            $rel = 'rel="nofollow"';
}

3. Ниже в этом же файле находим вывод ссылок (сразу за case 0, case 1, case 2) и вставляем в них переменную $rel.

Было:

<a <?php echo $class; ?>href="<?php echo $flink; ?>" <?php echo $title; ?> ><?php echo $linktype; ?></a>

Стало:

<a <?php echo $class; ?>href="<?php echo $flink; ?>" <?php echo $title; ?> <?php echo $rel; ?>><?php echo $linktype; ?></a>

Делаем по аналогии для всех трех ссылок.

Вот и всё. Теперь все внешние ссылки, являющиеся пунктами меню Joomla, будут иметь атрибут rel=”nofollow”.

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

Добавить комментарий

Для отправки комментария введите код с картинки:
Защитный код
Обновить

Комментарии  

0 # pro100kalina 23.12.2013 20:04
Я один не вижу разници между "было" и "стало"?
Ответить | Ответить с цитатой | Цитировать
+1 # Wedal 24.12.2013 03:18
pro100kalina, видимо да :-) . В "Стало" добавился вывод переменной:
Код:<?php echo $rel; ?>
Ответить | Ответить с цитатой | Цитировать
0 # Rin 13.01.2014 13:35
Цитирую Wedal:
pro100kalina, видимо да :-) . В "Стало" добавился вывод переменной:
Код:<?php echo $rel; ?>

Код указанный в цитируемом сообщении отфильтровался в моем предыдущем сообщении, в общем разберетесь).
Ответить | Ответить с цитатой | Цитировать
+1 # zamotin 31.12.2014 11:50
большое спасибо! Помогло
Ответить | Ответить с цитатой | Цитировать
+1 # zamotin 31.12.2014 11:54
у вас нет материала по удалению скрытых ссылок? А то много перекопал, многое попробовал, а найти в шаблоне их не смог.
Ответить | Ответить с цитатой | Цитировать
+1 # Wedal 13.01.2015 15:13
zamotin, такого материала нет и быть не может. Это аналитическая работа. В каждом случае алгоритм отличается.
Ответить | Ответить с цитатой | Цитировать
+1 # Дмитрий 03.05.2017 14:01
А на модуль случайного изображения применимо?
Ответить | Ответить с цитатой | Цитировать
+1 # Wedal 04.05.2017 06:15
Дмитрий, в модулях все еще проще. Нужно переопределить макет вывода модуля в ваш шаблон Joomla и отредактировать его, добавив nofollow для ссылки.
Ответить | Ответить с цитатой | Цитировать
+1 # Сергей 08.10.2018 09:40
Добрый день. У меня в папке html нету mod_menu как быть? Создать?
Ответить | Ответить с цитатой | Цитировать
+1 # Wedal 08.10.2018 10:38
Сергей, да, создать.
Ответить | Ответить с цитатой | Цитировать
+1 # Сергей 09.10.2018 03:17
У меня 2 меню: верхнее и боковое. Боковое выводится с помощью s5 accordion menu. Это не повлияет?
Ответить | Ответить с цитатой | Цитировать
+1 # Wedal 10.10.2018 02:52
Сергей, конечно смотря на что. В статье рассказывается про стандартный модуль меню Joomla (mod_menu). s5 accordion menu - это сторонний модуль. Там всё иначе.
Ответить | Ответить с цитатой | Цитировать