คำตอบสั้น ๆ: แบ่ง Sitemap เป็นหลายไฟล์เมื่อ URL เกินขีดจำกัด พร้อมจัดกลุ่มตามชนิดเนื้อหาเพื่อให้วิเคราะห์ปัญหาการเก็บดัชนีได้ง่ายขึ้น
คู่มือนี้อธิบาย Sitemap Index ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย
ไฟล์ Sitemap หนึ่งไฟล์มีขีดจำกัดที่ 50,000 URL และขนาดไม่เกิน 50 MB เมื่อยังไม่บีบอัด เว็บข่าว เว็บอีคอมเมิร์ซ และเว็บที่มีเนื้อหาจากผู้ใช้มักเกินขีดนี้
แต่เหตุผลที่ควรแบ่ง Sitemap ไม่ใช่แค่เรื่องขีดจำกัด การแบ่งตามชนิดเนื้อหาทำให้อ่านรายงานใน Search Console ได้ว่ากลุ่มไหนถูกเก็บดัชนีดีและกลุ่มไหนมีปัญหา ซึ่งวิเคราะห์ไม่ได้เลยหากรวมทุกอย่างไว้ไฟล์เดียว
สิ่งที่ต้องเตรียม (Sitemap Index)
- สิทธิ์สร้างไฟล์บนเว็บเซิร์ฟเวอร์
- Google Search Console
- รายการ URL ทั้งหมดของเว็บ
ขั้นตอนที่ 1: ตรวจขนาดปัจจุบัน
curl -s https://example.com/sitemap.xml | grep -c '<loc>'
curl -sI https://example.com/sitemap.xml | grep -i content-length
หากเกิน 40,000 URL ควรเริ่มวางแผนแบ่ง อย่ารอจนถึงขีดจำกัดจริง
ขั้นตอนที่ 2: สร้างไฟล์ Sitemap Index
ไฟล์นี้ไม่มี URL ของหน้าเว็บ แต่ชี้ไปยัง Sitemap ย่อยแต่ละไฟล์
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>https://example.com/sitemap-pages.xml</loc>
<lastmod>2026-09-25T09:00:00+07:00</lastmod>
</sitemap>
<sitemap>
<loc>https://example.com/sitemap-posts-1.xml</loc>
<lastmod>2026-09-25T09:00:00+07:00</lastmod>
</sitemap>
<sitemap>
<loc>https://example.com/sitemap-posts-2.xml</loc>
<lastmod>2026-09-20T09:00:00+07:00</lastmod>
</sitemap>
<sitemap>
<loc>https://example.com/sitemap-products.xml</loc>
<lastmod>2026-09-25T09:00:00+07:00</lastmod>
</sitemap>
<sitemap>
<loc>https://example.com/sitemap-categories.xml</loc>
<lastmod>2026-09-18T09:00:00+07:00</lastmod>
</sitemap>
</sitemapindex>
ข้อกำหนด Sitemap Index หนึ่งไฟล์ชี้ไปยัง Sitemap ย่อยได้ไม่เกิน 50,000 ไฟล์ และซ้อนได้ชั้นเดียว คือ Sitemap Index ชี้ไปยัง Index อีกทีไม่ได้
ขั้นตอนที่ 3: จัดกลุ่มให้มีประโยชน์ในการวิเคราะห์
อย่าแบ่งตามลำดับ URL เฉย ๆ ให้แบ่งตามสิ่งที่คุณต้องการวิเคราะห์
- ตามชนิดเนื้อหา หน้าคงที่ บทความ สินค้า หมวดหมู่ ทำให้รู้ว่ากลุ่มไหนมีปัญหา
- ตามช่วงเวลา บทความปีนี้ ปีที่แล้ว ทำให้รู้ว่าเนื้อหาเก่าถูกถอดดัชนีหรือไม่
- ตามความสำคัญ หน้าที่สร้างรายได้แยกจากหน้าทั่วไป
เมื่อ Search Console รายงานว่า sitemap-products.xml มี 5,000 URL แต่เก็บดัชนีแค่ 1,200 คุณจะรู้ทันทีว่าต้องไปดูที่หน้าสินค้า
ขั้นตอนที่ 4: เขียน Sitemap ย่อย
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://example.com/blog/article-1/</loc>
<lastmod>2026-09-24T14:30:00+07:00</lastmod>
</url>
<url>
<loc>https://example.com/blog/article-2/</loc>
<lastmod>2026-09-20T09:15:00+07:00</lastmod>
</url>
</urlset>
เกี่ยวกับแท็กที่เคยใช้กัน
<lastmod>Google ใช้จริงและมีประโยชน์ แต่ต้องถูกต้อง หากตั้งเป็นวันนี้ทุกวันทั้งที่เนื้อหาไม่เปลี่ยน Google จะเลิกเชื่อและไม่สนใจค่านี้อีก<changefreq>และ<priority>Google ประกาศแล้วว่าไม่ใช้ ไม่ต้องใส่
ขั้นตอนที่ 5: สร้างอัตโนมัติด้วยสคริปต์
#!/bin/bash
set -euo pipefail
SITE=https://example.com
OUT=/var/www/example.com
CHUNK=10000
# ดึงรายการ URL พร้อมวันที่แก้ไข จากฐานข้อมูล
mysql -N -e "
SELECT CONCAT('$SITE/blog/', post_name, '/'), DATE_FORMAT(post_modified, '%Y-%m-%dT%H:%i:%s+07:00')
FROM wp_posts
WHERE post_status='publish' AND post_type='post'
ORDER BY post_modified DESC;" wordpress > /tmp/urls.tsv
split -l "$CHUNK" -d /tmp/urls.tsv /tmp/chunk-
i=1
for f in /tmp/chunk-*; do
{
echo '<?xml version="1.0" encoding="UTF-8"?>'
echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'
while IFS=$'\t' read -r url mod; do
printf ' <url><loc>%s</loc><lastmod>%s</lastmod></url>\n' "$url" "$mod"
done < "$f"
echo '</urlset>'
} > "$OUT/sitemap-posts-$i.xml"
i=$((i+1))
done
rm -f /tmp/chunk-* /tmp/urls.tsv
echo "สร้าง sitemap เสร็จ $((i-1)) ไฟล์"
ตั้งให้รันทุกคืนด้วย systemd Timer