ไฟล์ robots.txt และ sitemap.xml สามารถเป็นแบบไดนามิกผ่านการเปลี่ยนเส้นทาง. htaccess ได้หรือไม่


13

ฉันมีเว็บไซต์หลายภาษาและหลายโดเมน มันทำงานผ่านการติดตั้ง CMS ที่ไม่ซ้ำกัน (Drupal) ดังนั้นฉันมีไดเรกทอรีรากเดียว ดังนั้นหากฉันมี robots.txt แบบคงที่ฉันสามารถแสดงไฟล์สำหรับโดเมนเดียวได้เท่าที่ฉันรู้

ฉันขอใส่บรรทัดใน. htaccess ได้ไหม

Redirect 301 /robots.txt /robots.php

(หรือคำแนะนำที่เทียบเท่าและโปรดระบุว่าได้รับอนุญาตหรือไม่)

ดังนั้นจึงเปลี่ยนเส้นทางไปยังไฟล์ php แบบไดนามิกที่ฉันสามารถให้บริการที่แตกต่างกันตาม$_SERVER['HTTP_HOST']?

และคำถามเดียวกันสำหรับsitemap.xmlดังนั้นฉันจึงสามารถให้บริการsitemap.phpแบบไดนามิกซึ่งระบุลิงก์ที่แตกต่างกันสำหรับแต่ละโดเมน

ปัญหาที่ไม่มีการใช้. txt และ. xml นั้นเป็นไปตามที่กล่าวไว้ว่าโดเมนทั้งหมดใช้ไดเรกทอรีทางกายภาพเดียวในคอมพิวเตอร์เซิร์ฟเวอร์


คำตอบ:


12

คุณสามารถทำให้ไฟล์ใด ๆ เป็นแบบไดนามิก วิธีที่ดีที่สุดในการทำเช่นนั้นไม่ใช่ผ่านการเปลี่ยนเส้นทาง แต่ผ่านกฎการเขียนซ้ำ

RewriteRule ^robots\.txt$  /robots.php [L]

ด้วยวิธีนี้คุณเพิ่มพลังด้วยสคริปต์แบบไดนามิก แต่ URL จะไม่เปลี่ยนแปลง โปรแกรมรวบรวมข้อมูลส่วนใหญ่ (รวมถึง Googlebot) จะติดตามการเปลี่ยนเส้นทางสำหรับrobots.txtแต่โปรแกรมรวบรวมข้อมูลบางประเภทอาจสับสนหากคุณแนะนำการเปลี่ยนเส้นทาง

หมายเหตุว่าแม้ว่าคุณจะกำลังจะด้วย PHP, robots.txt ของคุณควรจะปรากฏขึ้นที่จะเป็นแบบคงที่จะรวบรวมข้อมูลสำหรับแต่ละโดเมนแต่ละ เป็นการดีที่จะแสดงเนื้อหาที่แตกต่างกันสำหรับโดเมนที่แตกต่างกันหรือแม้แต่สำหรับตัวแทนผู้ใช้ที่แตกต่างกัน อย่างไรก็ตามการให้บริการเนื้อหาที่แตกต่างกันแบบสุ่มหรือตามเวลาของวันอาจทำให้ซอฟต์แวร์รวบรวมข้อมูลของเครื่องมือค้นหาสับสนและทำให้ SEO ของคุณสับสน


แผนผังไซต์เป็นชื่อที่ดีตามที่คุณต้องการ คุณสามารถเปลี่ยนเส้นทางเหล่านั้นหรือใช้กฎการเขียนซ้ำเพื่อให้อำนาจพวกเขาแบบไดนามิกที่ URL เดียวกัน คุณสามารถตั้งชื่อพวกมันได้เช่นกัน

  • เว็บไซต์-a-sitemap.xml
  • เว็บไซต์-B-sitemap.xml
  • เว็บไซต์-C-sitemap.xml

จากนั้นอ้างถึงพวกเขาในrobots.txt :

Sitemap: http://www.example.com/example-sitemap.xml

หรือส่งพวกเขาไปยังเครื่องมือค้นหาด้วยตนเองผ่านเครื่องมือเว็บมาสเตอร์หรือคอนโซลการค้นหา


ขอบคุณสำหรับคำตอบของคุณ โปรดแก้ไขสิ่งที่อาจเป็นตัวพิมพ์ผิดซึ่งเป็นคำสั่งw3dที่ใช้งานได้ดังนั้นโค้ดควรจะRewriteRule ^robots\.txt$ robots.php [L]ไม่มีสัญลักษณ์ \
Cesar

ใช่รุ่นที่มีเครื่องหมายทับจะเหมาะกับไฟล์ apache.conf ของคุณ สำหรับ. htaccess คุณต้องปล่อยทิ้งไว้ ฉันได้แก้ไขคำตอบเพื่อรวมรุ่นที่เหมาะสมสำหรับ. htaccess
Stephen Ostermiller

@Cesar คำนำหน้าเครื่องหมายทับบนรูปแบบ (เช่น. ^/robots\.txt$) จะต้องใช้ถ้าคำสั่งนี้อยู่ในการกำหนดค่าเซิร์ฟเวอร์ แต่ใช่มันจะไม่ตรงกันในไฟล์. htaccess ต่อไดเรกทอรี คำนำหน้าเครื่องหมายทับบนการทดแทน (เช่น. /robots.php) เป็นตัวเลือกในกรณีนี้
MrWhite

5

ใช่เช่นเดียวกับคำขอใด ๆ ที่อาจเป็น "ไดนามิก"

อย่างไรก็ตามคุณจะไม่เปลี่ยนเส้นทาง (เช่นในรหัสตัวอย่างของคุณ) คุณควรเขียนใหม่ภายในโดยใช้ mod_rewrite (เช่นเดียวกับสิ่งที่ Drupal กำลังทำอยู่)

ตัวอย่างเช่นในไฟล์ root .htaccess ของคุณ:

RewriteEngine On
RewriteRule ^robots\.txt$ robots.php [L]

RewriteEngine ควรเกิดขึ้นเพียงครั้งเดียว (แม้ว่ามันจะไม่สำคัญถ้ามันเกิดขึ้นหลายครั้ง)

คุณเพียงแค่ต้องแน่ใจว่ามันจะไม่ขัดแย้งกับคำสั่งอื่น ๆ ในไฟล์. htaccess ของคุณ ดังนั้นนี้อาจจะอยู่ใกล้กับจุดเริ่มต้นของไฟล์แน่นอนก่อนที่คุณควบคุมด้านหน้า


4

การทำให้ไฟล์แผนผังเว็บไซต์เป็นแบบไดนามิกนั้นเป็นวิธีที่ดีในการอัปเดตแผนผังไซต์ของคุณโดยอัตโนมัติ

การทำให้ไฟล์ robots.txt เป็นแบบไดนามิก (สำหรับโฮสต์เดียวกันการทำสิ่งนี้สำหรับโฮสต์แยกต่างหากเป็นหลักเพียงไฟล์ robots.txt ปกติสำหรับแต่ละไฟล์) อาจเป็นสาเหตุของปัญหา: มันจะไม่ถูกรวบรวมข้อมูลทุกครั้งที่มีการรวบรวมข้อมูล URL จากเว็บไซต์ ดังนั้นอาจเกิดขึ้นได้ว่ารุ่น "ผิด" ถูกแคช ตัวอย่างเช่นหากคุณทำให้การรวบรวมข้อมูลบล็อกไฟล์ robots.txt ของคุณในช่วงเวลาทำการอาจเป็นไปได้ว่าแคชและตามมาเป็นเวลาหนึ่งวันซึ่งหมายความว่าไม่มีการรวบรวมข้อมูลใด ๆ (หรือสลับกันเป็นแคชเมื่ออนุญาตให้รวบรวมข้อมูล) Google รวบรวมข้อมูลไฟล์ robots.txt ประมาณหนึ่งครั้งต่อวันสำหรับเว็บไซต์ส่วนใหญ่


ฉันไม่เห็นความแตกต่างระหว่างที่อยู่กับที่หรือคงที่ ฉันจะใช้ส่วนไดนามิกเพื่อเสนอรุ่นที่แตกต่างกันตามโฮสต์ที่แตกต่างกัน แต่เนื่องจากโฮสต์ทั้งหมดแชร์ไดเรกทอรีทางกายภาพเดียวกันในเซิร์ฟเวอร์คอมพิวเตอร์นั่นคือวิธีที่มี robots1.txt, robots2.txt, robots3.txt (ตัวเลข ความหมายในโดเมนของเรา)
Cesar

