Como posso usar o robots.txt para proibir apenas subdomínios?

10

Minha base de código é compartilhado entre vários ambientes (ao vivo, estadiamento, dev) e sub-domínios ( staging.example, dev.example, etc.) e apenas dois devem ser autorizados a ser rastreado (ie. www.exampleE example). Normalmente eu modificaria /robots.txte adicionaria Disallow: /, mas devido à base de código compartilhada, não posso modificar /robots.txtsem afetar todos os (sub) domínios.

Alguma idéia de como fazer isso?

alexus
fonte

Respostas:

13

Você pode servir um robots.txtarquivo diferente com base no subdomínio pelo qual o site foi acessado. Uma maneira de fazer isso no Apache é reescrever internamente a URL usando mod_rewrite em .htaccess. Algo como:

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

O acima afirma que, para todas as solicitações para robots.txtonde o host é diferente de www.example.comou example.com, reescreva internamente a solicitação para robots-disallow.txt. E robots-disallow.txtentão conterá a Disallow: /diretiva.

Se você tiver outras diretivas em seu arquivo .htaccess, esta diretiva precisará estar mais próxima da parte superior, antes de qualquer diretiva de roteamento.

Sr. White
fonte
Eu estava pensando na mesma solução. Eu não tinha certeza se há algo mais lá fora, mas no final do dia, se é isso, então, que o que se meu trabalho feito)
alexus
11
Se ambos os subdomínios / hosts apontarem para o mesmo espaço na web / base de código, não há nada no "padrão" do robots.txt que possa controlar isso, se é isso que você está sugerindo. O bot simplesmente solicitará sub.example.com/robots.txt, portanto, você precisará fazer algo para fornecer uma resposta diferente, dependendo do subdomínio. Você não precisa usar o mod_rewrite, mas é uma técnica que já vi usada várias vezes. Se robots.txtfor gerado dinamicamente, você poderá alterar a resposta no código do servidor (por exemplo, PHP).
precisa saber é o seguinte
Uma alternativa ao uso robots.txtpode ser impedir a indexação, em vez de rastrear, enviando um X-Robots-Tag: noindexcabeçalho de resposta HTTP quando esses subdomínios forem acessados ​​(o que também pode ser feito em .htaccess). Embora eu ache que prevenir o rastreamento é provavelmente preferível. (?)
MrWhite 18/08/16
1

robots.txt funciona apenas se estiver presente na raiz.

Você precisa fazer o upload de um separado robots.txtpara cada site de subdomínio, de onde ele pode ser acessado http://subdomain.example.com/robots.txt.

Adicione o código abaixo em para robots.txt

User-agent: *
Disallow: /

E outra maneira é inserir uma <META>tag Robots em todas as páginas.

<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
Sudip Chatterjee
fonte
3
Mas o OP já declara: "Normalmente eu modificaria /robots.txte adicionaria Disallow: /, mas devido à base de código compartilhada, não posso modificar /robots.txtsem afetar todos os (sub) domínios".
precisa saber é o seguinte
0

Eu removia a metatag da página html e a criava dinamicamente, dependendo do seu subdomínio. por exemplo, usamos o subdomínio dev. para desenvolvimento. Portanto, no evento pageload, temos o seguinte:

  ' 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)
Robin
fonte
Embora isso não impeça o rastreamento , o que parece ser o requisito de OPs.
MrWhite