Loading...

Generate Sitemap di Laravel

Dalam tren saat ini sebagian besar Programmer atau Blogger sangat suka menggunakan CMS seperti Wordpress, Joomla,Drupal, October CMS dll … untuk menulis blog mereka atau mempublish artikel. SEO adalah kunci untuk mendapatkan audience sebanyak mungkin. Salah satu poin penting yang harus diingat ketika ingin mengoptimalkan SEO adalah pembuatan SITEMAP.

Tidak seperti kembanyakan CMS's yang kebanyakan sudah ada fitur otomatis untuk meng-generate sitemap, di Laravel kita perlu melakukan beberapa langkah untuk bisa meng-generate sitemap.

PERSIAPAN

Saya harap anda sudah membuat blog atau website dengan menggunakan Laravel.

Step 1 - Install laravel-sitemap Package

untuk detail package kamu dapat menarinya di Github repository link Laravel Sitemap, tetapi untuk sekarang anda dapat mengikuti tutorial ini.

Installation

Pastikan anda berada di root folder dari Project Laravel anda, kemudian masukkan composer command berikut

composer require spatie/laravel-sitemap

Step 2 - Mulai Code

untuk memastikan package telah terinstall dengan baik sesuai keinginan kita, anda bisa melakukan test di web.php

use Spatie\Sitemap\SitemapGenerator;

Route::get('/sitemap', function(){
  /** The following line creates sitemap.xml in public folder based on your website_url  */
  SitemapGenerator::create('http://website_url')->writeToFile('sitemap.xml');
);

kemudian buka browser dan ketik http://127.0.0.1:8000/sitemap, perintah diatas akan membuat file sitemap.xml pada folder public Laravel.

code diatas juga otomatis akan men-scan web url dan cek semua link untuk ditambahkan pada file sitemap.xml, tetapi jika anda ingin menambahkan spesifik URL atau dinamis URL karena suatu kebutuhan tertentu, anda dapat melakukannya dengan perintah berikut:

use Spatie\Sitemap\Sitemap;
use Spatie\Sitemap\Tags\Url;

$sitemap = Sitemap::create()
    ->add(Url::create('/newsletter'))
    ->add(Url::create('/contact_us'))
    ->add(Url::create('/posts'));
/** Now you haved added custom URL's, now add dynamic URL's for SEO */
$posts = Posts::published()->get();
foreach ($posts as $post) {
    $sitemap->add(Url::create("/post/{$post->slug}"));
}
$sitemap->writeToFile(public_path('sitemap.xml'));

code diatas untuk mengcustom file sitemap.xml berdasarkan kebutuhan anda, anda dapat menambahkan beberapa baris lainnya sesuai dengan kebutuhan anda.

Step 3 - Automate Sitemap Generation

Jika anda menulis blog setiap hari kemudian menggenerate sitemap setiap hari, itu akan menjadi pekerjaan merepotkan untuk anda. anda dapat meng-generate sitemap secara otomatis dengan sangat mudah menggunakan artisan command.

php artisan make:command GenerateSitemap

Perintah diatas akan membuat sebuah file GenerateSitemap pada folder app\Console\Commands. sekarang buka file tersebut kemudian ikuti code dibawah ini.

use Spatie\Sitemap\Sitemap;
use Spatie\Sitemap\Tags\Url;

protected $signature = 'sitemap:generate';

protected $description = 'Generate the sitemap';

public function handle()
{
        $sitemap = Sitemap::create()
            ->add(Url::create('/newsletter'))
            ->add(Url::create('/contact_us'))
            ->add(Url::create('/posts'));
        $posts = Post::published()->get();
        foreach ($posts as $post) {
            $sitemap->add(Url::create("/posts/{$post->slug}"));
        }
        $sitemap->writeToFile(public_path('sitemap.xml'));
}

secara keseluruhan GenerateSitemap akan menjadi seperti berikut

use Spatie\Sitemap\Sitemap;
use Spatie\Sitemap\Tags\Url;

class GenerateSitemap extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'sitemap:generate';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Generate the sitemap';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $sitemap = Sitemap::create()
            ->add(Url::create('/newsletter'))
            ->add(Url::create('/contact_us'))
            ->add(Url::create('/posts'));
        $posts = Post::published()->get();
        foreach ($posts as $post) {
            $sitemap->add(Url::create("/posts/{$post->slug}"));
        }
        $sitemap->writeToFile(public_path('sitemap.xml'));
    }
}

Step 4 - Menambahkan Laravel Task ke Scheduling (Cronjob)

buka file \App\Console\Kernel.php dan tambahkan baris berikut untuk membuat Laravel jobs secara otomatis.

protected function schedule(Schedule $schedule)
{
    $schedule->command('sitemap:generate')->daily();
}

code diatas akan meng-generate sitemap setiap hari pada tengah malam, kamu juga bisa mensetting cronjob sesuai dengan keinginanmu. untuk informasi detail tentang cronjob kamu bisa baca di Laravel Documentation.

Step 5 - Jalankan cronjob pada cloud server

Pada langkah terakhir, kamu perlu untuk setup cronjob scheduler pada server anda.

sudo crontab -e

jika kamu baru pertama kali membuat crontab, maka akan ada perintah untuk memilih code editor.

setelah file crontab terbuka, kemudian tambahkan perintah berikut.

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

silahkan ubah path-to-your-project dengan lokasi project anda berada, kebanyakan project akan berada pada /var/www/html atau /var/www/html/project_anda.

Laravel task scheduler yang berada pada path-to-your-project akan meng-generate sitemap secara otomatis setiap hari. jadi anda bisa relax dan berfikir untuk artikel anda yang lain.

Terima Kasih.

Share this Post: