หากหน้าเว็บที่ชี้ไปยังลิงก์ต่างๆ มีเนื้อหาเหมือนกันจำนวนมาก ปรากฏการณ์นี้เรียกว่า "เนื้อหาที่ซ้ำกัน" หากเว็บไซต์มีเนื้อหาซ้ำๆ กันมาก โปรแกรมค้นหาจะคิดว่ามูลค่าของเว็บไซต์ไม่สูงนัก ดังนั้นเราจึงควรพยายามหลีกเลี่ยงเนื้อหาที่ซ้ำกันทุกประเภท
เนื้อหาที่ซ้ำกันบนเว็บไซต์ไดนามิกมักเกิดจากพารามิเตอร์ URL และการเขียน URL ใหม่จะทำให้ปรากฏการณ์นี้แย่ลง (ซึ่งค่อนข้างน่าสนใจ 555) เพราะหากใช้พารามิเตอร์ URL ดั้งเดิม เครื่องมือค้นหาอาจตัดสินอย่างเหมาะสมและเรียนรู้ว่าเนื้อหาที่ซ้ำกันนั้นเกิดจากพารามิเตอร์ URL และจัดการตามนั้นโดยอัตโนมัติ การเขียน URL ใหม่จะครอบคลุมพารามิเตอร์ URL ซึ่งจะทำให้เครื่องมือค้นหาไม่ทำ ไม่รู้จักพารามิเตอร์ URL ตัวอย่างเช่น:
URL เดิม:
http://www.freeflying.com/articles.aspx?id=231&catelog=blog
http://www.freeflying.com/articles.aspx?id=231&catelog=news
URL หลังจากเขียน URL ใหม่:
http://www.freeflying.com/blog/231.html
http://www.freeflying.com/news/231.html
จริงๆ แล้วเนื้อหาของหน้าเว็บที่ URL เหล่านี้ชี้ไปนั้นเหมือนกัน ทั้งสองบทความเป็นบทความที่มี id=231 แต่บทความนี้มีการอ้างอิงโดยบล็อกและคอลัมน์ข่าวสาร ด้วยเหตุผลหลายประการ URL สุดท้ายของเราจึงยังคงเป็นดังที่แสดงไว้ด้านบน
มีสองวิธีในการจัดการกับมัน วิธีหนึ่งคือการใช้โปรโตคอลโรบ็อตเพื่อ "ยกเว้น" หนึ่งในนั้น และอีกวิธีหนึ่งคือเปลี่ยนเส้นทาง URL หนึ่งไปยัง URL อื่นอย่างถาวรผ่าน 301
วันนี้เราจะมาพูดถึงโปรโตคอลหุ่นยนต์กันก่อน พูดง่ายๆ ก็คือ โรบ็อตหมายถึงเครื่องมือค้นหา สำหรับ Google เราก็เรียกมันว่า "แมงมุม" เช่นกัน สไปเดอร์มีความสุภาพมากและจะขอความคิดเห็นของคุณก่อนที่จะรวบรวมข้อมูลเนื้อหาเว็บของคุณ คุณและหุ่นยนต์เคยสื่อสารกันตามโปรโตคอลของหุ่นยนต์มาก่อน เฉพาะสำหรับการนำไปปฏิบัติมีสองวิธี:
1. เพิ่มข้อความ robots.txt ลงในไดเร็กทอรีรากของเว็บไซต์ เช่น:
#เนื้อหาคงที่ ห้ามทุกหน้าในโฟลเดอร์ "ผู้ดูแลระบบ"
ตัวแทนผู้ใช้: *
ไม่อนุญาต: /Admin
บรรทัด # แสดงถึงความคิดเห็น
User-agent หมายถึงเครื่องมือค้นหา * หมายถึงสำหรับเครื่องมือค้นหาทั้งหมด คุณยังสามารถระบุเครื่องมือค้นหาเฉพาะได้ เช่น User-agent: googlebot;
Disallow ระบุไดเร็กทอรีหรือเพจที่ไม่ได้รับอนุญาตให้เข้าถึง หมายเหตุ: 1. ข้อความนี้ต้องตรงตามตัวพิมพ์ใหญ่-เล็ก 2. ต้องขึ้นต้นด้วย "" ซึ่งระบุไดเร็กทอรีรากของเว็บไซต์
เช่นเดียวกับวัตถุประสงค์ของซีรี่ส์นี้ เรามุ่งเน้นไปที่เทคโนโลยี ASP.NET ดังนั้น หากต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับข้อความ robots.txt โปรดตรวจสอบ ที่ http://www.googlechinawebmaster.com/2008/03/robotstxt.html
แต่เราจะสร้างไฟล์นี้แบบไดนามิกได้อย่างไร (จริงๆ แล้วมีความต้องการค่อนข้างน้อยสำหรับสิ่งนี้) บางทีสิ่งที่เราคิดทันทีคือการดำเนินการ I/O โดยการเขียนไฟล์ txt ในไดเร็กทอรีราก... แต่จริงๆ แล้วมีวิธีอื่น: การใช้โปรแกรมประมวลผลทั่วไป (ไฟล์ .ashx) โค้ดจะเป็นดังนี้:
รหัส
<%@ ภาษา WebHandler = "C #" Class = "ตัวจัดการ" %>
ใช้ระบบ;
ใช้ System.Web;
ตัวจัดการคลาสสาธารณะ: IHttpHandler {
ProcessRequest โมฆะสาธารณะ (บริบท HttpContext) {
การตอบสนอง HttpResponse = บริบทการตอบสนอง;
การตอบสนอง ชัดเจน();
//response.ContentType = "text/plain"; หากคุณต้องการใช้ IE6 เพื่อดูเพจ คุณไม่สามารถสร้างคำสั่งนี้ได้โดยไม่ทราบสาเหตุ
//สองประโยคต่อไปนี้ควรถูกสร้างขึ้นแบบไดนามิกโดยฐานข้อมูลในการใช้งานจริง
response.Write("ตัวแทนผู้ใช้: * n");
response.Write("Disallow: /news/231.html n");
//อ้างถึงเนื้อหาไฟล์โรบ็อตแบบคงที่ ซึ่งจัดเก็บเนื้อหาที่มีการป้องกันซึ่งจะไม่เปลี่ยนแปลง
response.WriteFile("~/static-robots.txt");
การตอบสนองฟลัช ();
-
บูลสาธารณะ IsReusable {
รับ {
กลับเท็จ;
-
-
-
โดยทั่วไปแล้ว ตัวจัดการจะใช้ IHttpHandler ในส่วน UrlRewrite ก่อนหน้านี้ เราได้พูดถึง HttpModule จริงๆ แล้ว ในวงจรชีวิตของแอปพลิเคชัน ASP.NET มีแนวคิดที่เรียกว่า "ไปป์ไลน์": คำขอ HTTP จะส่งผ่านไฟล์ "การกรอง" /processing" ของ HttpModule ซึ่งในที่สุดก็ไปถึงส่วน "ตัวประมวลผล" ของ HttpHandle HttpModule และ HttpHandle ก่อให้เกิด "ไปป์ไลน์"
หากคุณไม่คุ้นเคย ให้ตรวจสอบซอร์สโค้ดของเพจแล้วคุณจะพบว่าเพจใช้ IHttpHandler ด้วยเช่นกัน ดังนั้นไฟล์ *.aspx จึงเป็น HttpHandle ที่ใช้บ่อยที่สุด แต่เพจไม่ได้เป็นเพียง HttpHandler เท่านั้น แต่ยังฝังเหตุการณ์วงจรชีวิตของเพจที่ซับซ้อน ดังนั้นจากมุมมองของการประหยัดทรัพยากร หลายครั้งที่ฉันยังสามารถใช้ไฟล์ *.ashx () ที่กำหนดเองและมีน้ำหนักเบากว่าเพื่อทำงานง่ายๆ ให้สำเร็จได้ เช่นเดียวกับการสร้างไฟล์ txt เรายังสามารถสร้างรหัสยืนยัน (ไฟล์ jpg) ไฟล์ xml เป็นต้น
จากนั้นสิ่งต่อไปที่ต้องทำคือ URLRewrite:
รหัส
เป็นโมฆะ Application_BeginRequest (ผู้ส่งวัตถุ EventArgs e)
-
// รหัสที่ทำงานเมื่อเริ่มต้นแอปพลิเคชัน
บริบท HttpContext = HttpContext.Current;
สตริง currentLocation = context.Request.Url.LocalPath;
ถ้า (currentLocation.ToLower() == "/website1/robots.txt")
-
บริบท RewritePath("~/Handler.ashx");
-
-
ด้วยวิธีนี้ สไปเดอร์จะคิดว่ามีไฟล์ robots.txt อยู่ในไดเร็กทอรีรากของเว็บไซต์
2. เพิ่มแท็ก META ลงในเพจที่ต้องการบล็อก
<meta id="meta" name="robots" content="noindex,nofollow" />
noindex หมายความว่าไม่สามารถจัดทำดัชนีหน้าได้
nofollow หมายความว่าไม่สามารถ "ติดตามเพจ" ได้ (จะอธิบายรายละเอียดใน SEO Hack)
นี่คือเอฟเฟกต์ของเพจแบบคงที่ หากคุณต้องการสร้างเพจแบบไดนามิก มันค่อนข้างง่าย:
รหัส
โมฆะที่ได้รับการป้องกัน Page_Load (ผู้ส่งวัตถุ EventArgs e)
-
HtmlMeta เมตา = HtmlMeta ใหม่ ();
meta.Name = "หุ่นยนต์";
meta.Content = "noindex, nofollow";
this.Header.Controls.Add(เมตา);
-
คำอธิบาย คำสำคัญ ฯลฯ สามารถระบุได้ในเมตาดาต้า และการใช้งานทางเทคนิคก็เหมือนกัน
แล้วเราจะเลือกระหว่างสองวิธีได้อย่างไร? คำแนะนำบางส่วนของฉัน:
1. ลองใช้ robots.txt ซึ่งสามารถลดภาระของเว็บไซต์ได้ (ถึงแม้มันจะเล็กมากก็ตาม 555) เพราะหลังจากที่สไปเดอร์ดูไฟล์ robots.txt มันจะไม่ขอหน้าที่เกี่ยวข้องที่ถูกบล็อกอีกต่อไป และถ้าคุณ ใช้วิธีการเมตา สไปเดอร์จะต้องร้องขอเพจก่อน จากนั้นจึงตัดสินใจว่าจะไม่เรียกข้อมูลเพจนั้น ในขณะนี้ คำขอ Http ได้ถูกส่งไปแล้ว และทรัพยากรฝั่งเซิร์ฟเวอร์ก็สูญเปล่าเช่นกัน เมตาดาต้าถูกบล็อก นอกจากนี้ยังจะทำให้สไปเดอร์ส่งผลเสียต่อเว็บไซต์ ลดหรือละทิ้งการดึงข้อมูลและการรวมเว็บไซต์
2. การจับคู่ข้อความ robots.txt จะเรียงจากซ้ายไปขวา ดังนั้นจึงไม่มีการจับคู่แบบปกติที่นี่! ดังนั้นบางครั้งเราต้องใช้วิธีเมตา เช่น URL ในตอนต้นของบทความของเรา:
http://www.freeflying.com/blog/231.html
http://www.freeflying.com/news/231.html
สุดท้ายนี้ มีหมายเหตุบางประการ:
1. อย่าใช้ Keyword และ Description เดียวกันในทุกหน้า นี่เป็นข้อผิดพลาดที่เราสามารถทำได้ง่าย แม้ว่า Articles.aspx จะเป็นหน้าเดียว แต่หลังจากเพิ่มพารามิเตอร์ URL แล้ว มันจะกลายเป็นหลายพันหน้า หากคุณเขียน Keyword และ Description บนเพจนั้น เพจนับพันเพจก็จะมี Keyword และ Description เหมือนกัน!
2. พยายามหลีกเลี่ยงการใช้ SessionID ตาม URL เมื่อ ASP.NET ปิดใช้งานคุกกี้บนไคลเอนต์ คุณสามารถตั้งค่า SessionID ที่ใช้ URL ที่มีผลคล้ายกัน:
http://www.freeflying.com/(S(c3hvob55wirrndfd564))/articles.aspx