Tutorial Laravel: Membuat Sitemap Generator

Thumbnail Tutorial Laravel: Membuat Sitemap Generator

Sitemap adalah salah satu elemen penting dalam optimasi SEO sebuah website. Dengan adanya sitemap, mesin pencari seperti Google dapat lebih mudah mengindeks konten yang ada pada sebuah situs. Dalam artikel ini, kita akan membahas langkah-langkah membuat sitemap generator menggunakan Laravel, sebuah framework PHP yang populer. Tutorial ini diharapkan dapat membantu kamu memahami cara membuat sitemap secara otomatis.

Apa itu Sitemap?

Menurut semrush.com, sitemap adalah file yang menampilkan struktur dari sebuah website, termasuk halaman dan content, serta relasi keduanya. Ada sitemap yang digunakan untuk membantu mesin pencari merayapi situs dengan lebih efisien (XML sitemap) dan ada sitemap yang dimaksudkan untuk membantu pengguna menavigasi website dengan lebih baik (HTML sitemap).

Menurut developers.google.com, sitemap adalah file yang berisi informasi mengenai halaman, video, dan file lain pada situs web, serta bagaimana elemen-elemen tersebut saling terhubung. File ini membantu mesin pencari seperti Google untuk melakukan crawling (perayapan) situs dengan lebih efektif. Sitemap berfungsi memberi tahu mesin pencari dan halaman file mana yang dianggap penting pada sebuah situs web, sekaligus menyediakan informasi tambahan tentang file tersebut, seperti tanggal pembaruan terakhir dan ketersediaan versi dalam berbagai bahasa.

Kenapa Harus Ada Sitemap?

Semakin besar dan kompleks sebuah situs web, semakin sulit bagi pengguna dan mesin pencari untuk menavigasinya. Meskipun halaman situs kamu sudah terhubung dengan baik melalui menu atau tautan antar halaman, keberadaan sitemap tetap penting untuk meningkatkan efisiensi crawling dan memberikan pengalaman yang lebih baik. Sitemap dapat membantu mesin pencari, menemukan halaman-halaman penting yang mungkin terlewat, terutama pada situs dengan ribuan halaman atau situs baru yang belum memiliki banyak tautan eksternal.

Sitemap juga menawarkan berbagai manfaat, termasuk:

  • Peningkatan Keterjangkauan 
    Sitemap XML membantu mesin pencari menemukan dan mengindeks halaman penting lebih mudah, terutama pada situs besar yang terbatas oleh crawl budget.
  • Indeksasi Lebih Cepat 
    Pada situs baru, sitemap mempercepat proses peringkat di mesin pencari. Untuk situs yang sering memperbarui konten, perubahan dapat terdeteksi lebih cepat jika tercantum dalam sitemap.
  • Pengalaman Pengguna yang Lebih Baik 
    Sitemap HTML memudahkan pengguna menjelajahi situs Anda dengan menampilkan semua halaman penting di satu tempat.

Sitemap menjadi sangat berguna untuk situs besar, situs baru, atau situs dengan banyak konten kaya akan media seperti video dan gambar. Google juga dapat menggunakan informasi tambahan dari sitemap untuk meningkatkan visibilitas di hasil pencarian, termasuk di Google News.

Cara Membuat Sitemap di Laravel

Sitemap yang akan dibuat pada tutorial ini adalah sitemap XML yang berfungsi untuk membantu mesin pencari agar halaman pada situs web dapat terindeks lebih cepat.

Pertama, siapkan proyek terlebih dahulu. Namun pada tutorial ini saya akan menggunakan proyek yang telah dibuat pada tutorial cara membuat url slug di Laravel, karena pada tutorial tersebut telah terdapat banyak url slug yang diperoleh secara otomatis juga, nantinya semua url tersebut akan dimasukkan ke file sitemap.xml yang dilakukan hanya dengan satu pemanggilan perintah di terminal.

Pembuatan sitemap generator di Laravel akan dibantu dengan package spatie/laravel-sitemap. Install terlebih dahulu package tersebut dengan perintah:

composer require spatie/laravel-sitemap

Kemudian, buatlah sebuah file untuk membuat perintah baru khusus untuk menjalankan sitemap generator dengan cara:

php artisan make:command GenerateSitemap

Bukalah file GenerateSitemap.php yang ada di folder Commands, lalu sesuaikan dengan kode berikut:

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Spatie\Sitemap\Sitemap;
use Spatie\Sitemap\Tags\Url;
use Carbon\Carbon;

