» » Внутренняя Seo оптимизация dle 9.x - 10.1

Ошибка добавление новости
Вы зашли на сайт как незарегистрированный пользователь.
Для добавления новости Вам требуется зарегистрироваться либо войти на сайт под своим именем.
Ошибка добавление вопроса
Вы зашли на сайт как незарегистрированный пользователь.
Для добавления вопроса Вам требуется зарегистрироваться либо войти на сайт под своим именем.

Внутренняя Seo оптимизация dle 9.x - 10.1

 Robot    2014.03.05    DataLife Engine     2214 
Внутренняя Seo оптимизация dle 9.x - 10.1


Здравствуйте уважаемые читатели нашего сайта! Данная статья посвящена seo оптимизации dle сайтов.

Итак вы готовы к внутренней 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> » " . $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);


ЗАМЕНЯЕМ НА:
//разные 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}" />
HTM
L;

Спасибо за внимание, друзья, оставайтесь на связи и подписывайтесь на новости блога.
Другие новости по теме:
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.