Сайтда катта ўзгариш қилишдан олдин уни алоҳида нусхада синаб кўриш яхши одат. Кўпинча бунинг учун test.example.uz ёки staging.example.uz каби субдомен очилади ва унга асосий сайтнинг тўлиқ нусхаси қўйилади. Муаммо шундаки, қидирув тизимлари бу субдоменни ҳам топади: унга битта ҳавола, sitemap файли ёки браузер кенгайтмаси орқали юборилган манзил кифоя. Натижада Google'да бир хил матнли икки сайт пайдо бўлади, баъзан эса мижоз қидирувдан тугалланмаган тест саҳифасига кириб, эски нархлар ёки "lorem ipsum" матнини кўради.
Нега robots.txt етарли эмас
Кўпчилик биринчи бўлиб robots.txt файлига Disallow: / ёзади. Бу қоида қидирув роботига саҳифаларни ўқимасликни айтади, лекин уларни индексга қўшмасликни кафолатламайди. Агар бошқа жойда тест субдоменига ҳавола бўлса, Google манзилни мазмунсиз ҳолда индексга қўшиши мумкин ва натижаларда "Бу саҳифа ҳақида маълумот мавжуд эмас" деган ёзув билан чиқади. Бундан ҳам муҳими, робот саҳифани ўқий олмагани учун ундаги noindex белгисини ҳам кўрмайди, яъни икки усулни бирга қўллаш бир-бирига халақит беради.
Шунинг учун staging учун ишончли ёндашув икки қатламдан иборат: роботга саҳифани ўқишга рухсат берилади, лекин ҳар бир жавобда "индекслама" деган белги юборилади ёки, ундан ҳам яхшиси, сайт парол билан ёпилади.
Биринчи усул: X-Robots-Tag сарлавҳаси
X-Robots-Tag HTTP сарлавҳаси мета тегнинг сервер даражасидаги муқобили ҳисобланади. Унинг афзаллиги шундаки, у HTML саҳифаларга ҳам, PDF, расм ва бошқа файлларга ҳам ишлайди, шаблонни таҳрирлаш эса талаб қилинмайди. Apache'да бу mod_headers модули орқали staging папкасидаги .htaccess га ёзилади, Nginx'да эса субдоменнинг server блокига қўшилади.
# .htaccess (faqat staging papkasida!)
<IfModule mod_headers.c>
Header set X-Robots-Tag "noindex, nofollow"
</IfModule>
# Nginx: staging.example.uz server bloki
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 # bo'sh bo'lishi kerak
Иккинчи усул: парол билан ҳимоя
Энг ишончли ечим 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 жавобини олгач келади. Субдоменни тасдиқлаш учун DNS'га TXT ёзув қўшиш керак бўлади, буни sayt.uz кабинетидаги домен DNS бўлимидан қилиш мумкин.
Мисол: Намангандаги мактаб сайти
Намангандаги хусусий мактаб янги дизайнни yangi.misol.uz субдоменида икки ой давомида тайёрлади. Шу вақт ичида ўқитувчилардан бири ҳаволани ота-оналар гуруҳига юборди ва бир неча ҳафтадан кейин "қабул" сўзи бўйича қидирувда асосий сайт ўрнига тест нусхаси чиқа бошлади. Дастурчи субдоменга парол қўйди, Search Console орқали тест манзилларини вақтинча олиб ташлади ва ишга тушириш куни базани кўчиргач, асосий сайтда X-Robots-Tag ёки noindex йўқлигини curl билан текширди.
Ишга тушириш олдидан назорат рўйхати
- Асосий домен жавобида
X-Robots-Tagсарлавҳаси йўқлигини текширинг. - Саҳифа кодида
<meta name="robots" content="noindex">қолмаганига ишонч ҳосил қилинг. - WordPress'да "индексламаслик" белгисини ўчиринг.
robots.txtда staging'дан қолганDisallow: /қатори йўқлигини кўринг.- Каноник ҳаволалар (
rel="canonical") ва sitemap ичида staging манзиллари қолмаганини текширинг.