Wie kann ich robots.txt verwenden, um nur Subdomains zu verbieten?

10

Mein Code - Basis wird zwischen mehreren Umgebungen (live, Inszenierung, dev) und Sub-Domains geteilt ( staging.example, dev.exampleusw.) und nur zwei sollten gecrawlt werden dürfen (dh. www.exampleUnd example). Normalerweise würde ich ändern /robots.txtund hinzufügen Disallow: /, aber aufgrund der gemeinsam genutzten Codebasis kann ich nicht ändern, /robots.txtohne alle (Unter-) Domänen zu beeinflussen.

Irgendwelche Ideen, wie man das macht?

Alexus
quelle

Antworten:

13

Sie können eine andere robots.txtDatei basierend auf der Subdomain bereitstellen, über die auf die Site zugegriffen wurde. Eine Möglichkeit, dies in Apache zu tun, besteht darin, die URL mithilfe von mod_rewrite in .htaccess intern neu zu schreiben. Etwas wie:

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

Das Obige besagt, dass für alle Anfragen, bei robots.txtdenen der Host etwas anderes als www.example.comoder ist example.com, die Anfrage dann intern umgeschrieben wird robots-disallow.txt. Und robots-disallow.txtwird dann die Disallow: /Richtlinie enthalten .

Wenn Ihre .htaccess-Datei andere Anweisungen enthält, muss diese Anweisung vor allen Routing-Anweisungen näher oben stehen.

Herr weiß
quelle
Ich dachte an die gleiche Lösung. Ich war mir nicht sicher, ob es da draußen noch etwas anderes gibt, aber am Ende des Tages, wenn es das ist, dann das, was meine Arbeit erledigen wird)
Alexus
1
Wenn beide Subdomains / Hosts auf dieselbe Webspace- / Codebasis verweisen, gibt es im robots.txt- "Standard" nichts, was dies steuern könnte, wenn Sie dies vorschlagen. Der Bot wird einfach eine Anfrage stellen sub.example.com/robots.txt, daher müssten Sie je nach Subdomain etwas tun , um eine andere Antwort zu erhalten. Sie müssen mod_rewrite nicht verwenden, aber es ist eine Technik, die ich schon mehrmals gesehen habe. Wenn robots.txtes dynamisch generiert wird, können Sie die Antwort im serverseitigen Code (z. B. PHP) ändern.
MrWhite
Eine Alternative zur Verwendung robots.txtkönnte darin bestehen, die Indizierung zu verhindern, anstatt sie zu crawlen, indem ein X-Robots-Tag: noindexHTTP-Antwortheader gesendet wird, wenn auf solche Subdomänen zugegriffen wird (was auch in .htaccess erfolgen kann). Obwohl ich denke, dass das Verhindern des Kriechens wahrscheinlich vorzuziehen ist. (?)
MrWhite
1

robots.txt funktioniert nur, wenn es in der Wurzel vorhanden ist.

Sie müssen robots.txtfür jede Subdomain-Website eine separate Website hochladen , von der aus auf sie zugegriffen werden kann http://subdomain.example.com/robots.txt.

Fügen Sie den folgenden Code in hinzu robots.txt

User-agent: *
Disallow: /

Eine andere Möglichkeit besteht darin, <META>auf allen Seiten ein Robots- Tag einzufügen .

<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
Sudip Chatterjee
quelle
3
Im OP heißt es jedoch bereits: "Normalerweise würde ich Änderungen vornehmen /robots.txtund hinzufügen Disallow: /, aber aufgrund der gemeinsam genutzten Codebasis kann ich keine Änderungen vornehmen, /robots.txtohne alle (Unter-) Domänen zu beeinflussen."
MrWhite
0

Ich würde das Meta-Tag von der HTML-Seite entfernen und es abhängig von Ihrer Subdomain dynamisch erstellen. zB verwenden wir Subdomain dev. zur Entwicklung. Im Pageload-Event haben wir also Folgendes:

  ' 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
quelle
Dies verhindert zwar nicht das Crawlen , was jedoch die OP-Anforderung zu sein scheint.
MrWhite