Внутренняя Seo оптимизация CMS Dle 9.8 » Techno-Co — Всё для вебмастера, для создание сайтов с нуля. {title}

Статья о внутренней оптимизации движка 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, находим бесполезную строку и удаляем: Если такой строки нет, ничего страшного, просто идем дальше.Находим далее:

if ($config['allow_rss']) $metatags .=  1)) OR /* Страницы пагинации только для категорий */
        //($do == 'cat' and $category != '' and $subaction == '') OR /* Просмотр любой категории */
        //($do == 'cat' and $category_id == 'X' and $subaction == '') OR /* Просмотр определенной категории. X заменить на id категории */
        $catalog != '' /* Просмотр каталога по буквенному идентификатору */
        ) $metatags .=