DataLife Engine > Версия для печати > Внутренняя Seo оптимизация DLE 10.0

Описание:Это статья, посвященная seo оптимизации dle сайтов. Статья написана с использованием материалов, опубликованных АлаичЪ на страницах своего блога. При этом использованы и протестированы те материалы, которые применимы и работают только в DLE 10.0.Итак вы готовы к внутренней Seo оптимизации вашего сайта? Если «да», то приступим:

Склейка зеркал — выбираем главное зеркало www.site.ru или site.ru

Какие проблемы решаем: Полное дублирование сайта по адресам http://site.ru и http://www.site.ru

Открываем файл .htaccess, который находится в корне сайта (это там, где лежит основной index.php)НАХОДИМ:

RewriteEngine On

НИЖЕ ДОБАВЛЯЕМ:

если в качестве основного зеркала выбран http://site.ru

### START Определяем главное зеркало как site.ru (site.ru заменить на свой домен, например alaev.info)
RewriteCond %{HTTP_HOST} ^www.site.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
### END Определяем главное зеркало

если в качестве основного зеркала выбран http://www.site.ru

### START Определяем главное зеркало как www.site.ru (www.site.ru заменить на свой домен, например www.alaev.info)
RewriteCond %{HTTP_HOST} ^site.ru$ [NC]
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
### END Определяем главное зеркало

Теперь не важно, как пользователи будут в браузере вводить адрес сайта, с www или без — будет осуществляться редирект на основное зеркало сайта. Так же не важно, каким образом стоят внешние ссылки на сайт — вес всех входящих ссылок сохранится и суммируется для основного зеркала.Убираем index.php из адреса главной страницы и страниц категорий:

Какие проблемы решаем:

-Дублирование главной страницы по адресам http://site.ru и http://site.ru/index.php
-Дублирование страниц категорий, тегов или других разделов при добавлении index.php на конце, например, http://site.ru/category/index.php, http://site.ru/search/index.php, http://site.ru/tag/index.php и др.Открываем файл .htaccess, который находится в корне сайта (это там, где лежит основной index.php)В САМЫЙ КОНЕЦ ДОБАВЛЯЕМ:

