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


Зарабатывай на файлах

Рекомендую
Программа для комплексного анализа сайта


Хостинг

Апы

Пользуюсь

Партнёры
2leep.com

Подписка

Календарь
«    Март 2014    »
ПнВтСрЧтПтСбВс
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 

Считалки
Рейтинг@Mail.ru

Участник Blograte.ru


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


d179c208

Добавил: wovanich
Новости в 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]
ПРОСМОТРОВ - 8900
КОММЕНТАРИЕВ - (4)