บทที่ 2 จาก 5 · SEO สำหรับเว็บไทย — ให้ Google เจอ เข้าใจ และเลือกหน้าของคุณ
ให้ Google เจอและเก็บหน้าที่ใช่: robots.txt, noindex, canonical, sitemap และลิงก์ภายใน
เครื่องมือแต่ละตัวทำหน้าที่ต่างกัน ใช้ผิดตัวแล้วได้ผลตรงข้าม robots.txt ไม่ได้กันหน้าออกจาก Google, noindex ต้องให้ Google อ่านเห็นก่อน, canonical เป็นคำใบ้ และลิงก์ที่ซ่อนไว้ใน <details> ยังถูกตามอยู่
บทที่แล้วแบ่งงานของ Google เป็นสามขั้น บทนี้ว่าด้วยสองขั้นแรก คือทำให้ Google เจอหน้าที่เราอยากให้เจอ เก็บหน้าที่เราอยากให้เก็บ และไม่เปลืองเวลากับหน้าที่ไม่สำคัญ
2.1 เครื่องมือห้าตัว ทำหน้าที่ห้าอย่าง
ความผิดพลาดที่พบบ่อยที่สุดคือใช้เครื่องมือผิดตัว เช่น ใช้ robots.txt เพื่อซ่อนหน้า ซึ่งได้ผลตรงข้ามกับที่ตั้งใจ
| อยากให้เกิดอะไร | ใช้อะไร | อย่าใช้อะไร |
|---|---|---|
| ลดภาระเซิร์ฟเวอร์จากบอท | robots.txt | — |
| ไม่ให้หน้าขึ้นผลค้นหา | noindex, ใส่รหัสผ่าน หรือลบหน้า | robots.txt |
| บอกว่าหน้าไหนคือตัวหลักเมื่อมีหลาย URL | redirect หรือ rel="canonical" | robots.txt, noindex |
| บอก Google ว่ามีหน้าอะไรบ้าง | sitemap | — |
| ให้ Google เดินไปถึงหน้าและเข้าใจว่าหน้าเกี่ยวกับอะไร | ลิงก์ภายใน <a href> | ลิงก์ที่ไม่มี <a href> เช่น ใช้ onclick อย่างเดียว |
2.2 robots.txt: สำหรับจัดการภาระ ไม่ใช่สำหรับซ่อน
Google เขียนไว้ว่า robots.txt ใช้ “ส่วนใหญ่เพื่อไม่ให้เว็บรับคำขอมากเกินไป” และ “ไม่ใช่กลไกกันหน้าเว็บออกจาก Google”
ถ้าห้ามอ่านหน้าไหนด้วย robots.txt แต่มีคนลิงก์มาที่หน้านั้น Google ยังจัด URL เข้าดัชนีได้ โดยแสดง URL กับข้อความลิงก์ แต่ไม่รู้เนื้อหาข้างใน สุดท้ายหน้าก็ยังขึ้นผลค้นหาอยู่ดี แถมคำอธิบายก็ไม่ตรงกับเนื้อหา ซึ่งไม่ใช่สิ่งที่ตั้งใจ
ใช้ robots.txt เมื่อ
- มีหน้าที่สร้างขึ้นไม่รู้จบ เช่น หน้าค้นหาภายในที่เปลี่ยนตามตัวกรอง
- มีบอทบางตัวที่ไม่อยากให้เข้า เช่น บอทเก็บข้อมูลไปเทรน AI บางตัว (ดูเครื่องมือตรวจ AI crawler ท้ายบท)
ถ้าต้องการให้หน้าไม่ขึ้นผลค้นหา ให้ใช้ noindex ในหัวข้อถัดไป
2.3 noindex: ต้องให้ Google อ่านเห็นก่อน
ใส่ได้สองแบบ
<meta name="robots" content="noindex">
หรือส่ง HTTP header X-Robots-Tag: noindex ซึ่งใช้กับหน้า HTML ได้เหมือนกัน และเป็นวิธีเดียวสำหรับไฟล์ที่ไม่มี <head> Google เขียนว่าใช้กับไฟล์ที่ไม่ใช่ HTML ได้ เช่น PDF วิดีโอ และรูปภาพ
กับดักที่ Google เตือนไว้ชัด: หน้าที่ใส่ noindex ต้องไม่ถูกห้ามใน robots.txt ไม่อย่างนั้น Google จะไม่เคยเห็นคำว่า noindex เลย และหน้ายังอาจขึ้นผลค้นหาต่อไป การใส่ทั้งสองอย่าง “ให้ชัวร์” จึงทำให้ noindex ใช้ไม่ได้
อีกเรื่องที่ต้องรู้คือ noindex ไม่มีผลทันที หน้าที่ไม่สำคัญอาจรอเป็นเดือนกว่า Google จะกลับมาอ่านอีกรอบ ขอให้ Google อ่านใหม่ได้ด้วย URL Inspection ถ้าต้องให้หน้าหายจากผลค้นหาเร็ว ๆ Search Console มีเครื่องมือนำออก (Removals) แยกต่างหาก ซึ่งซ่อนหน้าได้ราวหกเดือน นานพอให้ noindex มีผล แต่ใช้แทน noindex ไม่ได้
2.4 canonical: บอกว่าหน้าไหนคือตัวจริง
หน้าเดียวกันมักเปิดได้หลาย URL เช่น มีและไม่มี / ท้าย, มีพารามิเตอร์ติดตามแคมเปญ ?utm_source=line, หรือเปิดได้ทั้ง http และ https Google จะจับกลุ่ม URL พวกนี้แล้วเลือกตัวแทนหนึ่งตัว เราช่วยบอกได้ด้วยสัญญาณเหล่านี้ เรียงจากแรงที่สุด
| สัญญาณ | ความแรงตามที่ Google บอก |
|---|---|
| redirect ไป URL หลัก | แรง |
<link rel="canonical" href="…"> | แรง |
| ใส่ URL หลักใน sitemap | อ่อน |
สัญญาณพวกนี้ ใช้ร่วมกันแล้วแรงขึ้น และเป็นแค่ คำใบ้ Google มีสิทธิ์เลือกหน้าอื่นถ้าหลักฐานชี้ไปทางนั้น
สิ่งที่ Google บอกให้หลีกเลี่ยง
- อย่าใช้ robots.txt เพื่อเลือก canonical
- อย่าให้แต่ละวิธีชี้ไปคนละ URL เช่น canonical บอกว่าหน้า A แต่ sitemap ใส่หน้า B
- ไม่แนะนำให้ใช้ noindex เพื่อเลือกว่าหน้าไหนเป็นหลักภายในเว็บเดียวกัน
เรื่องที่ทำให้หลายคนสบายใจขึ้น: Google บอกว่าเนื้อหาของเราที่เปิดได้หลาย URL “ไม่มีประสิทธิภาพ แต่ไม่ใช่เรื่องที่จะทำให้โดน manual action (การลงโทษด้วยมือ)” และเขียนต่อว่าการลอกเนื้อหาของคนอื่น “เป็นอีกเรื่องหนึ่ง” สำหรับ URL ในเว็บเราเอง canonical จึงเป็นเรื่องความเรียบร้อย ไม่ใช่เรื่องหนีบทลงโทษ
2.5 sitemap: รายการหน้าที่อยากให้ Google รู้จัก
sitemap คือไฟล์ XML ที่ลิสต์ URL ของเว็บ กฎหลักจาก Google และ sitemaps.org
- ไฟล์หนึ่งไม่เกิน 50,000 URL และไม่เกิน 50MB ก่อนบีบอัด ถ้าเกินให้แบ่งไฟล์แล้วรวมด้วย sitemap index
- URL ต้องเป็นแบบเต็ม ขึ้นต้นด้วย
https://ตามกฎของ sitemaps.org ต้องอยู่โฮสต์เดียวกับไฟล์ แต่ Google รับ sitemap ของเว็บอื่นได้ถ้ายืนยันทุกเว็บใน Search Console แล้ว หรือ robots.txt ของเว็บนั้นชี้มาที่ sitemap นี้ - ใส่เฉพาะ URL ที่อยากให้ขึ้นผลค้นหา คือ URL ที่เป็น canonical ไม่ใส่หน้าที่ติด noindex หรือหน้าที่ redirect ไปที่อื่น
- Google ไม่ใช้
<priority>และ<changefreq> <lastmod>ถูกใช้เฉพาะเมื่อ “ถูกต้องสม่ำเสมอและตรวจสอบได้” ถ้าทุก URL มีวันที่เดียวกันทุกครั้งที่สร้างไฟล์ Google อาจไม่สนใจค่านี้
ข้อสุดท้ายเป็นเรื่องที่ KoishiAI ยังค้างอยู่เอง sitemap ของเราตอนนี้ยังไม่มี lastmod เลย ซึ่งเครื่องมือตรวจ sitemap ของเราเองก็เตือนไว้ ทางแก้ที่ถูกคือใส่วันที่แก้บทความจริงของแต่ละหน้า ไม่ใช่เวลาที่สร้างไฟล์
sitemap ที่ไม่ได้ส่งผ่าน Search Console จะครอบคลุมเฉพาะ URL ที่อยู่ในโฟลเดอร์ของไฟล์นั้น ถ้าวางไฟล์ที่ /blog/sitemap.xml ก็จะใช้กับหน้าใต้ /blog/ เท่านั้น
2.6 ลิงก์ภายใน: ทางเดินของ Googlebot
Google ใช้ลิงก์ทั้งเพื่อหาหน้าใหม่และเพื่อเข้าใจว่าหน้าเกี่ยวกับอะไร ลิงก์ที่ Google เดินตามได้แน่นอนคือแท็ก <a> ที่มี href
| แบบนี้ Google ตามได้ | แบบนี้ตามได้ไม่แน่นอน |
|---|---|
<a href="/th/tools/sitemap-check"> | <span href="…"> |
<a href="https://example.com/"> | <a onclick="goTo('…')"> ที่ไม่มี href |
<a routerLink="…"> |
ข้อความลิงก์ควรบอกว่าปลายทางคืออะไร เช่น “เครื่องมือตรวจ sitemap” ดีกว่า “คลิกที่นี่”
บทเรียนจาก KoishiAI: <details> ซ่อนแค่หน้าตา ไม่ได้ซ่อนลิงก์
เว็บเรามีหน้ารวมแท็กจำนวนมาก แท็กที่มีบทความน้อยเราตั้งเป็น noindex แต่ในหน้าอื่นยังมีลิงก์ไปหาแท็กพวกนั้นอยู่ ซ่อนไว้ในกล่อง <details> ที่พับไว้ เราคิดว่าพับแล้วไม่มีใครเห็น แต่ การพับซ่อนแค่สิ่งที่ตาเห็น ลิงก์ยังอยู่ใน HTML ครบ Googlebot จึงเดินตามไปหน้าที่เราบอกเองว่าไม่ต้องเก็บ
เอกสาร crawl budget ของ Google เขียนไว้ว่าหน้า noindex ยังถูกดึงไปอ่านก่อนแล้วค่อยทิ้ง ซึ่ง “เปลืองเวลาการเก็บหน้า” เอกสารนั้นเขียนสำหรับเว็บใหญ่ เราจึงไม่อ้างว่าลิงก์พวกนี้คือสิ่งที่ถ่วงเว็บเล็กของเรา แต่การพา Google ไปหน้าที่เราบอกเองว่าไม่ต้องเก็บ ไม่สมเหตุสมผลไม่ว่าเว็บจะขนาดไหน เราจึงเก็บกวาดโดยเอาลิงก์ไปหน้า noindex ออกจากทุกหน้า และเขียนเทสต์กันไม่ให้กลับมาอีก
วิธีตรวจเว็บตัวเองแบบเดียวกัน: ดูต้นฉบับ HTML ของหน้า ไม่ใช่ดูหน้าจอ ลิงก์ที่มองไม่เห็นบนจอยังนับทั้งหมด
2.7 crawl budget: เว็บเล็กส่วนใหญ่ไม่ต้องห่วง
เอกสาร crawl budget ของ Google เขียนสำหรับเว็บที่มีหน้าไม่ซ้ำกันเกิน 1 ล้านหน้าและเปลี่ยนทุกสัปดาห์ เกิน 10,000 หน้าและเปลี่ยนทุกวัน หรือมี URL จำนวนมากค้างสถานะ “Discovered - currently not indexed” ถ้าหน้าใหม่ของเว็บคุณถูกเก็บภายในวันที่เผยแพร่ Google บอกว่าไม่ต้องอ่านเอกสารนั้นเลย
สำหรับเว็บเล็ก crawl budget ไม่ใช่ปัญหา เรื่องที่ควรทำคือความเรียบร้อยพื้นฐาน
- ไม่ลิงก์ไปหน้า noindex หรือหน้าซ้ำ
- หน้าที่ไม่มีจริงให้ส่งรหัส 404 จริง ไม่ใช่หน้า “ไม่พบ” ที่ส่งรหัส 200 (soft 404) ซึ่ง Google บอกว่าจะถูกเก็บซ้ำไปเรื่อย ๆ
- URL ที่ย้ายแล้วให้ redirect ไปหน้าใหม่ แล้วแก้ลิงก์ภายในให้ชี้ปลายทางตรง ๆ
2.8 ลงมือหลังอ่านบทนี้
- เปิด robots.txt ของเว็บ ถ้ามีบรรทัดที่ใช้ซ่อนหน้า ให้เปลี่ยนเป็น noindex แล้วเอาบรรทัดนั้นออก
- ตรวจว่าหน้าที่ใส่ noindex ไม่ได้ถูกห้ามใน robots.txt
- ตรวจ sitemap ด้วยเครื่องมือด้านล่าง ดูว่ามี URL ซ้ำ URL ไม่เต็ม หรือ lastmod เป็นวันเดียวกันหมดหรือเปล่า
- ค้นในต้นฉบับ HTML ว่ามีลิงก์ไปหน้า noindex หรือหน้าที่ redirect หรือไม่
เครื่องมือที่เกี่ยวข้อง
- ตรวจ sitemap.xml ตรวจขนาด URL lastmod และ hreflang ตามกฎของ Google
- ตรวจว่า AI crawler เข้าเว็บได้ไหม วาง robots.txt แล้วดูว่าบอทแต่ละตัวอ่านหน้าไหนได้
แหล่งอ้างอิง
- Google Search Central — Introduction to robots.txt
- Google Search Central — Block Search indexing with noindex
- Google Search Central — How to specify a canonical URL
- Google Search Central — Build and submit a sitemap
- Google Search Central — Link best practices
- Google Search Central — Crawl budget management for large sites
- sitemaps.org — Sitemaps XML format
- Search Console Help — Removals tool