### Редиректы с site.ru/category/index.php на site.ru/category/ и др.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.*)index.php$
RewriteRule ^(.*)index.php$ $1 [R=301,L]
### Редиректы с index.php на сайт
RewriteBase /
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9} /index.php HTTP/
RewriteRule ^index.php$ / [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

Теперь не будет возникать самого распространённого дубля главной страницы, а так же дублей категорий и других разделов.Склеиваем адреса страниц /page/1/ с основными адресами для главной страницы и категорийКакие проблемы решаем:

-Дублирование главной страницы сайта по адресам http://site.ru/page/1/ и http://site.ru/

-Дублирование основной (первой) страницы категории по адресам http://site.ru/category/page/1/ и http://site.ru/category/Открываем файл .htaccess, который находится в корне сайта (это там, где лежит основной index.php)НАХОДИМ:

### END Определяем главное зеркало

НИЖЕ ДОБАВЛЯЕМ:

### START Редирект с первой страницы на основную
RewriteRule ^(.*)/page/1/$ $1/ [R=301,L]
RewriteRule ^(.*)page/1/$ $1/ [R=301,L]
### END Редирект с первой страницы на основную

Открываем файл /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/ на конце, будет осуществляться редиректить на основную страницу.Убираем слеши из URL тегов, генерируемых движком:Открываем файл: /engine/modules/show.short.phpНаходим:

if( $config['allow_alt_url'] == "yes" ) $tags[] = "" . $value . "";

Заменяем:

if( $config['allow_alt_url'] == "yes" ) $tags[] = "" . $value . "";

Открываем файл: /engine/modules/tagscloud.phpНаходим:

$tags[] = "".$value['tag']."";

Заменяем:

$tags[] = "".$value['tag']."";

Находим:

$tpl->result['tags_cloud'] .= "

".$lang['all_tags']."";

Заменяем:

$tpl->result['tags_cloud'] .= "

".$lang['all_tags']."";

Находим:

$tags[] = "".$value['tag']."";

Заменяем:

$tags[] = "".$value['tag']."";

Открываем файл: /engine/modules/show.custom.phpНаходим:

if( $config['allow_alt_url'] == "yes" ) $tags[] = "" . $value . "";

Заменяем:

if( $config['allow_alt_url'] == "yes" ) $tags[] = "" . $value . "";

Открываем файл: /engine/modules/show.full.phpНаходим:

if( $config['allow_alt_url'] == "yes" ) $tags[] = "" . $value . "";

Заменяем:

if( $config['allow_alt_url'] == "yes" ) $tags[] = "" . $value . "";

Открываем файл: /engine/engine.phpНаходим:

if ($config['allow_alt_url'] == "yes") $s_navigation .= " » " . $lang['tag_cloud'] . " » " . $tag;

Заменяем:

if ($config['allow_alt_url'] == "yes") $s_navigation .= " » " . $lang['tag_cloud'] . " » " . $tag;

В очередной раз открываем .htaccessНаходим:

# вывод отдельному тегу
RewriteRule ^tags/([^/]*)(/?)+$ index.php?do=tags&tag=$1 [L]
RewriteRule ^tags/([^/]*)/page/([0-9]+)(/?)+$ index.php?do=tags&tag=$1&cstart=$2 [L]

Заменяем:

# вывод отдельному тегу
RewriteRule ^tags$ index.php?do=tags [L]
RewriteRule ^tags/([^/]*)(/?)+$ index.php?do=tags&tag=$1 [L]
RewriteRule ^tags/([^/]*)/page/([0-9]+)(/?)+$ index.php?do=tags&tag=$1&cstart=$2 [L]

Большую работу мы с вами проделали, однако это еще не все.Уникализация метаописания description для страниц пагинации сайта:Открываем /engine/engine.phpНАХОДИМ:

if (intval($_GET['cstart']) > 1 ){

        $page_extra = ' » '.$lang['news_site'].' '.intval($_GET['cstart']);

} else $page_extra = '';

ЗАМЕНЯЕМ НА:

if (intval($_GET['cstart']) > 1 ){
        $page_extra = ' » '.$lang['news_site'].' '.intval($_GET['cstart']);
        $meta_ext_page = ' стр. ' .intval($_GET['cstart']);
} else {
        $page_extra = '';
        $meta_ext_page = '';
}

$meta_ext_page = ‘ стр. ‘ .intval($_GET[‘cstart’]); — эта часть отвечает за формирование «добавки» в meta description. intval($_GET[‘cstart’] — это номер страницы, а ‘ стр. ‘ — это собственно текст.

НАХОДИМ: ЗАМЕНЯЕМ НА: Все готово. Теперь повторяющихся метаописаний больше не будет.Улучшение SEO характеристик заголовков titleЕсли у нашей публикации не задан «Метатег title», то по умолчанию будет выводиться следующий title «Название публикации — Название сайта». Или для категории, когда не задан «Метатег title», по умолчанию выводится следующий title «Название категории — Название сайта».

Какие проблемы решаем:

-Не самое оптимальное формирование title с точки зрения требований SEOВы верите в миф, что вес каждого слова в заголовке title обратно пропорционален их количеству, то есть, чем меньше слов в title, тем больший вес каждое из них будет иметь? Если вы согласны с этим мнением, то читайте дальше.Открываем /engine/engine.phpНАХОДИМ:

$metatags['title'] = $nam_e . $page_extra . ' » ' . $metatags['title'];

ЗАМЕНЯЕМ НА:

$metatags['title'] = $nam_e . $page_extra;

НАХОДИМ:

$metatags['title'] = $titl_e . $page_extra . ' » ' . $config['home_title'];

ЗАМЕНЯЕМ НА:

$metatags['title'] = $titl_e . $page_extra;

Теперь все категории будут содержать в title только название категории, а публикации, соответственно, только название публикации.SEO оптимизация заголовков title категорийПредлагаю сделать так, чтобы оптимизированный тайтл (поле «Метатег title» категории) выводился только для первой страницы категории, а на всех остальных выводился приличный короткий тайтл (поле «Имя» категории).

Какие проблемы решаем:

-Не корректное с точки зрения SEO формирование заголовков title для страниц пагинации сайтаОткрываем файл /engine/engine.phpНАХОДИМ:

if ( $metatags['header_title'] ) $metatags['title'] = stripslashes($metatags['header_title'].$page_extra);

ЗАМЕНЯЕМ НА:

//разные title для страниц пагинации, для первой полный title, для пагинации короткий
if ($do == "cat" and $category != '' and $subaction == '') { //если категория
        if ( $metatags['header_title'] and ! $page_extra ) $metatags['title'] = stripslashes($metatags['header_title']);
        else $metatags['title'] = stripslashes($cat_info[$category_id]['name']) . $page_extra;
} elseif ($dle_module == "main") { //если главная страница
        if ( ! $page_extra ) $metatags['title'] = stripslashes($config['home_title']);
        else $metatags['title'] = stripslashes($config['short_title']) . $page_extra;
} elseif ($metatags['header_title']) $metatags['title'] = stripslashes($metatags['header_title']);
//разные title для страниц пагинации, для первой полный title, для пагинации короткий

Сделали? Тогда можете считать, что вы выжали максимум возможностей из движка DLE! Но это еще не все.Редирект с несуществующих страниц пагинации на правильные и существующиеОткрываем файл /engine/modules/show.short.php и в самом низу находим:

}
?>

ВЫШЕ добавляем:

//редирект на последнюю страницу, если в url указана страница больше чем максимально существующая
$all_pages_count = @ceil( $count_all / $config['news_number'] );
        if ($cstart > $all_pages_count) {
                if ($all_pages_count > 1) {
                        header('HTTP/1.1 301 Moved Permanently');
                        header ('Location: ' . $url_page . '/page/' . $all_pages_count . '/');
                        die();
                } else {
                        header('HTTP/1.1 301 Moved Permanently');
                        header ('Location: ' . $url_page . '/');
                        die();
                }
        }
//редирект на последнюю страницу, если в url указана страница больше чем максимально существующая

Немного поясню код: идет проверка на условие — если номер текущей страницы больше чем максимальное количество страниц на сайте (или в категории), то происходит редирект на последнюю страницу. Если запрашивается страница номер 2, а страниц всего одна, то происходит редирект на гравную страницу (или главную страницу категории).Пример на пальцах, кто-то запрашивает страницу сайта site.ru/page/435/, а на этом сайте всего 268 страниц, следовательно, случится редирект на адрес site.ru/page/268/.Редирект для публикаций, у которых отсутствует ID, на главную страницуВ панели вебмастера висит много страниц с ошибкой 404 такого вида site.ru/category/subcat/page-name.html, а по правилам должно быть так site.ru/category/subcat/123-page_name.html. Вот честно, до сих пор не понимаю, каким образом и почему пропал ID новости и кто ссылался на публикации таким образом. Никаких модулей и хаков, которые убирают из url его идентификатор я никогда не использовал, так что грешу на пользователей, которые «криво» ставят ссылки в своих бложеках на мой сайт. Ну да ладно, это уже не важно, а важно разобраться с этой проблемой!Открываем все тот же файл /engine/engine.php и находим:

                         if ($subaction == '') $subaction = "showfull";
                        }

