ฉันจะใช้ robots.txt เพื่อไม่อนุญาตโดเมนย่อยได้อย่างไร


10

ฐานรหัสของฉันคือการร่วมกันระหว่างหลายสภาพแวดล้อม (ชีวิตการแสดงละคร dev) และโดเมนย่อย ( staging.example, dev.exampleฯลฯ ) และมีเพียงสองควรจะได้รับอนุญาตให้มีการรวบรวมข้อมูล (เช่น. www.exampleและexample) โดยปกติฉันจะแก้ไข/robots.txtและเพิ่มDisallow: /แต่เนื่องจากรหัสฐานที่ใช้ร่วมกันฉันไม่สามารถแก้ไขได้/robots.txtโดยไม่กระทบโดเมน (ย่อย) ทั้งหมด

ความคิดใดที่จะไปเกี่ยวกับมันได้หรือไม่

คำตอบ:


13

คุณสามารถให้บริการrobots.txtไฟล์ที่แตกต่างกันตามโดเมนย่อยผ่านทางเว็บไซต์ที่มีการเข้าถึง วิธีหนึ่งในการทำเช่นนี้กับ Apache คือการเขียน URL ใหม่โดยใช้ mod_rewrite ใน. htaccess สิ่งที่ต้องการ:

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 ของคุณคำสั่งนี้จะต้องใกล้ด้านบนสุดก่อนคำสั่งการกำหนดเส้นทางใด ๆ


ฉันคิดถึงวิธีแก้ปัญหาแบบเดียวกัน ฉันไม่แน่ใจว่ามีสิ่งอื่นอีกหรือไม่ แต่ในตอนท้ายของวันถ้าเป็นเช่นนั้นสิ่งที่จะทำให้งานของฉันเสร็จสิ้น)
alexus

1
หากทั้งสองโดเมนย่อย / โฮสต์ชี้ไปที่ webspace / code เดียวกันนั้นไม่มีอะไรใน robots.txt "มาตรฐาน" ที่สามารถควบคุมสิ่งนี้ได้หากนั่นคือสิ่งที่คุณกำลังแนะนำ บอทกำลังจะขอsub.example.com/robots.txtดังนั้นคุณจะต้องทำอะไรบางอย่างเพื่อตอบสนองที่แตกต่างกันขึ้นอยู่กับโดเมนย่อย คุณไม่จำเป็นต้องใช้ mod_rewrite แต่มันเป็นเทคนิคที่ฉันเห็นมาหลายครั้งแล้ว หากrobots.txtมีการสร้างแบบไดนามิกแล้วคุณสามารถเปลี่ยนการตอบสนองในรหัสฝั่งเซิร์ฟเวอร์ (เช่น PHP)
MrWhite

อีกทางเลือกหนึ่งในการใช้robots.txtอาจเป็นการป้องกันการทำดัชนีแทนที่จะรวบรวมข้อมูลโดยส่งX-Robots-Tag: noindexส่วนหัวการตอบกลับ HTTP เมื่อเข้าถึงโดเมนย่อยนั้น (ซึ่งสามารถทำได้ใน. htaccess) แม้ว่าฉันคิดว่าการป้องกันการรวบรวมข้อมูลน่าจะดีกว่า (?)
MrWhite

1

robots.txt ใช้ได้เฉพาะในกรณีที่มีอยู่ในรูท

คุณจะต้องอัปโหลดแยกต่างหากสำหรับแต่ละเว็บไซต์โดเมนย่อยซึ่งจะสามารถเข้าถึงได้จากrobots.txthttp://subdomain.example.com/robots.txt

เพิ่มรหัสด้านล่างในเพื่อ robots.txt

User-agent: *
Disallow: /

และอีกวิธีคือคุณสามารถแทรก<META>แท็กRobots ในทุกหน้า

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

3
แต่ OP ระบุว่า: "โดยปกติฉันจะแก้ไข/robots.txtและเพิ่มDisallow: /แต่เนื่องจากรหัสฐานที่ใช้ร่วมกันฉันไม่สามารถแก้ไขได้/robots.txtโดยไม่ส่งผลกระทบต่อโดเมน (ย่อย) ทั้งหมด"
MrWhite

0

ฉันจะลบเมตาแท็กออกจากหน้า html และสร้างมันขึ้นอยู่กับโดเมนย่อยของคุณ เช่นเราใช้โดเมนย่อย dev เพื่อการพัฒนา ดังนั้นในเหตุการณ์ pageload เรามีสิ่งนี้:

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

แม้ว่าจะไม่ได้ป้องกันการรวบรวมข้อมูลแต่ดูเหมือนว่าจะเป็นข้อกำหนดของ OPs
MrWhite
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.