3DM-студия
» » » Внутренняя SEO оптимизация CMS Dle 9.8

Внутренняя 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

Готова !


Скачивание доступно только для зарегистрированных
НАШИ НОВОСТИ
Опубликовано 04 апрель 2014
Представляю вашему вниманию шаблон онлайн кинотеатра с глубокой настройкой под свои нужны OST-ARENA.RU Читать далее...
Опубликовано 18 март 2014
Представляю вашему вниманию, адаптивный новостной шаблон Reades News. Адаптивный дизайн подразумевает, что шаблон будет одинаково корректно отображаться во всех устройствах. Шаблон отлично подойдет для медийных новостей и не только. Обязательно посмотрите видеозапись работы Читать далее...
Опубликовано 16 март 2014
Дизайн Zerotheme, адаптирован для DLE 10.1 by Yurets. Шаблон zBoomMusic позиционируется как шаблон для музыкального портала или музыкального блога. Вверху шаблона расположен слайдер, под слайдером Топ новостей, далее последние добавленные новости. Читать далее...