// model yang memiliki slug
use App\Models\Article;
class GenerateSitemap extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'app:generate-sitemap';
    
    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Generate sitemap for this website';
    
    /**
     * Execute the console command.
     */
    public function handle()
    {
        try {
            $sitemap = Sitemap::create();
            $articles = Article::orderBy('updated_at', 'DESC')->get();
            
            foreach ($articles as $article) {
                $lastMod = Carbon::parse($article->updated_at);
                $sitemap->add(Url::create("/{$article->slug}")
                    ->setLastModificationDate($lastMod)
                    ->setChangeFrequency(Url::CHANGE_FREQUENCY_DAILY)
                    ->setPriority(0.9)
                );
            }
            
            // statis URLs jika ada
            $sitemap->add(Url::create('/privacy-policy')->setPriority(0.4)->setChangeFrequency(Url::CHANGE_FREQUENCY_MONTHLY));
            $sitemap->add(Url::create('/disclaimer')->setPriority(0.4)->setChangeFrequency(Url::CHANGE_FREQUENCY_MONTHLY));
            $sitemap->add(Url::create('/contact')->setPriority(0.4)->setChangeFrequency(Url::CHANGE_FREQUENCY_MONTHLY));
            $sitemap->add(Url::create('/about')->setPriority(0.4)->setChangeFrequency(Url::CHANGE_FREQUENCY_MONTHLY));
            $sitemap->add(Url::create('/')->setPriority(1.0)->setChangeFrequency(Url::CHANGE_FREQUENCY_DAILY));
            
            // Simpan sitemap ke folder public
            $publicHtmlPath = public_path('sitemap.xml');
            $sitemap->writeToFile($publicHtmlPath);
            
            $this->info('Sitemap generated successfully.');
        } catch (\Exception $e) {
            $this->error('Error: ' . $e->getMessage());
            $this->error('File: ' . $e->getFile() . ' on line ' . $e->getLine());
        }
    }
}

Simpan dan kemudian jalankan perintah di bawah ini pada terminal:

php artisan app:generate-sitemap

Seharusnya, jika berhasil akan muncul file sitemap.xml di dalam folder public. Cobalah jalankan proyek Laravel tersebut kemudian akses melalui browser pada url localhost:8000/sitemap.xml. Hasilnya akan seperti gambar:

Isi file sitemap.xml yang digenerate melalui terminal dengan command php artisan

Bagaimana jika ingin memperbarui sitemap setiap menambahkan record baru ke tabel articles tanpa perlu menjalankan command yang telah dibuat sebelumnya melalui terminal?

Kamu bisa menggunakan metode statis dari class Artisan:call() untuk menjalankan command untuk generate sitemap tepat setelah menambahkan record baru. Untuk contoh, bukalah file ArticleController.php dan modifikasi kode yang ada pada fungsi store().

<?php

namespace App\Http\Controllers\Api;

// ...

use Illuminate\Support\Facades\Artisan;

class ArticleController extends Controller
{
    // ...
    
    public function store(Request $request) {
        $request->validate([
            'title' => 'required|string',
            'content' => 'required|string'
        ]);
        
        $article = $request->only('title', 'content');
        
        Article::create($article); // menyimpan ke tabel
        Artisan::call('app:generate-sitemap'); // memanggil command untuk generate sitemap
        
        return response()->json([
            'message' => 'Artikel berhasil disimpan'
        ], 201);
    }
}

Sekarang, cobalah menambahkan artikel baru secara manual melalui aplikasi seperti Postman atau jika tidak ingin menggunakan aplikasi, modifikasi saja kode di atas dan buat secara hard code.

Kesimpulan

Sitemap adalah elemen penting dalam optimasi SEO karena membantu mesin pencari mengindeks konten situs dengan lebih efisien, terutama pada situs besar atau baru yang memiliki banyak halaman atau konten yang kayak oleh media. Dalam artikel ini, kita telah mempelajari cara membuat sitemap generator menggunakan Laravel, yang memanfaatkan package Spatie untuk menghasilkan sitemap XML secara otomatis. Dengan implementasi ini, halaman penting di situs web milikmu dapat lebih mudah terindeks, memberikan manfaat seperti peningkatan keterjangkauan, indeksasi yang lebih cepat, dan pengalaman pengguna yang lebih baik. Langkah-langkah ini memastikan situs web tetap optimal di mata mesin pencari dan pengguna.

Sumber: Semrush, Developers Google, GitHub Spatie Laravel Sitemap