Beberapa tahun yang lalu search engines merekomendasikan submit sitemap untuk membantu mempercepat dalam mengindex sebuah website. Hal ini tentu bukan menjadi sebuah masalah yang menyusahkan, toh hanya membuat sitemap dan menyerahkan nya pada pihak search engines. Akan tetapi bagaimana cara membuat sitemap tersebut pada laravel ? Pada kesempatan kali ini, saya akan sedikit membahas bagaimana cara mudah membuat XML sitemap pada Larvel.
Apa Itu Sitemap ?
Sitemap (Peta Situs) Pasti tau dong ? Tapi jika anda masih bingung apa itu sitemap berikut beberapa penjelasan tentang sitemap :
Sitemap (Peta Situs) adalah sebuah file yang berisi daftar halaman web pada suatu website yang berfungsi untuk memberitahukan atau menginformasikan pada Google atau search engines lainnya tentang struktur konten pada website tersebut. Mesin pencari atau search engines melakukan crawlers atau merayapi sebuah situs dengan teknologi yang cerdas, seperti Googlebot misalnya.
Berikut beberapa alasan mengapa sitemap di perlukan pada sebuah website :
-
Anda memiliki website yang sudah sangat besar. Sehingga hal ini mengakibatkan Google web crawlers atau Googlebot mengabaikan untuk merayapi pada halaman yang baru saja dibuat atau pada halaman yang telah di perbaharui.
-
Website yang anda memliki arsip yang sangat besar dan konten yang anda miliki terisolasi atau tidak terkait satu sama lain.
-
Website anda masih baru dan memiliki beberapa link eksternal. Googlebot atau web crawlers lainnya merayapi atau menjelajahi sebuah web dengan mengikuti link yang tertaut satu sama lain, dari satu halaman ke halaman lainnya.
-
Website anda kaya akan konten, ditampilkan dalam google news atau menggunakan anotasi lain yang kompatibel dengan sitemap.
Mungkin website anda tidak memiliki kriteria yang telah dijabarkan diatas, akan tetapi tidak ada salahnya untuk submit sitemap karena telah di rekomendasikan oleh search engines.
Protokol Sitemap (Peta Situs)
Pada official website sitemap, menguraikan semua informasi yang anda butuhkan untuk membuat sitemap sendiri. Berikut adalah contoh kerangka dasar dalam membuat sebuah sitemap :
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://www.example.com/</loc>
<lastmod>2005-01-01</lastmod>
<changefreq>monthly</changefreq>
<priority>0.8</priority>
</url>
</urlset>
Sebagaimana yang terlihat, code diatas hanyalah sebuah code XML dengan invidual tag <url> untuk setiap halaman. Untuk satu file sitemap dalam menampung 50.000 records, akan tetapi anda juga dapat membuat nya menjadi beberapa bagian atau beberapa file. Dan file index menunjuk / mengarahkan ke file lainnya.
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>http://www.example.com/sitemap1.xml.gz</loc>
<lastmod>2004-10-01T18:23:17+00:00</lastmod>
</sitemap>
<sitemap>
<loc>http://www.example.com/sitemap2.xml.gz</loc>
<lastmod>2005-01-01</lastmod>
</sitemap>
</sitemapindex>
Dalam setiap tag <loc> terdapat sebuah url yang mengarah ke sitemap lainnya, seperti yang terlihat pada contoh diatas.
Pada tutorial kali ini, kita akan menggunakan style index dengan mengambil records dari berbagai table yang berbeda. Hal ini memungkinkan untuk menyesuaikan ssetiap URL dengan format yang benar tanpa harus membuat proses tambahan.
Membuat Sitemap Pada Controller
Sitemap yang akan kita buat memiliki dua bagian utama. Diantaranya postingan blog & kategori blog. Dan masing masing akan memiliki bagian tersendiri dan mengarahkan index pada bagian tersebut.
Langkah pertama buat sebuah sitemap controller :
php artisan make:controller SitemapController
Kemudian buka file controller tersebut dan saatnya untuk membuat index sitemap.
Membuat Sitemap Index
Langkah selanjutnya yakni membuat index sitemap, buat sebuah method index yang berfungsi untuk membuat generate XML yang dibutuhkan.
public function index()
{
$post = Post::orderBy('updated_at', 'DESC')->first();
$kategori = Category::orderBy('updated_at', 'DESC')->first();
return response()->view('sitemap.index', [
'post' => $post,
'kategori' => $kategori
])->header('Content-Type', 'text/xml');
}
Query post dan kategori dibutuhkan dalam membuat timestamp yang berfungsi untuk menginformasikan perubahan terakhir pada crawlers jika konten telah baru telah ditambahkan. Namun, jika anda tidak familiar dengan style tersebut, anda dapat mencoba style lainnya dengan megembalikan response object, dengan assigned view & pengaturan text/xml header.
Selanjutnya buat view dengan nama index.blade.php pada folder sitemap :
<?php echo '<?xml version="1.0" encoding="UTF-8"?>'; ?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>{{ url('sitemap/posts') }}</loc>
<lastmod>{{ $post->created_at->toAtomString() }}</lastmod>
</sitemap>
<sitemap>
<loc>{{ url('sitemap/categories') }}</loc>
<lastmod>{{ $post->created_at->toAtomString() }}</lastmod>
</sitemap>
</sitemapindex>
Pada view() ini, hanya menambahkan timestamp created_at dan url sitemap lainnya serta menggunakan toAtomString untuk membuat format waktu yang benar.
Membuat URL pada Sitemap File
Langkah berikutnya adalah membuat setiap file URL. Mari tambahkan 2 method baru pada SitemapController. Dan kedua method tersebut bisa di katakan mirip :D berikut contohnya :
public function posts()
{
$posts = Post::all();
return response()->view('sitemap.posts', [
'posts' => $posts,
])->header('Content-Type', 'text/xml');
}
public function categories()
{
$categories = Category::all();
return response()->view('sitemap.categories', [
'categories' => $categories,
])->header('Content-Type', 'text/xml');
}
Selanjutnya buat view untuk post dengan nama posts.blade.php pada folder sitemap
<?php echo '<?xml version="1.0" encoding="UTF-8"?>'; ?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
@foreach ($posts as $post)
<url>
<loc>{{ url('/' . $post->slug) }}</loc>
<lastmod>{{ $post->created_at->toAtomString() }}</lastmod>
<changefreq>weekly</changefreq>
<priority>0.6</priority>
</url>
@endforeach
</urlset>
untuk kategori, duplikat view diatas dengan nama categories.blade.php pada folder sitemap
<?php echo '<?xml version="1.0" encoding="UTF-8"?>'; ?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
@foreach ($categories as $category)
<url>
<loc>{{ url('/' . $category->slug) }}</loc>
<lastmod>{{ $category->created_at->toAtomString() }}</lastmod>
<changefreq>weekly</changefreq>
<priority>0.6</priority>
</url>
@endforeach
</urlset>
Semua konfigurasi yang dibutuhkan telah siap, langkah terakhir buat route agar dapat mengakses halaman sitemap yang telah kita buat.
Route::get('/sitemap', 'SitemapController@index');
Route::get('/sitemap/posts', 'SitemapController@posts');
Route::get('/sitemap/categories', 'SitemapController@categories');
Anda mungkin bertanya, kenapa tidak menggunakan ekstensi .xml ? Karena .xml bukanlah sebuah keharusan dalam membuat sitemap. Akan tetapi jika anda ingin menggunakan ekstensi tersebut silahkan sesuaikan pada route anda. Misal :
Route::get('/sitemap.xml', 'SitemapController@index');
Comments