ฉันไม่คิดว่าไดนามิกที่นี่หมายความว่าพวกเขาต้องการแสดงเนื้อหาที่แตกต่างกันในแต่ละครั้ง พวกเขาเพียงแค่ต้องการพลังผ่าน PHP เพื่อให้พวกเขาสามารถตัดสินใจตามชื่อโฮสต์ในรหัส PHP ฉันมักจะทำให้ robots.txt เป็นแบบไดนามิกเพื่อให้บริการกฎที่แตกต่างกับตัวแทนผู้ใช้ที่แตกต่างกัน
Stephen Ostermiller

2
ใช่ตามที่ฉันได้กล่าวไว้การทำเพื่อโฮสต์หลาย ๆ แห่งนั้นเหมือนกับการมีไฟล์ robots.txt แยกกันต่อโฮสต์ซึ่งถือว่าใช้ได้ อย่างไรก็ตามบางครั้งเราเห็นไซต์ที่พยายามควบคุมการรวบรวมข้อมูลตามเวลาของวันโดยใช้ไฟล์ robots.txt แบบไดนามิกซึ่งทำให้เกิดปัญหามากมาย
John Mueller

จุดดี. ฉันได้แก้ไขคำตอบที่ยอมรับแล้วพร้อมคำเตือนว่าจะไม่ทำให้ robots.txt เป็นแบบไดนามิกมาก
Stephen Ostermiller

0

ไม่จำเป็นต้องสร้าง sitemap.php เพราะ: 1. สำหรับแต่ละภาษาคุณสามารถเรียกใช้ไฟล์ sitemap.xml แยกต่างหากและระบุแต่ละไฟล์ในคอนโซลเครื่องมือค้นหา 2. ไฟล์แผนผังไซต์มาตรฐานสามารถเขียนซ้ำเป็นประจำเพื่อรวมเนื้อหาล่าสุดและทำให้เป็นแบบไดนามิก - สำหรับไฟล์. php นั้นไม่จำเป็น ขึ้นอยู่กับกลไกการอัพเดตภายในและ cron เพื่อสร้างไฟล์เดียวกันใหม่ด้วยนามสกุล. xml มาตรฐาน

ไฟล์ Sitemap.xml เป็นแบบสแตติกและการอัปเดตเท่านั้นทำให้เป็นแบบไดนามิก - ไม่อัปเดตแบบเรียลไทม์ มีความเป็นไปได้ที่จะทำให้พวกเขาเขียนซ้ำทุก ๆ นาที แต่ไม่จำเป็นต้องใช้เพราะ: 1. Google จะไม่ตรวจสอบภายในเวลาน้อยกว่า 1 ชั่วโมงนับตั้งแต่การส่งครั้งล่าสุด 2. เมื่อไฟล์แผนผังไซต์มีขนาดใหญ่เขียนใหม่อีกครั้ง มักจะทำให้เซิร์ฟเวอร์ประสิทธิภาพ kaput

เมื่อมีข้อมูลจำนวนมากและทำให้ไฟล์แผนผังเว็บไซต์มีขนาดใหญ่กว่า 50mb จำเป็นต้องมีระบบที่มีแผนผังไซต์หลายรายการ หมายความว่า sitemap2,3 ... .xml จะรวมอยู่ในรายการของไฟล์หลัก แต่เนื้อหาในไฟล์เหล่านี้ยังคงได้รับการแก้ไขจนกว่าไฟล์เหล่านี้จะถูกสร้างใหม่ (เช่น cron เป็นต้น)

นอกจากนี้ยังกล่าวถึงว่าเมื่อเครื่องมือค้นหาเข้าถึงไฟล์มันจะไม่กลับมาเร็วอีกเลย (เว้นแต่จะทำด้วยตนเอง) เป็นการยืนยันว่าไม่จำเป็นต้องมีกรณีใด ๆ ในการสร้างการอัปเดต sitemap.php แบบเรียลไทม์เนื่องจาก sitemap.xml ปกตินั้นสามารถเปลี่ยนแปลงได้แบบไดนามิกโดยอัพเดทเนื้อหาใหม่ตลอดทั้งวันหรือหนึ่งสัปดาห์

ฉันไม่สามารถนึกถึงข้อดีใด ๆ ที่ใช้ sitemap.php มันจะทำไม่ดีเนื่องจากมีวิธีอื่นที่ดีกว่า / เหมาะสมในการใช้ไฟล์เหล่านี้


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