【Laravel實戰】15分鐘教你如何用Laravel自動生成Sitemap
前言
我是每天在空中陪著你的哥布林工程師,今天想來聊一個很有用的密技,與SEO有關
相信大多數人都知道SEO(Search Engine Optimization)很重要,因為做好這項工作能為網站帶來優質的自然流量,而且還是免費的
免費的客戶,有哪個老闆不想要呢?
但你可能不知道的是,要做好Google搜尋引擎的SEO,最最優先的工作就是為你的網站生成Sitemap,幫助Google了解你的網站結構,才能方便它找時間請機器人來網站進行索引,也才有機會出現在搜尋結果清單內
你或許覺得現在Google的爬蟲機器人技術已經很強大了,就算沒有到 Google Search Console 提交 Sitemap 應該也會被索引吧。這想法只對了一半,就算爬蟲再無孔不入,如果你是新網站又或活在深山老林裡頭無人知曉,那爬蟲真的很難去找到你
既然 Sitemap 如此重要,該要如何撰寫呢? 這篇文章重點並非放在 SEO 介紹而是 Laravel 密技,就不說太多,直接列出可行的三種方式
方法1 自己生成sitemap.xml並撰寫網站架構
sitemap.xml檔案的內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url> # 第一組 URL
<loc>https://pandalab.org/</loc> # 必填
<lastmod>2005-01-01</lastmod> # 選填
<changefreq>monthly</changefreq> # 選填
<priority>0.8</priority> # 選填
</url>
<url> # 第二組 URL
<loc>https://pandalab.org/courses</loc>
</url>
</urlset>
是否覺得這種方法有點痛苦,因為這還只是兩個網址,哥布林挨踢頻道新官網剛上線兩天就已經超過67個網址
方法2 利用線上服務
當你打開瀏覽器輸入 "sitemap製作" ,將會找到有很多網站提供這樣的服務,也不乏免費的服務

但問題是,除非你的網站寫好之後就不再維護,否則生成 Sitemap 就會是一個持續的工作,老是要自己上這些網站生成檔案後再放回自家網站也太麻煩
嘿嘿,所以還好,我們有了 Laravel 給我們的第三種方法
方法3 利用 Laravel 來自動生成 Sitemap
你或許不知道,有個名為 spatie/laravel-sitemap 的套件能達成自動生成sitemap.xml,並放置於你指定的位置(通常是public資料夾)
更棒的是,你還能夠把這些工作全部自動化,讓 Laravel 定時幫你生成一份新的 sitemap。想學了嗎? 哥布林全部教給你
接下來我將就手動建立流程以及全自動建立流程來分別說明
手動建立Sitemap流程
思路是建立一個控制器方法以及路由規則,接著能夠透過請求網址的方式來建立Sitemap
Step 1.安裝 laravel-sitemap 套件
composer require spatie/laravel-sitemap
Step 2.撰寫控制器方法的內容
//app/Http/Controllers/SiteController.php
use Spatie\Sitemap\SitemapGenerator;
public function createSitemap()
{
SitemapGenerator::create('https://pandalab.org')->writeToFile(public_path('sitemap.xml'));
}
Step 3.撰寫路由規則
//routes/web.php
Route::get('/utilities/createsitemap','SiteController@createSitemap');
Step 4.手動建立Sitemap空白檔案
雖然此套件會幫你生成Sitemap,但是檔案得自己生成,所以需要在public資料夾底下建立sitemap.xml,並把權限開到最大
Step 5.呼叫程式來生成sitemap
訪問路徑/utilities/createsitemap,比如哥布林挨踢頻道官網網址為https://pandalab.org,那完整網址就該是 https://pandalab.org/utilities/createsitemap
上面五個步驟都完成了之後,如果沒有出現錯誤的話,sitemap應該就躺在public資料夾裡頭囉
自動建立Sitemap流程
思路是建立一個命令,接著能夠設定排程,定時更新Sitemap
Step 1.生成命令
輸入以下指令以生成命令檔案
php artisan make:command GenerateSitemap
修改此檔案內容如下:
//app/Console/Commands/GenrateSitemap.php
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Spatie\Sitemap\SitemapGenerator;
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 = '生成Sitemap檔案';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
SitemapGenerator::create(env('APP_URL'))->writeToFile(public_path('sitemap.xml'));
}
}
Step 2.現在可透過指令來生成Sitemap
php artisan sitemap:generate
Step 3.將指令納入排程,以便每日自動執行
編輯Kernel.php,加入以下排程
//app/Console/Kernel.php
protected function schedule(Schedule $schedule)
{
$schedule->command('sitemap:generate')->daily();
}
完成以上動作之後,你將會擁有一個自定義指令 sitemap:generate ,呼叫這個指令就能手動生成 Sitemap。另外每天 Laravel 也會自動呼叫這個指令,持續更新 Sitemap 以符合最新的網站結構
提交 Sitemap
當你終於生成出了 Sitemap 可千萬別忘了最後一步,就是要把檔案提交到 Google Search Console ,讓它知道我們網站的存在,以及裡頭結構為何
作法很簡單,搜尋 Google Search Console 就能找到網址,然後按照如下圖片所示來提交就完成囉

後記
與 Laravel 相識至今超過三年,雖然已經脫離初戀時光許久,但常常還能帶給我新的驚喜,比如今天所分享給你的 Sitemap 生成密技,就是我昨天才學會,並運用於我的哥布林挨踢頻道新官網裡頭。
只能說,Laravel沒有作不到,只有你沒想到
希望今天的分享內容你會喜歡,如果有任何問題或建議都歡迎在底下留言,如果你想支持我對你的幫助也歡迎你用右下角的分享功能把這篇文章分享出去。假如想和我直接聯絡的話,歡迎使用最上方的社群按鈕,你可以在那裡找到我
我是每天在空中陪著你的哥布林工程師,明天再見囉,掰



