web-dev-qa-db-ja.com

robots.txtを使用してサブドメインのみを禁止するにはどうすればよいですか?

私のコードベースは複数の環境(ライブ、ステージング、開発)とサブドメイン(staging.exampledev.exampleなど)で共有されており、クロールできるのは2つだけです(つまり、www.exampleおよびexample)。通常、/robots.txtを変更してDisallow: /を追加しますが、共有コードベースのため、すべての(サブ)ドメインに影響を与えずに/robots.txtを変更することはできません。

どのようにそれについて行くかのアイデアはありますか?

9
alexus

サイトへのアクセスに使用したサブドメインに基づいて、異なるrobots.txtファイルを提供できます。 Apacheでこれを行う1つの方法は、.htaccessのmod_rewriteを使用して内部的にURLを書き換えることです。何かのようなもの:

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

上記は、ホストがrobots.txtまたはwww.example.com以外のexample.comへのすべてのリクエストに対して、リクエストをrobots-disallow.txtに内部的に書き換えることを示しています。そして、robots-disallow.txtにはDisallow: /ディレクティブが含まれます。

.htaccessファイルに他のディレクティブがある場合、このディレクティブはルーティングディレクティブの前に一番上にある必要があります。

11
MrWhite

robots.txtは、ルートに存在する場合にのみ機能します。

サブドメインWebサイトごとに個別のrobots.txtをアップロードする必要があり、http://subdomain.example.com/robots.txtからアクセスできます。

以下のコードをrobots.txtに追加します

User-agent: *
Disallow: /

もう1つの方法は、すべてのページにRobots <META>タグを挿入することです。

<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
0

HTMLページからメタタグを削除し、サブドメインに応じて動的に作成します。例えばサブドメインdevを使用します。開発用。したがって、ページロードイベントには次のようになります。

  ' 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)
0
Robin