Привіт, друзі. Скільки разів ви мене питали, як скласти правильний robots.txt для DLE – ось чесно, вже набридли! Вирішив написати пост на цю тему, щоб раз і назавжди виключити всі подібні питання. Хоча, я впевнений, висновки для вас будуть несподіваними 🙂

Коротка суть посту – чим менше файл robots.txt тим краще і якісніше сайт, і це відноситься не тільки до DLE, але взагалі до будь-якого движку або сайту.

Я вам ще раз розповім, чому і для чого потрібен файл robots.txt і директиви в ньому, а так само чому менше директив це показник якості.

Знаєте що таке ідеальний сайт? Це сайт, кожна сторінка якого несе користь для відвідувача і цю сторінку не соромно показати пошуковику, тому що вона йому сподобається і буде високо ранжируватися.

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

Обговорення до даного посту закрито з причини виходу більш зручного і елегантне рішення — модуль DonBot.
DonBot дозволить без правок ядра движка додати необхідні правила, при цьому є кілька рекомендованих налаштувань для досягнення найкращих результатів.
Тим не менш, описані нижче правки залишаються актуальними для всіх версій DLE 9.x, 8.x і 7.x!

Так от ще раз – ідеальний сайт – це коли даремних сторінок немає і закривати нічого. Але CMS, якими б хорошими вони не були, все одно створюють для нас «несподіванки» і доводиться викручуватися. Приходимо до висновку – без robots.txt не обійтися…АЛЕ!

Тимчасово перемкнемося — дивіться на ідеальний robots.txt для DLE

User-agent: *
Disallow: /engine/
Host: site.ru
Sitemap: http://site.ru/sitemap.xml

User-agent: *
Disallow: /engine/
Host: site.ru
Sitemap: http://site.ru/sitemap.xml

Несподівано? Ну так…

Пропоную вам згадати мою аналітичну публікацію про порівняння robots.txt і meta robots — якщо не читали, то прочитайте дуже уважно. Після прочитання висновок буде таким: краще забороняти індексацію сторінок і розділів за допомогою метатега , а не за допомогою robots.txt.

Але раз вже в заголовку сьогоднішнього поста фігурує назва CMS Datalife Engine, то варто впритул перейти на роботу з DLE.

Я вже розповідав про те, як закривати непотрібні сторінки DLE за допомогою мета-тега robots у третій частині seo оптимізації DLE, і сьогодні я трохи повторюся, але додам нових фішок з урахуванням питань в коментарях.

Рішення, яке буде описано нижче підходить абсолютно для всіх версій DLE.

Для отримання результату нам необхідно буде змінити лише один файл /engine/engine.php. Відкриваємо його.

Для DLE 9.3 і нижче (для версій 9.4 і вище цього робити не треба) спершу необхідно знайти наступний рядок і видалити:

<meta name=“robots” content=“all” />

Далі (це вже для всіх версій без винятку) знаходимо рядок:

if ($config[‘allow_rss’]) $metatags .= <<<HTML

if ($config[‘allow_rss’]) $metatags .= <<

ВИЩЕ додаємо код:

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 .= <<;

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 .= <<

Міні-FAQ з питань з коментарів:

— Якщо я закриваю від індексації категорію, будуть новини з цієї категорії індексуватися?
— Так, закриття категорії не закриває публікації, які належать до цієї категорії.

— Якщо мені треба закрити від індексації кілька категорій з id=1,2,3,4,5 який код застосовувати?
— Замість $category_id == ‘X’ треба вказати in_array ($category_id, array (‘1’, ‘2’, ‘3’, ‘4’, ‘5’))

Величезний список варіацій на будь-який смак. Мені здається, я все передбачив, і це закриє 99% будь-яких потреб. Залишився 1% — це потреби вебмайстрів-збоченців 🙂

Отже, давайте я розповім, як тепер всім цим користуватися.

Якщо ви вставите код в його первісному вигляді (в тому в якому я його вище представив), то нічого не станеться крім закриття сторінок буквеного каталогу. Щоб потрібні правила почали працювати, необхідно видалити знак коментування, тобто подвійний слеш на початку рядка «//».

Мій код — це свого роду конструктор, де ви самі вибираєте, що вам потрібно, а що ні, при цьому всі відразу є під рукою – якщо щось знадобилося, зайшли в файл і раскомментировали потрібний рядок або навпаки закомментировали.

Я впевнений – ви розберетеся, як цим користуватися, і вам це сподобається. Головне будьте дуже уважні – раскомментировав не той рядок, ви ризикуєте заборонити доступ пошуковикам до важливої та потрібної інформації.

Так, я вже передбачаю, що будуть питання щодо сторонніх модулів для DLE, не моїх, зрозуміло, так як мої якраз повинні індексуватися, а сторонніх. Щоб заборонити індексацію будь-якого модуля, необхідно буде використовувати конструкцію $do == ‘module’, де module – це назва модуля, яке можна взяти в адмінці. Наприклад, http://site.ru/admin.php?mod=sitemap. Отже, необхідний шматок коду буде таким $do == ‘sitemap’, його треба буде вставити в мою конструкцію і не забути оператор OR наприкінці. І все – справу зроблено!

Так який правильний robots.txt для DLE?

Ось саме такий, який я вказав на початку посту, такий, який містить лише 4 рядки. До речі, можна навіть рядок Disallow: /engine/ виключити, якщо не використовуються редиректи на зовнішні посилання, і замінити на Allow: /. Зрозуміло, це розглядається чистий CMS «з коробки», без ваших проблем, хворої фантазії і сторонніх модулів.

Так що «чистимо» свій robots.txt, впроваджуємо мета-тег robots і радіємо поступового зникнення непотрібних сторінок з додатковою видачі Google (supplemental).

І ще один важливий момент – правки треба буде не забувати вносити відразу ж після чергового оновлення движка.

Тепер ви дізналися, що особисто я вважаю правильним robots.txt для DLE і всі питання по цій темі можете задавати в коментарях, а не де попало. Чекаю ваших запитань, пропозицій та відгуків.

До зв’язку, друзі!

P. S. Ось вам ще парочка бонусних рад:

  • Знайдіть файл шаблону версії для друку print.tpl і відкрийте його. Відразу після вставити
  • Відкрийте файл /engine/skins/default.skin.php і виконайте теж саме.

Перший бонус для того, щоб заборонити індексацію версії для друку, а другий заборона індексації адмінки, бо тупо закривати файл admin.php в robots.txt (а ще тупіший використовувати нестандартне назва файлу адмінки і закривати його в robots.txt).

З повагою, Олександр Алаєв