Yalnızca alt alan adına izin vermemek için robots.txt dosyasını nasıl kullanabilirim?


10

Kodum taban birkaç ortamlarda (canlı, evreleme, dev) ve alt alanları (arasında paylaştırılır staging.example, dev.examplevs.) ve sadece iki taranmak izin (yani. Alınmalıdır www.exampleve example). Normalde değiştirir /robots.txtve eklerdim Disallow: /, ancak paylaşılan kod tabanı nedeniyle /robots.txttüm (alt) etki alanlarını etkilemeden değiştiremem .

Bu konuda nasıl bir fikrin var mı?

Yanıtlar:


13

robots.txtSiteye erişildiği alt alan adına bağlı olarak farklı bir dosya sunabilirsiniz . Apache'de bunu yapmanın bir yolu, URL'yi .htaccess içindeki mod_rewrite kullanarak dahili olarak yeniden yazmaktır. Gibi bir şey:

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

Yukarıda robots.txt, ana bilgisayarın www.example.comveya dışındaki herhangi bir yere yapılan tüm istekler için example.comisteği dahili olarak yeniden yazdığı belirtilir robots-disallow.txt. Ve robots-disallow.txtsonra Disallow: /yönergeyi içerecektir .

.Htaccess dosyanızda başka yönergeler varsa, yönlendirme yönergelerinden önce bu yönergenin en üste yakın olması gerekir.


Ben de aynı çözümü düşünüyordum. Orada başka bir şey olup olmadığından emin değildim, ama günün sonunda, eğer öyleyse, o zaman işimi yapacak şey bu)
alexus

1
Her iki alt alan / ana bilgisayar da aynı web alanı / kod tabanını gösteriyorsa, robots.txt "standardında" bunu kontrol edebilecek bir şey yoktur, eğer önerdiğiniz buysa. Bot sadece talep sub.example.com/robots.txtedecektir, bu nedenle alt alana bağlı olarak farklı bir yanıt sunmak için bir şeyler yapmanız gerekir . Mod_rewrite kullanmanıza gerek yok, ancak birkaç kez kullanıldığını gördüğüm bir teknik. Eğer robots.txtdinamik olarak oluşturulmuşsa o zaman sunucu tarafı kod (örn. PHP) içinde tepkisini değiştirebilir.
MrWhite

Kullanmanın alternatifi , bu tür alt alanlara erişildiğinde (.htaccess içinde de yapılabilir) robots.txtbir X-Robots-Tag: noindexHTTP yanıt üstbilgisi göndererek, taramak yerine dizine eklemeyi önlemek olabilir. Her ne kadar taramayı önlemenin muhtemelen tercih edildiğini düşünüyorum. (?)
MrWhite

1

robots.txt yalnızca kökte varsa çalışır.

robots.txtErişilebilen her bir alt alan adı web sitesi için ayrı bir dosya yüklemeniz gerekir http://subdomain.example.com/robots.txt.

Adresine aşağıdaki kodu ekleyin: robots.txt

User-agent: *
Disallow: /

Başka bir yol da <META>tüm sayfalara bir Robots etiketi ekleyebilirsiniz .

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

3
Ancak OP zaten şunu belirtiyor: "Normalde değiştirir /robots.txtve eklerdim Disallow: /, ancak paylaşılan kod tabanı nedeniyle /robots.txttüm (alt) etki alanlarını etkilemeden değiştiremem ."
MrWhite

0

Html sayfasından meta etiketi kaldırmak ve alt alanınıza bağlı olarak dinamik olarak oluşturmak. örneğin, alt alan adı dev. geliştirme için. Pageload olayında şu var:

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

Bu, taramayı engellemese de, OP'nin gereksinimi gibi görünecektir.
MrWhite
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.