Перейти до основного вмісту
Як у Robots.txt закрити піддомени від індексації?

Часом на сайтах стає необхідним закрити від індексації піддомени. Наприклад, при створенні мультирегіональних або мультимовних сайтів не завжди є необхідність попадання піддоменів у пошукову видачу. Найчастіше перед сеошником таке завдання стоїть, коли потрібно для Яндекса створити купу регіональних піддоменів, при цьому для Google, через відмінності регіонального ранжирування, ці піддомени бажано приховати від індексації в Robots.txt через директиву Disallow.

На жаль, директиви, яка дозволяє зробити це в текстовому файлі, не існує, тому довелося вдатися до PHP.

І так, створюємо файл robots.php з приблизно таким змістом:

<?php 
header('Content-type: text/plain');
$subdomain = str_replace('нашдомен.com', '', $_SERVER['HTTP_HOST']);
if ($subdomain !== '') {
echo '
User-agent: googlebot
Disallow: /
';
}
?>
User-agent: *
Disallow: /includes/
Disallow: /misc/
Disallow: /modules/
#інші директиви вашого робота

Sitemap: https://<?php echo $_SERVER['SERVER_NAME']; ?>/sitemap.xml

У цьому прикладі ми задали, що якщо роботс показується на піддомені, то додається директива User-agent: googlebot Disallow: / яка забороняє сайт до індексації в Google. Ви можете встановити значення для окремих User-agent

Також у прикладі налаштовані динамічні Sitemap, тобто показуватиметься саме поточний хост з потрібним піддоменом, або без.

Після того, як файл robots.php залили в кореневу папку сайту, нам потрібно підправити файл .htaccess, де прописуємо наступний рядок:

RewriteRule ^robots.txt$ /robots.php [L,QSA]

Видаляємо текстовий файл robots.txt і перевіряємо працездатність нового роботса. (до речі на деяких хостингах редирект з robots.txt на robots.php працює навпаки, лише за наявності обох у корені сайту, тому видаляти текстовий роботс чи ні, потрібно перевіряти індивідуально)