Описание:Это статья, посвященная 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 .=