С нами просто и выгодно!

Звоните: +7 925 357-32-80

Наш блог. Категория Joomla: установка, настройка и оптимизация расширений Joomla

Удаление дублей страниц в Joomla

Многим знакома ситуация, когда одна и таже страница сайта на Joomla! 1.5 открывается по нескольким ссылкам, а сама CMS к этому относится достаточно меланхолично... С этим можно было бы смириться, но при раскрутке данный феномен создает некоторые неудобства — поисковики недолюбливают дубли, а ссылки на один и тот же раздел возникают очень часто: может где-то неаккуратно оформлена статья, а могут и конкуренты сделать бяку.

Способы решения проблемы с дублями страниц в Joomla!

Для решения проблемы с дублями страниц в Joomla необходимо найти «правильный» путь на сайте и осуществить переадресацию посетителя по этому пути. Осуществить это можно несколькими способами:

  1. Использовать сторонние модули или написать свой, но это стоит денег (или времени на реализацию) и для новых версий CMS придется покупать/писать новую версию модуля, а возникшие проблемы решать придется долго.
  2. Поправить исходники Joomla! — это не очень долго и при обновлении CMS будут возникать проблемы даже с минорными версиями.
  3. Можно поправить исходный код шаблона, который будет проверять наличие соответствующего меню и осуществлять редирект, если путь рассчитаный по меню не совпадает с текущим путем.

Последний способ реализовать проще всего, хотя он и противорячит основной концепции реляционной модели CMS, но модифицировать код шаблона достаточно просто.

Нас интересуют представления (view), которые используются для генерации отображения того или иного раздела на сайте:

  • /components/com_content/views/article/tmpl/default.php
  • /components/com_content/views/category/tmpl/blog.php
  • /components/com_content/views/frontpage/tmpl/default.php
  • /components/com_content/views/section/tmpl/blog.php

Перечисленные выше файлы необходимо скопировать в соответствующие каталоги шаблона:

  1. /html/article/default.php
  2. /html/category/blog.php
  3. /html/frontpage/default.php
  4. /html/section/blog.php

В начало файлов необходимо добавить условия редиректа.

Для /html/article/default.php:

 
defined('_JEXEC') or die('Restricted access');
 
$VALID_URL = &JURI::getInstance( $this->article->readmore_link );
$CURRENT_URL = &JURI::getInstance( JRequest::getURI() );
 
if ($CURRENT_URL->getVar('start', 0) > 0)
$VALID_URL->setVar('start', $CURRENT_URL->getVar('start', 0));
 
if ($CURRENT_URL->getVar('showall', "") <> "")
$VALID_URL->setVar('showall', $CURRENT_URL->getVar('showall', ""));
 
if ($VALID_URL->toString() != $CURRENT_URL->toString())
  JApplication::redirect($VALID_URL->toString());
...
 

Для /html/category/blog.php:

 
defined('_JEXEC') or die('Restricted access');
$this->original_link = JRoute::_(ContentHelperRoute::getCategoryRoute(JRequest::getVar('id'), 0));
 
if (JRequest::getInt('start') > 0) 
  $this->original_link .= "?start=" . JRequest::getVar('start'); $this->real_link = JRequest::getURI();
 
if ($this->original_link != $this->real_link) JApplication::redirect($this->original_link);
...
 

Для /html/frontpage/default.php:

 
defined('_JEXEC') or die('Restricted access'); 
$this->original_link = "/";
 
if (JRequest::getInt('start') > 0) 
  $this->original_link .= "index.php?start=" . JRequest::getVar('start');
 
$this->real_link = JRequest::getURI();
 
if ($this->original_link != $this->real_link) 
  JApplication::redirect($this->original_link);
...
 

Для /html/section/blog.php:

 
defined('_JEXEC') or die('Restricted access');
 
$this->original_link = JRoute::_(ContentHelperRoute::getCategoryRoute($category->slug, $category->section));
 
if (JRequest::getInt('start') > 0) 
  $this->original_link .= "?start=" . JRequest::getVar('start'); $this->real_link = JRequest::getURI();
 
if ($this->original_link != $this->real_link)
  JApplication::redirect($this->original_link);
 
...