Управляем метатегом robots в DLE
- Хаки DLE
В DataLife Engine 9.7 разработчик DLE снова включил метатег "robots" в дистрибутив скрипта, используя новый функционал и переменную для управления этим метатегом в версии DLE 9.7 мы расширим использование метатега "robots" для служебных страниц, страниц ошибок и страниц с дублирующим контентом.
А теперь для чего это нужно?
Вы знаете, что такое robots.txt, если да, то подробные пояснения излишни, скажу кратко, что мы запретим индексирование служебных страниц и страниц на которых дублируется контент более красивым способом, чем robots.txt, но таким же понятным для поисковых ботов.
Если же вы не знаете что такое и robots.txt и для чего он нужен, то вам лучше не читать пока данную статью, а начать с азов для вебмастера.
И так начнём:
1. Реализуем вывод метатега robots в определенных разделах сайта:
Открываем файл /engine/engine.php
Найти:
else $disable_index = "";
Заменить на(приведённый ниже массив рекомендован мной и его состав, может быть подобран и изменён под свои цели*):
elseif (
$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 == 'tags' OR /* Вывод новостей по тегу */
$do == 'xfsearch' OR /* Вывод новостей новостей по доп. полям */
$subaction == 'allnews' OR /* Вывод всех новостей пользователя */
$subaction == 'newposts' OR /* Вывод непрочитанных новостей для пользователя */
$subaction == 'userinfo' OR /* Просмотр профиля пользователя */
$dle_module == 'date' OR /* Вывод архива новостей за год/месяц/день */
(intval($_GET['cstart']) > 1 ) OR /* Любые страницы пагинации */
$catalog != '' /* Просмотр каталога по буквенному идентификатору */
) $disable_index = "\n<meta name=\"robots\" content=\"noindex\" />"; else $disable_index = "";
Заменяя, удаляя или добавляя строки в массиве из списка возможных вариантов приведённого ниже, настройте запрет индексации под свои цели.
P.S. Описание возможных вариантов самому составлять было лень, взял его у Алича(alaev.info)
2. Реализуем вывод метатега robots на несуществующих и удалённых страницах:
(тут есть нюанс для роботов при ответе 404, а не 200, но всё же, есть причины, для работы с сервисами)
Открываем файл /engine/modules/show.full.php
Найти:
@header( "HTTP/1.0 404 Not Found" );
Добавить ниже:
$disable_index = 1;
Открываем файл /engine/modules/static.php
Найти:
@header( "HTTP/1.0 404 Not Found" );
Добавить ниже:
$disable_index = 1;
Открываем файл /engine/modules/show.short.php
Найти, Внимание! (3 раза):
msgbox( $lang['all_err_1'], $lang['news_err_27'] );
И Внимание! ВЫШЕ добавить:
$disable_index = 1;
3. Реализуем вывод метатега robots с его строгим значением на страницах печати:
Открываем файлы шаблона версии для печати /templates/имя вашего шаблона/print.tpl и /templates/имя вашего шаблона/static_print.tpl
Найти:
<head>
Добавить ниже:
<meta name="robots" content="noindex" />
3. Реализуем вывод метатега robots с его строгим значением на страницах админки:
Открываем файл /engine/skins/default.skin.php
Найти:
<head>
Добавить ниже:
<meta name="robots" content="noindex,nofollow" />
(i) Внимание! Если вы продаёте ссылки с вашего сайта, особенно в автоматическом режиме через ссылочные биржи, то прежде чем применить данную модификацию проверьте не закроете ли вы от индексирования те страницы, с которых планируете продавать ссылки.
Кроме того, манипулируя метатегом "robots" не забывайте, что возможно у вас имеется robots.txt и в нём тоже созданы правила, а робот поисковой системы при нахождении противоречий между метатегом и файлом выполнить наиболее строгое правило(запрет). Правильней будет удалить в файле robots.txt дублирующие правила, в итоге вы получите практически идеальный robots.txt вида:
User-agent: *
Disallow: /engine/go.php
Disallow: /engine/download.php
Disallow: /*?*
Sitemap: http://site.ru/sitemap.xml
Host: site.ru
Данная статья актуальна для DataLife Engine v.9.7
Автор статьи: webseolife.ru
P.S: история создания данного хака...
Мы работали над управлением метатегом в DLE давно, но первой реально толчком для функциональной версии первой нашей публикации послужил хак MSW под названием "DLE - 404 Not Found - noindex", на его основе мы реализовали управление метатегом "robots" и опубликовали на теперь уже бывшем нашем проекте DLEPro в своей статье об оптимизации. Позже мы развили реализацию и создали модуль MetaRobots в двух версиях, в котором уже использован массив с переменной $do, $dle_module, с изменяемыми из админки значениями, этот модуль был выпущен после удаления разработчиком из DLE 9.4 этого метатега.
Ну и наконец после появления переменной $disable_index управляющей метатегом "robots" в DLE 9.7 мы создали данный хак.
... и теперь зачем написана история создания нами модификации.
После публикации на провебе мы получили в свой адрес нелестное высказывание от некоего блогера Алаича, что якобы украли у него реализацию, хотя на самом деле всё выглядит наоборот. Он взял реализацию вывода метатега у MSW даже не упоминув об этом, затем используя мануал по DLE добавил варианты страниц вывода метатега и присвоил авторство всего этого себе. Мы о том, что взяли у него только описание переменных указали в своих публикациях.
Все наши реализации опубликованы намного ранее тех, что на эту тему публиковал Алаич. Ключевое в данной нашей реализации, это использование функционала DLE, а именно новой переменной $disable_index.
Наши реализации похожи только вариантами страниц вывода и это ясно программистам и опытным пользователям DLE, но без этих вариантов нельзя и они и существуют для вывода инфы и описаны разработчиком DLE, но то что по количеству кода сами варианты это 90% хака неопытных пользователей вводит в заблуждение, о том что реализации одинаковы.
Поэтому, если бы я опубликовал вывод массива как образец в одном варианте:
elseif (
$do == 'addnews'
) $disable_index = "\n<meta name=\"robots\" content=\"noindex\" />"; else $disable_index = "";
то было бы ясно, что наша реализация совершенно отлична от реализации Алаича, не говоря о том, что мы вообще первыми это реализовали.
Но так как хак рассчитан на широкую аудиторию пользователей и носит по содержанию управляемых страниц рекомендательный характер, мы привели рекомендуемый массив:
elseif (
$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 == 'tags' OR /* Вывод новостей по тегу */
$do == 'xfsearch' OR /* Вывод новостей новостей по доп. полям */
$subaction == 'allnews' OR /* Вывод всех новостей пользователя */
$subaction == 'newposts' OR /* Вывод непрочитанных новостей для пользователя */
$subaction == 'userinfo' OR /* Просмотр профиля пользователя */
$dle_module == 'date' OR /* Вывод архива новостей за год/месяц/день */
(intval($_GET['cstart']) > 1 ) OR /* Любые страницы пагинации */
$catalog != '' /* Просмотр каталога по буквенному идентификатору */
) $disable_index = "\n<meta name=\"robots\" content=\"noindex\" />"; else $disable_index = "";
и вот именно логическим вариантом перечисления страниц вывода он и похож на реализацию Алаича из которой мы взяли только описание(то что закомментировано), например:
/* Вывод новостей новостей по доп. полям */
о чём и указали в статье.
Ключевые слова по теме Управляем метатегом robots в DLE: индексирование сайта, DLE, управляем метатегом robots