Comment puis-je utiliser robots.txt pour interdire uniquement le sous-domaine?

10

Ma base de code est partagé entre plusieurs environnements ( en direct, la mise en scène, dev) et sous-domaines ( staging.example, dev.example, etc.) et seulement deux devraient être autorisés à être rampé (ie. www.exampleEt example). Normalement, je modifierais /robots.txtet ajouterais Disallow: /, mais en raison de la base de code partagée, je ne peux pas modifier /robots.txtsans affecter tous les (sous) domaines.

Des idées sur la façon de procéder?

alexus
la source

Réponses:

13

Vous pouvez servir un robots.txtfichier différent en fonction du sous-domaine via lequel le site a été consulté. Une façon de le faire sur Apache est de réécrire l'URL en interne en utilisant mod_rewrite dans .htaccess. Quelque chose comme:

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

Ce qui précède indique que pour toutes les demandes vers robots.txtlesquelles l'hôte est autre chose que www.example.comou example.com, réécrivez en interne la demande robots-disallow.txt. Et robots-disallow.txtcontiendra alors la Disallow: /directive.

Si vous avez d'autres directives dans votre fichier .htaccess, cette directive devra être plus proche du haut, avant toute directive de routage.

MrWhite
la source
Je pensais à la même solution. Je ne savais pas s'il y avait autre chose là-bas, mais à la fin de la journée, si c'est ça, alors qu'est-ce qui fera mon travail)
alexus
1
Si les deux sous-domaines / hôtes pointent vers le même espace Web / base de code, rien dans le "standard" robots.txt ne peut contrôler cela, si c'est ce que vous proposez. Le bot va simplement demander sub.example.com/robots.txt, vous devrez donc faire quelque chose pour servir une réponse différente en fonction du sous-domaine. Vous n'avez pas besoin d'utiliser mod_rewrite, mais c'est une technique que j'ai vue utilisée plusieurs fois. Si robots.txtest généré dynamiquement, vous pouvez modifier la réponse dans le code côté serveur (par exemple, PHP).
MrWhite
Une alternative à l'utilisation robots.txtpourrait être d'empêcher l'indexation, plutôt que l'analyse, en envoyant un X-Robots-Tag: noindexen-tête de réponse HTTP lorsque de tels sous-domaines sont accédés (ce qui pourrait également être fait en .htaccess). Bien que je pense que la prévention de l'exploration est probablement préférable. (?)
MrWhite
1

robots.txt ne fonctionne que s'il est présent dans la racine.

Vous devez en télécharger un distinct robots.txtpour chaque site Web de sous-domaine, à partir duquel vous pouvez y accéder http://subdomain.example.com/robots.txt.

Ajoutez le code ci-dessous dans robots.txt

User-agent: *
Disallow: /

Et une autre façon est d'insérer une <META>balise Robots dans toutes les pages.

<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
Sudip Chatterjee
la source
3
Mais l'OP déclare déjà: "Normalement, je modifierais /robots.txtet ajouterais Disallow: /, mais en raison de la base de code partagée, je ne peux pas modifier /robots.txtsans affecter tous les (sous) domaines."
MrWhite
0

Je supprimerais la balise meta de la page html et la créerais dynamiquement en fonction de votre sous-domaine. par exemple, nous utilisons le sous-domaine dev. Pour le developpement. Donc, dans l'événement pageload, nous avons ceci:

  ' 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
la source
Bien que cela n'empêche pas l' exploration , ce qui semble être l'exigence des PO.
MrWhite