Борьба с дублированием контента / 301 Redirect

Борьба с дублированием контента
Дата: 13 Декабря 2013, в 15:11
Рубрика: Оптимизация сайта
Просмотры: 2105

Новости на сайте могут быть доступными по нескольким адресам одновременно. Сегодня решим проблему дублирования контента с помощью 301 редиректа на PHP или с помощью мета-тега canonical.

Новости в DataLife Engine могут быть доступными по нескольким адресам одновременно. В DataLife Engine доступно три типа ЧПУ. Разумеется, что используется только один тип, но новости доступны и по остальным двум. Откуда поисковые системы узнают об остальных двух? Думаю, причина в том, что Вы используете или использовали сторонние модули, если дублирование контента уже есть. Возможно когда альтернативное имя категории или новости меняется и тогда новость доступна по новому адресу. Если новость уже проиндексирована, то поисковая система знает ее старый адрес и новый. В этом случае происходит дублирование контента. Поисковая система Google в своем сервисе "Инструменты для веб-мастеров" предоставляет список страниц на Вашем сайте, которые дублируют содержимое.

Проблему дублирования контента в DataLife Engine решаем с помощью 301 редиректа на PHP. Это небольшой хак, который проверяет переменную $full_link (уникальный адрес полной новости которую генерирует движок) и если адрес запрошенной новости отличается от значения в переменной $full_link, то выполняется 301 редирект на адрес полной новости, который хранится в переменной $full_link.

Откройте файл /engine/modules/show.full.php и найдите строку:

$tpl->set( '{full-link}', $full_link );

добавьте ниже:

$full_link_ = !isset ($_GET['cstart']) ? $full_link : $link_page . intval ($_GET['cstart']) . ',' . $news_name . '.html';
if ($config['http_home_url'] . substr ($_SERVER['REQUEST_URI'], 1) != $full_link_) {
	header ($_SERVER['SERVER_PROTOCOL'] . '301 Moved Permanently');
	header ('Location: ' . $full_link_);
	die ();
}

Так же есть второй способ решения проблемы дублирования контента в DataLife Engine (DLE) - использование мета-тега canonical.

Google, Yahoo! и Microsoft заявили о поддержке ими нового мета-тега - canonical, который предотвращает появление дублей новостей в поисковых системах. Размещается он, как и все мета-теги внути контейнера и выглядит следующим образом:

<link rel="canonical" href="http://cms-blog.ru" />

В секции href указывается уникальный адрес, который будет учитываться поисковыми системами.

Добавляем мета-тег canonical в DataLife Engine

Откройте файл /engine/engine.php и найдите строку:

if ($config['allow_rss']) $metatags .= <<

добавьте выше:

if ($newsid!='' && $news_found && $dle_module=='showfull') {
	if ($config['allow_alt_url']=='yes') {
		if (parse_url($full_link,PHP_URL_SCHEME) . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']!=$full_link) {
			$metatags .= "\n<link rel=\"canonical\" href=\"$full_link\" />\n";
		}
	}
}

Теперь в исходном коде полной новости будет присутствовать мета-тег canonical если новость откроется по другому url страницы, что нам и было нужно. Если поисковая система узнает о каком-то другом адресе новости, то все равно будет учитывать только тот адрес, который указан в мета-теге canonical.

Хочу также отметить, что поисковая система Яндекс с недавних пор начала учитывать этот мета-тег, поэтому использовать мета-тег или 301 редирект на PHP решать Вам.