私のコードベースは複数の環境(ライブ、ステージング、開発)とサブドメイン(staging.example
、dev.example
など)で共有されており、クロールできるのは2つだけです(つまり、www.example
およびexample
)。通常、/robots.txt
を変更してDisallow: /
を追加しますが、共有コードベースのため、すべての(サブ)ドメインに影響を与えずに/robots.txt
を変更することはできません。
どのようにそれについて行くかのアイデアはありますか?
サイトへのアクセスに使用したサブドメインに基づいて、異なる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ファイルに他のディレクティブがある場合、このディレクティブはルーティングディレクティブの前に一番上にある必要があります。
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">
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)