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

7 กุมภาพันธ์ 2564 เวลาอ่าน 6 นาที
สร้าง 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

Phattarachai Chaimongkol

เกี่ยวกับ phattarachai.dev

ผมอ๊อฟนะครับ เป็นผู้ประกอบการอิสระ ที่ปรึกษาทางด้าน Web Application Development ให้แก่องค์กร ธุรกิจ SME และหน่วยงานราชการ
Web Developer ผู้มีใจรักใน Laravel เป็นพาร์ทเนอร์บริษัท Digital Agency ชั้นนำทางด้าน UX/UI เพื่อพัฒนาโปรเจคให้แก่ลูกค้า ผมช่วยสร้างเครื่องมือทางด้าน Web ที่มีคุณภาพให้ผู้ประกอบการดำเนินธุรกิจได้ง่ายขึ้นใช้งานได้จริง เน้นประสบการณ์ ความชำนาญ ผลงานคุ้มค่าเทียบเท่าจ้างงานกับบริษัทใหญ่ ๆ

ยามว่าง ๆ ชอบเล่นเกมส์บน Steam ครับ

เรื่องที่เกี่ยวข้อง

PHP function แสดงขนาดไฟล์แบบคนอ่านรู้เรื่อง เป็น KB, MB, GB
7 กุมภาพันธ์ 2564
PHP function แสดงขนาดไฟล์แบบคนอ่านรู้เรื่อง เป็น KB, MB, GB
คำสั่ง Postgresql ที่เอาไว้ใช้จัดการเกี่ยวกับ Replication
7 กุมภาพันธ์ 2564
คำสั่ง Postgresql ที่เอาไว้ใช้จัดการเกี่ยวกับ Replication
สรุป Taylor Otwell Keynote ใน Laracon US 2024 - Inertia 2.0, VS Code Extension และ Laravel Cloud
7 กุมภาพันธ์ 2564
สรุป Taylor Otwell Keynote ใน Laracon US 2024 - Inertia 2.0, VS Code Extension และ Laravel Cloud