Bagaimana saya bisa menggunakan robots.txt untuk melarang subdomain saja?

10

Kode dasar saya dibagi antara beberapa lingkungan (hidup, pementasan, dev) & sub-domain ( staging.example, dev.example, dll) dan hanya dua harus diizinkan untuk dijelajahi (yaitu. www.exampleDan example). Biasanya saya akan memodifikasi /robots.txtdan menambahkan Disallow: /, tetapi karena basis kode bersama saya tidak dapat memodifikasi /robots.txttanpa mempengaruhi semua (sub) domain.

Ada ide bagaimana cara melakukannya?

alexus
sumber

Jawaban:

13

Anda dapat menyajikan robots.txtfile berbeda berdasarkan subdomain tempat situs tersebut diakses. Salah satu cara melakukan ini di Apache adalah dengan menulis ulang URL secara internal menggunakan mod_rewrite dalam .htaccess. Sesuatu seperti:

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

Pernyataan di atas menyatakan bahwa untuk semua permintaan ke robots.txttempat host apa pun selain www.example.comatau example.com, lalu tulis ulang permintaan secara internal robots-disallow.txt. Dan robots-disallow.txtkemudian akan berisi Disallow: /arahan.

Jika Anda memiliki arahan lain dalam file .htaccess Anda, maka arahan ini harus lebih dekat dengan bagian atas, sebelum arahan perutean.

TuanWhite
sumber
Saya sedang memikirkan solusi yang sama. Saya tidak yakin apakah ada sesuatu yang lain di luar sana, tetapi pada akhirnya, jika itu masalahnya, maka apa yang akan menyelesaikan pekerjaan saya)
alexus
1
Jika kedua subdomain / host menunjuk ke ruang web / basis kode yang sama maka tidak ada "standar" robots.txt yang dapat mengontrol ini, jika itu yang Anda sarankan. Bot hanya akan meminta sub.example.com/robots.txt, jadi Anda perlu melakukan sesuatu untuk melayani respons yang berbeda tergantung pada subdomain. Anda tidak perlu menggunakan mod_rewrite, tetapi ini adalah teknik yang pernah saya lihat digunakan beberapa kali. Jika robots.txtdihasilkan secara dinamis maka Anda dapat mengubah respons dalam kode sisi server (mis. PHP).
MrWhite
Alternatif untuk menggunakan robots.txtmungkin untuk mencegah pengindeksan, daripada merangkak, dengan mengirim X-Robots-Tag: noindexheader respons HTTP ketika subdomain tersebut diakses (yang juga bisa dilakukan dalam .htaccess). Meskipun saya pikir mencegah perayapan mungkin lebih baik. (?)
MrWhite
1

robots.txt hanya berfungsi jika ada di root.

Anda perlu mengunggah yang terpisah robots.txtuntuk setiap situs web subdomain, dari mana ia dapat diakses http://subdomain.example.com/robots.txt.

Tambahkan kode di bawah ini ke robots.txt

User-agent: *
Disallow: /

Dan cara lain adalah Anda dapat memasukkan <META>tag Robots di semua halaman.

<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
Sudip Chatterjee
sumber
3
Tetapi OP sudah menyatakan: "Biasanya saya akan memodifikasi /robots.txtdan menambahkan Disallow: /, tetapi karena basis kode bersama saya tidak dapat memodifikasi /robots.txttanpa mempengaruhi semua (sub) domain."
MrWhite
0

Saya akan menghapus tag meta dari halaman html dan secara dinamis membangunnya tergantung pada subdomain Anda. misal kita menggunakan subdomain dev. untuk pengembangan. Jadi dalam acara pageload kita memiliki ini:

  ' 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
sumber
Meskipun ini tidak mencegah perayapan , yang tampaknya menjadi persyaratan OP.
MrWhite