Внутренняя SEO оптимизация CMS Dle 9.8

Внутренняя SEO оптимизация CMS Dle 9.8


Статья о внутренней оптимизации движка Dle.
При этом использованы и протестированы те материалы, которые применимы и работают только в Dle 9.8 .

1. Склейка зеркал - выбираем главное зеркало 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 заменить на свой домен)
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 заменить на свой домен)
RewriteCond %{HTTP_HOST} ^site\.ru$ [NC]
RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
### END Определяем главное зеркало

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

2. Убираем 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]

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

3. Склеиваем адреса страниц /page/1/ с основными адресами для главной страницы и категорий.

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

Установка:
Открываем файл .htaccess, который находится в корне сайта (это там, где лежит основной index.php) и находим (см.пункт 1 исправлений):
### 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/ на конце, будет осуществляться редиректить на основную страницу.

4. Редирект с несуществующих страниц пагинации на правильные и существующие.

Какие проблемы решаем:
Возьмем вполне реальную ситуацию – по какой-то причине вы решили изменить количество новостей, выводимых на главной странице или страницах категорий. Как случилось у меня: редизайн сайта; структура страниц полностью поменялась; было решено выводить больше кратких анонсов новостей на каждой странице (было 7, стало 10). Итог был следующим — в панели вебмастера появилось много страниц с 404 ошибками. Простая арифметика, было на сайте 1000 новостей, на каждой странице выводилось по 7 анонсов, следовательно, только на главной у нас получается 1000/7=142 страницы пагинации. После изменений страниц стало ровно 100. В итоге 42 страницы просто пропали. А если возьмем еще категории, то несуществующих страниц уже сотня-две. Это плохо, некрасиво и вообще не тру.

Установка:
Открываем файл /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/.

5. Редирект с разделов или категорий, которых больше не существует, на главную страницу.

Какие проблемы решаем:
Опять же пример из жизни: вы решили поменять структуру сайта или просто удалили какие-то категории за ненадобностью, следовательно, эти страницы перестанут существовать, а ссылки на них могут где-то остаться. Например, у меня когда-то были блоги для пользователей, доступные по адресу site.ru/blog/, а в них шло деление на пользователей, вот так site.ru/blog/user1/, site.ru/blog/user2/ и т.д. Уже много лет как я снес эти блоги за ненадобностью, а ссылки на них и ошибки в панели вебмастера живут.

Установка:
Открываем файл /engine/engine.php и находим:
if (!$category_id) $category_id = 'not detected';

Заменяем на:
//решение проблемы с категориями, которых не существует
if ($config['allow_alt_url'] == "yes" AND ! $category_id AND $view_template != "rss") {
header("HTTP/1.0 301 Moved Permanently");
header("Location: {$config['http_home_url']}");
die("Redirect");
}
//решение проблемы с категориями, которых не существует

Теперь все категории или каталоги, которые не существуют и не имеют своего id (проверка на существование идет именно по id) будут редиректиться на главную страницу.

6. Редирект для удаленных или несуществующих новостей на главную.

Какие проблемы решаем:
Ну, тут стандартная ситуация и может встретиться на любом сайте. Вы удалили какую-то новость и, понятное дело, будет выдаваться 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 редирект на главную, если новость не найдена/не существует

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

7. Запрещаем индексацию разделов сайта при помощи мета-тега robots.

Какие проблемы решаем:
Итак, помните я говорил, что лучше запрещать индексацию страниц и разделов при помощи метатега , а не при помощи robots.txt. А сейчас я расскажу, как можно реализовать вывод этого самого метатега в движке DLE в определенных разделах сайта.

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


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

Находим далее:
if ($config['allow_rss']) $metatags .= <<<HTML;

