Jak mogę użyć pliku robots.txt, aby zabronić tylko subdomeny?

10

Moja baza kodu jest podzielony między kilku środowiskach (na żywo, inscenizacja, odchylenie) i subdomen ( staging.example, dev.exampleetc.) i tylko dwa powinny być dopuszczone do przeszukania (tj. www.exampleA example). Zwykle modyfikowałbym /robots.txti dodawał Disallow: /, ale z powodu wspólnej bazy kodu nie mogę modyfikować /robots.txtbez wpływu na wszystkie (pod) domeny.

Wszelkie pomysły, jak to zrobić?

Alexus
źródło

Odpowiedzi:

13

Możesz podać inny robots.txtplik na podstawie poddomeny, przez którą uzyskano dostęp do witryny. Jednym ze sposobów zrobienia tego w Apache jest wewnętrzne przepisanie adresu URL za pomocą mod_rewrite w .htaccess. Coś jak:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www\.)?example\.com$ [NC]
RewriteRule ^robots\.txt$ robots-disallow.txt [L]

Powyższe stwierdza, że ​​dla wszystkich żądań, w robots.txtktórych host jest inny niż www.example.comlub example.com, następnie wewnętrznie przepisz żądanie do robots-disallow.txt. I robots-disallow.txtwtedy będzie zawierać Disallow: /dyrektywę.

Jeśli w pliku .htaccess znajdują się inne dyrektywy, ta dyrektywa będzie musiała znajdować się bliżej góry, przed wszelkimi dyrektywami routingu.

MrWhite
źródło
Myślałem o tym samym rozwiązaniu. Nie byłem pewien, czy jest tam coś jeszcze, ale pod koniec dnia, jeśli to jest to, co zrobi moją pracę)
Alex
1
Jeśli obie poddomeny / hosty wskazują na tę samą bazę przestrzeni / kodu, to w „standardzie” pliku robots.txt nie ma nic, co mogłoby to kontrolować, jeśli to właśnie sugerujesz. Bot po prostu poprosi sub.example.com/robots.txt, więc musisz zrobić coś, aby uzyskać inną odpowiedź w zależności od subdomeny. Nie musisz używać mod_rewrite, ale jest to technika, którą widziałem kilka razy. Jeśli robots.txtjest generowany dynamicznie, możesz zmienić odpowiedź w kodzie serwera (np. PHP).
MrWhite
Alternatywą dla użycia robots.txtmoże być zapobieganie indeksowaniu zamiast przeszukiwania poprzez wysyłanie X-Robots-Tag: noindexnagłówka odpowiedzi HTTP, gdy dostęp do takich subdomen jest możliwy (można to również zrobić w .htaccess). Chociaż myślę, że lepiej zapobiegać indeksowaniu. (?)
MrWhite
1

robots.txt działa tylko wtedy, gdy jest obecny w katalogu głównym.

Musisz przesłać osobny robots.txtdla każdej witryny subdomeny, z której można uzyskać dostęp http://subdomain.example.com/robots.txt.

Dodaj poniższy kod do robots.txt

User-agent: *
Disallow: /

Innym sposobem jest wstawienie <META>tagu Robots na wszystkich stronach.

<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
Sudip Chatterjee
źródło
3
Ale OP już stwierdza: „Normalnie modyfikowałbym /robots.txti dodawał Disallow: /, ale ze względu na wspólną bazę kodu nie mogę modyfikować /robots.txtbez wpływu na wszystkie (pod) domeny”.
MrWhite
0

Usuwałbym metatag ze strony HTML i dynamicznie budowałem go w zależności od subdomeny. np. używamy dev subdomeny. dla rozwoju. Więc w przypadku pageload mamy to:

  ' Check if domain is DEV or PROD and set robots accordingly meta tag in head
  Dim metatag As HtmlMeta = New HtmlMeta
  metatag.Attributes.Add("name", "robots")
  If CurrentURL.Contains("dev.advertise-it") Then
    metatag.Attributes.Add("content", "NOINDEX, NOFOLLOW")
  Else
    metatag.Attributes.Add("content", "INDEX, FOLLOW")
  End If
  Page.Header.Controls.Add(metatag)
Rudzik
źródło
Chociaż nie zapobiega to indeksowaniu , które wydaje się być wymogiem PO.
MrWhite