Матвей Земсков

Заметки веб-мастера

Понедельник, 08 октября 2018 19:48

Запрет индексации дублей страниц в компоненте K2 Joomla

Оцените материал
(5 голосов)

Я использую компонент K2 для Joomla уже много лет. Когда я впервые узнал о нем, K2 мне очень понравился: в нем были реализованы возможности, которых в самой Joomla на тот момент не было. В процессе его использования обнаруживались недостатки. Самым главным из них я считаю дублирование страниц. Например, одна и та же статья блога может открываться по разным URL. То же самое касается и страниц со списками статей по тегам и тд.

Идею для написания этой небольшой статьи мне подал читатель моего блога по имени Евгений. Он ознакомился со статьей «Добавляем meta-теги на странице со списком элементов по тегам в компоненте K2» и вспомнил одну проблему, которая встречается с тегами в K2 для Joomla - это их индексация по умолчанию. Например, на сайте управление контентом организовано с помощью компонента K2. В нем есть раздел «Ремонт» и тег «Ремонт». В процессе индексации сайта поисковиками, например, Google, он воспринимает одну из страниц как дубляж другой страницы. В итоге из-за этого падает общая индексация сайта.

«Попытки запретить индексацию всех страниц со списками статей по тегам в robots.txt не дал результатов. Поверьте мне на слово, я борюсь с этим уже почти год. И тут меня осенило. Я вспомнил, как с помощью вашей статьи добавлял meta-теги: description и keywords и что я таким же способом могу добавить meta-тег robots, чтобы поставить там noindex, nofollow» — пишет Евгений.

Что же нужно сделать, чтобы запретить индексацию страниц со списками статей по тегам? Все очень просто:

  • Добавляем в базу данных поле для хранения значений мета-тега robots:

    SQL

    	ALTER TABLE `#__k2_tags` ADD `meta_robots` VARCHAR(255) NOT NULL;
    
  • В языковые файлы административной и публичной части (/administrator/language/overrides/ru-RU.override.ini и /language/overrides/ru-RU.override.ini) добавляем значение мета-тега по-умолчанию:

    INI

    K2_TAG_PAGE_META_ROBOTS="noindex, nofollow"
  • Изменяем шаблон компонента K2 Joomla административной части (/administrator/components/com_k2/views/tags/tmpl/default.php) следующим образом:

    PHP

    <th class="center">Meta-Robots</th>
     …
    <td class="k2Center center"><?php echo $row->meta_robots; ?></td>
    
    
  • В другом шаблоне админки (/administrator/components/com_k2/views/tag/tmpl/default.php) добавляем следующий код:

    PHP

    	<li>
    		<div class="paramLabel">
    		   <label for=""><?php echo JText::_('K2_TAG_PAGE_META_ROBOTS'); ?></label>
    		</div>
    		<div class="paramValue">
    		   <textarea cols="50" rows="5" style="width:100%;" class="text_area K2TitleBox" name="meta_robots" id="meta_robots"><?php echo $this->row->meta_robots; ?></textarea>
    	   </div>
    	</li>
    
  • В самом начале кода класса (файл - /administrator/components/com_k2/tables/k2tag.php) добавляем новое свойство:

    PHP

    	var $meta_robots = null;
    
  • В файл /components/com_k2/views/itemlist/view.html.php добавляем:

    PHP

    	$db->setQuery('SELECT id, name, meta_robots FROM #__k2_tags WHERE name = '.$db->quote($tag));
    
    В том же файле под строкой, устанавливающей заголовок страницы $title = JText::_('K2_DISPLAYING_ITEMS_BY_TAG').' '.$tag->name; вставил следующий блок кода:

    PHP

    	$document = JFactory::getDocument();                                
    	// Set meta-description
    	$metaDescription = (!empty($tag->meta_description)) ? $tag->meta_description : JText::_('K2_DISPLAYING_ITEMS_BY_TAG_METADESCRIPTION').' '.$tag->name;
    	// Set meta-keywords
    	$metaKeywords = (!empty($tag->meta_keywords)) ? $tag->meta_keywords : $tag->name;
    
    	// Set meta-robots
    	$metaRobots = (!empty($tag->meta_robots)) ? $tag->meta_robots : JText::_('K2_TAG_PAGE_META_ROBOTS');
    
    	$metaDescription = preg_replace("#{(.*?)}(.*?){/(.*?)}#s", '', $metaDescription);
    	$metaDescription = strip_tags($metaDescription);
    	$metaDescription = K2HelperUtilities::characterLimit($metaDescription, $params->get('metaDescLimit', 150));
    
    	$document->setDescription($metaDescription);
    	$document->setMetadata('keywords', $metaKeywords);
    	$document->setMetadata('robots', $metaRobots);
    

Если все сделано правильно, то на странице в публичной части списка статей по тегам в компоненте K2 Joomla появится мета-тег robots.

Спасибо за внимание! :)

Прочитано 10335 раз
Мои услуги

Предлагаю следующие услуги:

  • Верстка шаблона сайта из дизайн-макета для CMS «1С-Битрикс Управление сайтом» и CMS “Joomla”
  • Создание форм различной сложности (обратная связь, анкеты и тп) для указанных CMS
  • Настройка и кастомизация компонентов и модулей для указанных CMS
  • Доработка модулей и компонентов для указанных CMS, добавление нестандартного функционала
  • Разработка лендингов (landing-pages)

По все вопросам обращайтесь через форму обратной связи

Скачать

Предлагаю вашему вниманию:

Наверх