Авторский seo блог в помощь вебмастерам. Создание, поисковая оптимизация и продвижение сайтов. Рассматриваю технические вопросы по созданию макетов и логотипов в Adobe Photoshop. Рекомендации по ведению блогов на DataLife Engine.

Внутренняя Seo оптимизация 10.0Внутренняя Seo оптимизация 10.0


Здравствуйте уважаемые читатели нашего сайта! Данная статья посвящена seo оптимизации dle сайтов. Статья написана с использованием материалов, опубликованных АлаичЪ на страницах своего блога. При этом использованы и протестированы те материалы, которые применимы и работают только в Dle 10.0.

Спонсор статьи о seo оптимизации -

Итак вы готовы к внутренней 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[] = "<a href=\"" . $config['http_home_url'] . "tags/" . urlencode($value ) . "/\">" . $value . "</a>";


Заменяем:
if( $config['allow_alt_url'] == "yes" ) $tags[] = "<a href=\"" . $config['http_home_url'] . "tags/" . urlencode($value ) . "\">" . $value . "</a>";


Открываем файл: /engine/modules/tagscloud.php
Находим:
$tags[] = "<a href=\"".$config['http_home_url']."tags/".urlencode($value['tag'])."/\" class=\"{$value['size']}\" title=\"".$lang['tags_count']." ".$value['count']."\">".$value['tag']."</a>";


Заменяем:
$tags[] = "<a href=\"".$config['http_home_url']."tags/".urlencode($value['tag'])."\" class=\"{$value['size']}\" title=\"".$lang['tags_count']." ".$value['count']."\">".$value['tag']."</a>";


Находим:
$tpl->result['tags_cloud'] .= "<br /><br /><a href=\"".$config['http_home_url']."tags/\">".$lang['all_tags']."</a>";


Заменяем:
$tpl->result['tags_cloud'] .= "<br /><br /><a href=\"".$config['http_home_url']."tags\">".$lang['all_tags']."</a>";


Находим:
$tags[] = "<a href=\"".$config['http_home_url']."tags/".urlencode($value['tag'])."/\" class=\"{$value['size']}\" title=\"".$lang['tags_count']." ".$value['count']."\">".$value['tag']."</a>";


Заменяем:
$tags[] = "<a href=\"".$config['http_home_url']."tags/".urlencode($value['tag'])."\" class=\"{$value['size']}\" title=\"".$lang['tags_count']." ".$value['count']."\">".$value['tag']."</a>";


Открываем файл: /engine/modules/show.custom.php
Находим:
if( $config['allow_alt_url'] == "yes" ) $tags[] = "<a href=\"" . $config['http_home_url'] . "tags/" . urlencode( $value ) ."/\">" . $value . "</a>";


Заменяем:
if( $config['allow_alt_url'] == "yes" ) $tags[] = "<a href=\"" . $config['http_home_url'] . "tags/" . urlencode( $value ) ."\">" . $value . "</a>";


Открываем файл: /engine/modules/show.full.php
Находим:
if( $config['allow_alt_url'] == "yes" ) $tags[] = "<a href=\"" . $config['http_home_url'] . "tags/" . urlencode($value ) . "/\">" . $value . "</a>";


Заменяем:
if( $config['allow_alt_url'] == "yes" ) $tags[] = "<a href=\"" . $config['http_home_url'] . "tags/" . urlencode($value ) . "\">" . $value . "</a>";


Открываем файл: /engine/engine.php
Находим:
if ($config['allow_alt_url'] == "yes") $s_navigation .= " &raquo; <a href=\"" . $config['http_home_url'] . "tags/\">" . $lang['tag_cloud'] . "</a> &raquo; " . $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 = ' &raquo; '.$lang['news_site'].' '.intval($_GET['cstart']);
 
} else $page_extra = '';


ЗАМЕНЯЕМ НА:
if (intval($_GET['cstart']) > 1 ){
        $page_extra = ' &raquo; '.$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'] — это номер страницы, а ' стр. ' — это собственно текст.

НАХОДИМ:
<meta name="description" content="{$metatags['description']}" />


ЗАМЕНЯЕМ НА:
<meta name="description" content="{$metatags['description']}{$meta_ext_page}" />

Все готово. Теперь повторяющихся метаописаний больше не будет.

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

Какие проблемы решаем:
-Не самое оптимальное формирование title с точки зрения требований SEO

Вы верите в миф, что вес каждого слова в заголовке title обратно пропорционален их количеству, то есть, чем меньше слов в title, тем больший вес каждое из них будет иметь? Если вы согласны с этим мнением, то читайте дальше.
Открываем /engine/engine.php
НАХОДИМ:
$metatags['title'] = $nam_e . $page_extra . ' &raquo; ' . $metatags['title'];


ЗАМЕНЯЕМ НА:
$metatags['title'] = $nam_e . $page_extra;


НАХОДИМ:
$metatags['title'] = $titl_e . $page_extra . ' &raquo; ' . $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);
[/code]

[b]ЗАМЕНЯЕМ НА:[/b]
[code]//разные 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
.
А сейчас я расскажу, как можно реализовать вывод этого самого метатега в движке DLE в определенных разделах сайта.

Открываем уже полюбившийся файл /engine/engine.php, находим бесполезную строку и удаляем:
<meta name="robots" content="all" />


