🙈
Хостинг

Staging-поддомен: как правильно скрыть тестовый сайт от Google

09.11.2026
← Все статьи

Перед крупными изменениями сайт полезно проверить на отдельной копии. Обычно для этого создают поддомен вроде test.example.uz или staging.example.uz и кладут туда полную копию основного сайта. Проблема в том, что поисковые системы находят и этот поддомен: достаточно одной ссылки, файла sitemap или адреса, отправленного через браузерное расширение. В итоге в Google появляются два сайта с одинаковым текстом, а иногда клиент из поиска попадает на недоделанную тестовую страницу со старыми ценами или текстом «lorem ipsum».

Почему robots.txt недостаточно

Первое, что делают многие, — пишут в robots.txt строку Disallow: /. Это правило запрещает роботу сканировать страницы, но не гарантирует, что они не попадут в индекс. Если где-то есть ссылка на тестовый поддомен, Google может добавить адрес в индекс без содержимого, и в результатах он появится с пометкой о том, что информация о странице недоступна. Ещё важнее, что робот, не прочитав страницу, не увидит и её тег noindex, то есть совместное использование этих двух способов только мешает.

Поэтому надёжный подход для staging состоит из двух слоёв: роботу разрешают читать страницы, но в каждом ответе передают сигнал «не индексировать» или, что ещё лучше, закрывают сайт паролем.

Способ первый: заголовок X-Robots-Tag

HTTP-заголовок X-Robots-Tag — серверный аналог мета-тега robots. Его плюс в том, что он работает не только для HTML-страниц, но и для PDF, изображений и других файлов, а шаблоны редактировать не нужно. В Apache он прописывается через модуль mod_headers в .htaccess папки staging, в Nginx — в блоке server поддомена.

# .htaccess (только в папке staging!)
<IfModule mod_headers.c>
    Header set X-Robots-Tag "noindex, nofollow"
</IfModule>

# Nginx: блок server для staging.example.uz
add_header X-Robots-Tag "noindex, nofollow" always;

Проверить работу настройки можно командой curl -I: среди заголовков ответа должна быть строка X-Robots-Tag: noindex, nofollow. Обязательно проверьте и ответ основного домена — правило, записанное не в ту папку, может выкинуть из поиска основной сайт.

curl -sI https://staging.example.uz | grep -i x-robots
curl -sI https://example.uz | grep -i x-robots   # должно быть пусто

Способ второй: защита паролем

Самое надёжное решение — закрыть staging паролем. При включённом HTTP Basic Auth робот вместо страницы получает ответ 401 и ничего не может проиндексировать, а посторонние не видят недоделанных страниц. Файл паролей создаётся утилитой htpasswd, хранить его лучше вне папки сайта.

htpasswd -c /home/user/.htpasswd_staging tester

# .htaccess (Apache)
AuthType Basic
AuthName "Staging"
AuthUserFile /home/user/.htpasswd_staging
Require valid-user

# Nginx
auth_basic "Staging";
auth_basic_user_file /etc/nginx/.htpasswd_staging;
location /.well-known/acme-challenge/ { auth_basic off; }

Обратите внимание на последнюю строку: при проверке сертификата Let's Encrypt по HTTP проверяющий сервер не знает пароля, поэтому путь .well-known должен оставаться открытым, иначе SSL может перестать продлеваться. Если staging должен принимать обратные запросы от платёжной системы или внешнего API (webhook), для них тоже понадобится отдельное исключение.

Настройки WordPress и других CMS

В WordPress в разделе «Настройки → Чтение» есть флажок, который просит поисковые системы не индексировать сайт. Он добавляет на страницы мета-тег noindex и полезен как дополнительный слой защиты staging. Но этот флажок влияет только на страницы, которые генерирует WordPress, и хранится в базе данных, поэтому при переносе базы со staging на рабочий сайт он переезжает вместе с ней. Именно поэтому многие команды через несколько недель после запуска ищут, куда сайт исчез из поиска.

Если сайт уже попал в индекс

Если тестовый поддомен уже виден в результатах Google, сначала примените один из способов выше, а затем подтвердите поддомен как отдельный ресурс в Google Search Console. Инструмент «Удаления» (Removals) временно скрывает страницы из выдачи, а постоянный результат наступает, когда робот повторно посетит страницы и получит noindex или ответ 401. Для подтверждения поддомена нужно добавить TXT-запись в DNS — это можно сделать в разделе DNS домена в кабинете sayt.uz.

Пример: сайт школы в Намангане

Частная школа в Намангане два месяца готовила новый дизайн на поддомене yangi.misol.uz. За это время один из учителей отправил ссылку в родительский чат, и через несколько недель по запросу о приёме в поиске вместо основного сайта стала показываться тестовая копия. Разработчик закрыл поддомен паролем, временно удалил тестовые адреса через Search Console, а в день запуска, перенеся базу, проверил через curl, что на основном сайте нет ни X-Robots-Tag, ни noindex.

Чек-лист перед запуском

Похожие статьи

🔁 Как отключить WP-Cron и перевести задачи на настоящий cron сервера 🤖 Python-бот 24/7: запуск через systemd и PM2 🧠 Нехватка памяти (OOM): почему завершаются процессы PHP и Python 🧠 «Allowed memory size exhausted»: ошибка памяти PHP и как её правильно решить
🌐 Язык
🇺🇿 O'zbek 🇺🇿 Ўзбек 🇷🇺 Русский ✓ 🇬🇧 English