¿Cómo puedo usar robots.txt para no permitir solo el subdominio?

10

Mi base de código se comparte entre varios entornos (en vivo, puesta en escena, dev) y subdominios ( staging.example, dev.example, etc.) y sólo dos se debe permitir que se rastree (es decir. www.example, Y example). Normalmente modificaría /robots.txty agregaría Disallow: /, pero debido a la base de código compartido no puedo modificar /robots.txtsin afectar a todos los (sub) dominios.

¿Alguna idea de cómo hacerlo?

alexus
fuente

Respuestas:

13

Puede servir un robots.txtarchivo diferente según el subdominio a través del cual se haya accedido al sitio. Una forma de hacerlo en Apache es reescribiendo internamente la URL usando mod_rewrite en .htaccess. Algo como:

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

Lo anterior establece que para todas las solicitudes en las robots.txtque el host no sea www.example.como example.com, reescriba internamente la solicitud robots-disallow.txt. Y robots-disallow.txtluego contendrá la Disallow: /directiva.

Si tiene otras directivas en su archivo .htaccess, entonces esta directiva deberá estar más cerca de la parte superior, antes de cualquier directiva de enrutamiento.

Señor White
fuente
Estaba pensando en la misma solución. No estaba seguro de si había algo más, pero al final del día, si eso es todo, entonces lo que hará mi trabajo)
alexus
1
Si ambos subdominios / hosts apuntan al mismo espacio web / base de código, entonces no hay nada en el "estándar" de robots.txt que pueda controlar esto, si eso es lo que está sugiriendo. El bot simplemente solicitará sub.example.com/robots.txt, por lo que deberá hacer algo para responder de manera diferente según el subdominio. No necesita usar mod_rewrite, pero es una técnica que he visto usar varias veces. Si robots.txtse genera dinámicamente, puede cambiar la respuesta en el código del lado del servidor (por ejemplo, PHP).
MrWhite
Una alternativa al uso robots.txtpodría ser evitar la indexación, en lugar de rastrear, enviando un X-Robots-Tag: noindexencabezado de respuesta HTTP cuando se accede a dichos subdominios (que también se puede hacer en .htaccess). Aunque creo que es preferible evitar el rastreo. (?)
MrWhite
1

robots.txt funciona solo si está presente en la raíz.

Debe cargar un robots.txtsitio web separado para cada subdominio, desde donde se puede acceder http://subdomain.example.com/robots.txt.

Agregue el código a continuación en robots.txt

User-agent: *
Disallow: /

Y otra forma es insertar una <META>etiqueta de Robots en todas las páginas.

<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
Sudip Chatterjee
fuente
3
Pero el OP ya dice: "Normalmente modificaría /robots.txty agregaría Disallow: /, pero debido a la base de código compartido no puedo modificar /robots.txtsin afectar a todos los (sub) dominios".
MrWhite
0

Quitaría la metaetiqueta de la página html y la construiría dinámicamente dependiendo de su subdominio. por ejemplo, usamos subdominio dev. Para desarrollo. Entonces, en el evento de carga de página tenemos esto:

  ' 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
fuente
Aunque esto no evita el rastreo , lo que parece ser el requisito de los OP.
MrWhite