Новости в DataLife Engine могут быть доступными по нескольким адресам одновременно. В DataLife Engine доступно три типа ЧПУ. Разумеется, что используется только один тип, но новости доступны и по остальным двум. Откуда поисковые системы узнают об остальных двух? Думаю, причина в том, что Вы используете или использовали сторонние модули, если дублирование контента уже есть. Возможно когда альтернативное имя категории или новости меняется и тогда новость доступна по новому адресу. Если новость уже проиндексирована, то поисковая система знает ее старый адрес и новый. В этом случае происходит дублирование контента. Поисковая система Google в своем сервисе "Инструменты для веб-мастеров" предоставляет список страниц на Вашем сайте, которые дублируют содержимое.
Внимание! Всё, что описано ниже, актуально до версии 9.2 включительно. Если у Вас версия 9.3 и выше, то достатточно в настройках системы напротив
Обрабатывать неверные URL ЧПУ: поставить
ДАПроблему дублирования контента в DataLife Engine, версий до 9.2 включительно, решаем с помощью 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://....." />
В секции 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, или оба варианта решать Вам.
Делаем редирект страниц /page/1/ с основными адресами (главной страницы или категории)И так, следующим нашим шагом будет редирект /page/ и /page/1/ на главную страницу нашего сайта. По сути, страницы site.ru/page/ и site.ru/page/1/ являються дублями site.ru. Не верите? Попробуйте, во всех вариантах будет грузится главная страница. И мы будем, это исправлять.
Вариант через .htaccess редирект (возможно на некоторых серверах может не работать):
Открываем файл .htaccess. Сразу после вставки строк правок из предыдущих пунктов необходимо вставить следующее:
### START Редирект с первой страницы на основную
RewriteRule ^(.*)/page/1$ $1 [R=301,L]
RewriteRule ^(.*)page/1$ $1 [R=301,L]
### END Редирект с первой страницы на основную
Вариант через php-редирект (этот работает точно):
Открываем файл /engine/engine.php и находим:
if (($subaction == "showfull" or $subaction == "addcomment") and ((! isset ( $category ) or $category == ""))) {
ВЫШЕ добавляем:
if ( ($config['allow_alt_url'] == "yes") && (intval($_GET['cstart']) == 1) && (strpos($_SERVER['REQUEST_URI'], '/page/1') !== false) ) {
$first_page_url = str_replace ( "/page/1", "", $_SERVER['REQUEST_URI'] );
header("HTTP/1.0 301 Moved Permanently");
header("Location: $first_page_url");
die("Redirect");
}
Теперь при вводе неправильного адреса с /page/1/ на конце, будет осуществляться редиректить на основную страницу.
Что бы сделать редирект с /page/, необходимо в .htaccess прописать:RewriteRule ^(.*)page/$ $1 [R=301,L]