НИЖЕ добавляем:

// 301 редирект на главную с адресами страниц новостей, где пропал id
                        if ( ( $config['allow_alt_url'] == "yes" ) && (strpos($_SERVER['REQUEST_URI'], '.html') !== false) && ($dle_module == "main") ) {

                                        header("HTTP/1.0 301 Moved Permanently");
                                        header("Location: {$config['http_home_url']}");
                                        die("Redirect");
                        }
// 301 редирект на главную с адресами страниц новостей, где пропал id

Теперь все адреса, содержащие на конце .html и не содержащие в себе ID будут редиректиться на главную страницу. И не переживайте по поводу статических страниц, они, хоть и так же не имеют ID в url-адресе, но редиректиться не будут, а будут работать как и прежде.Редирект для удаленных или несуществующих новостей на главнуюНу, тут стандартная ситуация и может встретиться на любом сайте. Вы удалили какую-то новость и, понятное дело, будет выдаваться 404 ошибка. Если вас это не устраивает, а именно то, что выдается 404 ошибка, то можно сделать, например, 301-редирект на главную страницу сайта, которая уж точно существует ;)Открываем файл /engine/modules/show.full.php и находим:

   elseif( ! $news_found ) {
                @header( "HTTP/1.0 404 Not Found" );
                msgbox( $lang['all_err_1'], $lang['news_err_12'] );
        }

ЗАМЕНЯЕМ на:

// 301 редирект на главную, если новость не найдена/не существует
        elseif( ! $news_found ) {
                                        header("HTTP/1.0 301 Moved Permanently");
                                        header("Location: {$config['http_home_url']}");
                                        die("Redirect");
        }
// 301 редирект на главную, если новость не найдена/не существует

Теперь при переходе на несуществующую или удаленную публикацию будет осуществляться редирект на главную страницу сайта.Запрещаем индексацию разделов сайта при помощи мета-тега robotsРасширенную версию данного трюка смотрите на форуме про правильный robots.txt для DLE.А сейчас я расскажу, как можно реализовать вывод этого самого метатега в движке DLE в определенных разделах сайта.Открываем уже полюбившийся файл /engine/engine.php, находим бесполезную строку и удаляем: Если такой строки нет, ничего страшного, просто идем дальше.Находим далее:

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