Добавляем выше:
if (
//$do == 'addnews' OR /* Страница добавления новости с сайта */
//$do == 'alltags' OR /* Страница просмотра списка тегов */
//$do == 'feedback' OR /* Страница формы обратной связи */
//$do == 'favorites' OR /* Страницы закладок пользователей */
//$do == 'lastcomments' OR /* Страница просмотра всех последних комментариев на сайте, в т.ч. комментариев отдельного пользователя */
//$do == 'lastnews' OR /* Страница просмотра всех последних новостей */
//$do == 'lostpassword' OR /* Страница восстановления пароля */
//$do == 'pm' OR /* Страницы личных сообщений пользователей */
//$do == 'register' OR /* Страница регистрации нового пользователя */
//$do == 'rules' OR /* Страница правил сайта */
//$do == 'stats' OR /* Страница статистики сайта */
//$do == 'search' OR /* Страница поиска и результатов поиска */
//$do == 'static' OR /* Все статические страницы */
//$do == 'tags' OR /* Просмотр новостей по тегу */
//$do == 'xfsearch' OR /* Просмотр новостей новостей по доп. полям */
//$subaction == 'allnews' OR /* Просмотр всех новостей пользователя */
//$subaction == 'newposts' OR /* Просмотр непрочитанных новостей для пользователя */
//$subaction == 'showfull' OR /* Просмотр полной новости */
//$subaction == 'userinfo' OR /* Просмотр профиля пользователя */
//$dle_module == 'date' OR /* Просмотр архива новостей за год/месяц/день. Заменяет собой сразу все три следующие строки */
//($year != '' and $month == '' and $day == '') OR /* Просмотр архива новостей за год */
//($year != '' and $month != '' and $day == '') OR /* Просмотр архива новостей за месяц */
//($year != '' and $month != '' and $day != '' and $subaction == '') OR /* Просмотр архива новостей за день */
//(intval($_GET['cstart']) > 1 ) OR /* Любые страницы пагинации */
//($dle_module == 'main' and (intval($_GET['cstart']) > 1)) OR /* Страницы пагинации для главной страницы */
//($do == 'cat' and $category != '' and $subaction == '' and (intval($_GET['cstart']) > 1)) OR /* Страницы пагинации только для категорий */
//($do == 'cat' and $category != '' and $subaction == '') OR /* Просмотр любой категории */
//($do == 'cat' and $category_id == 'X' and $subaction == '') OR /* Просмотр определенной категории. X заменить на id категории */
$catalog != '' /* Просмотр каталога по буквенному идентификатору */
) $metatags .= <<<HTML
\n<meta name="robots" content="noindex,nofollow" />
HTML;

*Чтобы задействовать определенное правило, следует удалить впереди символ //
* Самый важный момент — при закрытии от индексации страниц описанным методом, необходимо убрать запрещающие правила в robots.txt для страниц и разделов, которые мы закрыли при помощи мета-тага. Иначе никакого смысла не будет.

На свое усмотрение вы можете из приведенного мною кода убрать какие-то части, разделы, которые конкретно для вашего сайта закрывать от индексации не требуется. Так что, пожалуйста, будьте внимательнее.

8. Правильный robots.txt для DLE – какой он?

Какие проблемы решаем:
Краткая суть поста – чем меньше файл robots.txt тем лучше и качественнее сайт, и это относится не только к DLE, но вообще к любому движку или сайту.

Знаете что такое идеальный сайт? Это сайт, каждая страница которого несет пользу для посетителя и эту страницу не стыдно показать поисковику, потому что она ему понравится и будет высоко ранжироваться.

А для чего придумали robots.txt? Для того чтобы указывать поисковику какие страницы посещать и индексировать можно, а какие нельзя. Закрывая от индексации какие-то страницы (или даже разделы) вы тем самым признаете, что эти страницы некачественные или ненужные по различным причинам. Чаще всего запрет используется для исключения дублей страниц и технической информации. К сожалению, реальность такова, что сегодня 99% сайтов имеющих файл роботс закрывают с его помощью как раз такие страницы.

Так вот еще раз – идеальный сайт – это когда бесполезных страниц нет и закрывать нечего. Но CMS, какими бы классными они не были, все равно создают для нас «неожиданности» и приходится выкручиваться. Приходим к выводу – без robots.txt не обойтись.

Идеальный robots.txt для DLE:
User-agent: *
Disallow: /engine/
Host: site.ru
Sitemap: http://site.ru/sitemap.xml

Готова !

Добавить комментарий

Нам важно знать ваше мнение. Оставьте свой отзыв или ответ

Комментариев 0