สร้าง Sitemap บนเว็บไซต์ด้วย Laravel ทำได้อย่างไร?

การทำ Sitemap เป็นการช่วยบอก Crawler ของ Search Engine รู้ได้ว่าเว็บไซต์ของเรามี link อะไรที่สามารถค้นพบได้บ้าง ใบบทความนี้จะมาสอนการทำ Sitemap สำหรับเว็บไซต์ที่เขียนด้วย Laravel โดยใช้ package spatie/laravel-sitemap
Sitemap คืออะไร?
Sitemap เป็นไฟล์ xml ที่ให้เราระบุข้อมูลเกี่ยวกับ link ที่มีบนเว็บไซต์ของเรา Search Engine อย่าง Google สามารถอ่านข้อมูลในไฟล์ sitemap ที่เราทำไว้แล้วจะทำการ crawl เว็บไซต์ของเราได้ตาม link หน้าเวปที่เราใส่ไว้ใน sitemap
แล้วเว็บของเราจำเป็นต้องมี sitemap มั้ย?
ถ้าเวปที่เราทำมีการ link ภายในอย่างเหมาะสม Google สามารถค้นพบ link บนเว็บของเราได้เองอยุ่แล้ว แต่การมี sitemap จะช่วยให้ crawler ค้นเวปเราได้ดีขึ้นถ้าเรามีเวปขนาดใหญ่หรือมีโครงสร้างความซับซ้อน แต่ไม่ได้หมายความว่าถ้าเรามีการทำ sitemap แล้วจะเป็นการการันตีว่าทุก ๆ link ใน sitemap จะมีการ crawl หรือทำ index เพราะว่า google จะมีการใช้อัลกอริทีมที่ซับซ้อนในการ schedule crawling แต่อย่างไรก็ตามเว็บของเราจะได้ประโยชน์จากการทำ sitemap และไม่มีข้อเสียจากการทำ sitemap อยู่ดี
เราต้องใช้ sitemap เมื่อ:
- เป็นเว็บไซต์ขนาดใหญ่ ทำให้บางครั้ง Google อาจจะมองข้ามบาง link หรือ page ใหม่ที่เพิ่งจะถูกสร้างขึ้นมาใหม่ได้
- เว็บไซต์มีเนื้อหาที่ไม่ได้ link ถึงกันได้ทั้งหมด เราสามารถใช้ sitemap เพื่อบอกให้ Google รู้ได้ว่ามี link ไหนที่อาจจะไม่ได้ถูก reference จากหน้าเวปหลักของเราที่ Google อาจจะเข้าไม่ถึงได้
- เป็นเว็บไซต์ที่เพิ่งสร้างขึ้นมาใหม่ หรือมี link จากเวปอื่นเชื่อมมาถึงค่อนข้างน้อย Googlebot รวมถึง web crawlers crawl อื่น ๆ จะตาม crawler web ไปทีละหน้า ๆ ถ้าเวปของเราไม่เคยถูกอ้างอิงที่ไหนเลย Google ก็อาจจะไม่มีทางหาเวปเราเจอได้
นี่เป็นเพียงคำอธิบายส่วนหนึ่งเท่านั้น สามารถศึกษาเพิ่มเติมเกี่ยวกับการทำ Sitemap ได้ที่เว็บ Google Search Central
การทำ Sitemap ใน Laravel
ขั้นตอนการทำ sitemap ที่เราจะอธิบายในบทความนี้มีดังนี้
- require spatie/laravel-sitemap
- สร้าง artisan command
- สั่ง run command ใน schedule
- เพิ่ม sitemap ใน robots.txt
ขั้นแรกทำการ require package spatie/laravel-sitemap
composer require spatie/laravel-sitemap
ถัดมาสร้าง Artisan command สำหรับ ทำ sitemap
// console.php
use Spatie\Sitemap\SitemapGenerator;
Artisan::command('sitemap', function () {
SitemapGenerator::create('https://example.com')
->writeToFile(public_path('sitemap.xml'));
})->purpose('Create Sitemap');
จากตัวอย่างเราทำการเพิ่ม artisan command ที่ชื่อว่า sitemap ไว้ในไฟล์ console.php
โดยตรง เราสามารถ Generate File Command ขึ้นมาแยกต่างหากก็ได้ ในเมธอด create()
ระบุหน้าเว็บไซต์หลักของเราที่อยากให้ package ใช้เป็นหน้าเริ่มต้นในการสร้าง sitemap และสุดท้าย writeToFile()
ระบุ path ที่เราต้องการให้สร้างไฟล์ sitemap.xml
จากตัวอย่างสร้างไว้ใน public path เพื่อให้ Google เข้ามาเรียกไฟล์ได้
ที่นี้ถ้าหน้าเว็บของเรามีการใช้ javascript เพื่อ generate link หรือ render page ขึ้นมา package นี้ก็รองรับการทำงาน javascript ด้วยเหมือนกันแต่ต้องมีการ config เพิ่มเติม สามารถดูวิธีการได้ที่ document ของ package
ลองเรียกคำสั่ง artisan command เพื่อสร้าง stiemap.xml
php artisan sitemap
ตัวอย่างไฟล์ sitemap.xml ที่ถูก Generate ขึ้น
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml">
<url>
<loc>https://example.com</loc>
<lastmod>2021-02-06T23:47:13+07:00</lastmod>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
<url>
<loc>https://example.com/url-1</loc>
<lastmod>2021-02-06T23:47:13+07:00</lastmod>
<changefreq>daily</changefreq>
<priority>0.8</priority>
</url>
<!-- URL ที่เหลือ -->
</urlset>
ทีนี้แทนที่เราจะ manual run คำสั่ง artisan ทุกครั้ง เราสามารถเพิ่ม command ให้ run ผ่าน schedule ได้เลย
// app/Console/Kernel.php
<?php
class Kernel extends ConsoleKernel
{
protected function schedule(Schedule $schedule)
{
$schedule->command('sitemap')->daily();
}
// ...
}
เมื่อเราทำการ set cron ให้กับ Laravel Project ของเรา sitemap.xml ก็จะ update อัตโนมัติทุกวันเวลาเที่ยงคืน
สุดท้ายทำการเพิ่ม path sitemap.xml
ของเราไว้ในไฟล์ robots.txt ดังนี้
User-agent: *
Disallow:
Sitemap: https://example.com/sitemap.xml
ดูเพิ่มเติมเกี่ยวกับไฟล์ robots.txt
เพียงเท่านี้เมื่อ Google เริ่มมาค้นเจอเว็บของเราก็จะสามารถดูข้อมูล sitemap.xml ที่เราเตรียมไว้ให้ Google ค้น link ทั้งหมดบนเว็ปของเราได้เร็วขึ้นแล้ว แต่ถ้าอยากทดสอบว่าไฟล์ sitemap ที่เราสร้างขึ้น Google สามารถอ่านได้จริงเราสามารถทำการ submit ไฟล์ไปยัง Google ได้โดยตรงแต่ต้องมีการ verify domain ownership ก่อนซึ่งวิธีการสามารถศึกษาเพิ่มเติมได้ จาก Documentation ของ Google