Если такой строки нет, ничего страшного, просто идем дальше.

Находим далее:
if ($config['allow_rss']) $metatags .= <<<HTML
 
<link rel="alternate" type="application/rss+xml" title="{$rss_title}" href="{$rss_url}" />
HTML;


ВЫШЕ добавляем:
if ($subaction == 'userinfo' OR
        $subaction == 'allnews' OR
        $subaction == 'newposts' OR
        $do == 'stats' OR
        $do == 'addnews' OR
        $do == 'register' OR
        $do == 'favorites' OR
        $do == 'rules' OR
        $do == 'pm' OR
        $do == 'feedback' OR
        $do == 'lastcomments' OR
        $do == 'lostpassword' OR
        $do == 'search' OR
        $do == 'lastnews' OR
        $do == 'alltags' OR
        $do == 'tags' OR
        $dle_module == 'date') $metatags .= <<<HTML
\n<meta name="robots" content="noindex,nofollow" />
HTML;

Если вы хотите закрыть от индексации страницы пагинации, типа site.ru/page/X/ или site.ru/category/page/X/, тогда необходимо добавить одну строчку:
(intval($_GET['cstart']) > 1 )

В итоге код, приведенный выше преобразуется так:
if ($subaction == 'userinfo' OR
        $subaction == 'allnews' OR
        ...
        $dle_module == 'date' OR
        (intval($_GET['cstart']) > 1 )) $metatags .= <<<HTML
\n<meta name="robots" content="noindex,nofollow" />
HTML;


Добавляем тег rel=”canonical” для страниц просмотра полной новости

Открываем файл /engine/modules/show.full.php и находим:
           } else {
 
                        $full_link = $config['http_home_url'] . "index.php?newsid=" . $row['id'];
                        $print_link = $config['http_home_url'] . "engine/print.php?newsid=" . $row['id'];
                        $short_link = "";
 
                }


ВЫШЕ добавляем:
$canonical = $full_link;


Открываем файл /engine/engine.php и находим:
if ($config['allow_rss']) $metatags .= <<<HTML
 
<link rel="alternate" type="application/rss+xml" title="{$rss_title}" href="{$rss_url}" />
HTML;


НИЖЕ добавляем:
if (isset($canonical)) $metatags .= <<<HTML
\n      <link rel="canonical" href="{$canonical}" />
HTML;


Спасибо за внимание, друзья, оставайтесь на связи и подписывайтесь на новости блога.

Автор: АлаичЪ
Сайт автора: alaev.info
Автор модификации: Дмитрий Арсеньев
Сайт автора модификации: dleseo.ru

РЕКОМЕНДУЕМ ПОЧИТАТЬ


К0ММЕНТАРИИ К СТАТЬЕ Внутренняя Seo оптимизация dle 10.0



  • Написал:
  • 28 сентября 2013 06:28
Enjoy your blog )
  • Написал:
  • 2 октября 2013 07:25
спасибо за блог, подписался на вас) wink winked
  • Написал:
  • 10 октября 2013 19:05
Все вышеперечисленное проделал, спасибо, но есть еще один момент. Подскажите, пожалуйста, как быть с ситуацией, когда пользователь недокопировал несколько последних букв урла. Пример http://dleseo.ru/seodle/141-optimizaciya-zagolovkov-title-v-dle.htm или http://dleseo.ru/seodle/141-optimizaciya-zagolovkov-title-v-dle.h В этом случае отражается контент главной страницы, что приводит к дублям. Неплохо было бы здесь 301 редирект на главную или в крайнем случае 404.
Цитата: Влад
Все вышеперечисленное проделал, спасибо, но есть еще один момент. Подскажите, пожалуйста, как быть с ситуацией, когда пользователь недокопировал несколько последних букв урла. Пример http://dleseo.ru/seodle/141-optimizaciya-zagolovkov-title-v-dle.htm или http://dleseo.ru/seodle/141-optimizaciya-zagolovkov-title-v-dle.h В этом случае отражается контент главной страницы, что приводит к дублям. Неплохо было бы здесь 301 редирект на главную или в крайнем случае 404.


Вообщето он есть, для этого и пишется запись ID перед названием.... Но спасибо проверим!
  • Написал:
  • 16 октября 2013 16:02
Редирект для удаленных или несуществующих новостей на главную

Ну, тут стандартная ситуация и может встретиться на любом сайте. Вы удалили какую-то новость и, понятное дело, будет выдаваться 404 ошибка. Если вас это не устраивает, а именно то, что выдается 404 ошибка, то можно сделать, например, 301-редирект на главную страницу сайта, которая уж точно существует ;)


Переделал его немного под себя и все супер, сделал вместо главной на созданную error.html
Спасибо!
  • Написал:
  • 11 ноября 2013 16:49
Добавляем тег rel=”canonical” для страниц просмотра полной новости

А этот пункт что дает? и можно его проделать в 9.7
Цитата: Admina
Добавляем тег rel=”canonical” для страниц просмотра полной новости

А этот пункт что дает? и можно его проделать в 9.7


Запрещает роботу индексировать полную новость.
Лучше этого не делать, я эксперементировал и и-за этого тега часть новостей выпали из индекса Яндекса.
b
i
u
s
|
left
center
right
|
emo
color
|
hide
quote
translit
Вопрос: Спутник земли
Ответ: