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?

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.


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">

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)

Bien que cela n'empêche pas l' exploration , ce qui semble être l'exigence des PO.
MrWhite
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.