sitemap.xml 應該算是 SEO 中相當重要的一個檔案,告訴搜尋引擎到底網站中有哪些資源是公開瀏覽的,可惜 Laravel framework 並沒有支援這項功能,必須透過其他工具達成。
以下介紹二個目前看到比較欣賞的解決方法。
spatie/laravel-sitemap
spatie/laravel-sitemap 這個工具的作法非常直接,直接用網路爬蟲爬整個網站,並把找到的 URL 轉成 sitemap。
優點是這個方法可以全自動的建立完整的 sitemap,且可以排程背景自動更新。缺點使用爬蟲來掃網站,overhead 實在很大,特別是對大型網站來說更新會是大工程。
另外個人不推薦使用 spatie 的原因,是之前幾次想要使用他們家的工具、extend 都遇到很多設計上的問題。像是 package 綁得很死,容易發生 conflict;設計上不夠仔細,想要透過 interface 擴充功能,卻發現 interface 沒有文件告訴你應該要實作什麼,甚至官方自己開發的程式都在 method 中做了一些無關的動作。
建立 sitemap 專用 Middleware
這個方法是 FDisk 在 StackOverflow 上提出來的,在 route 中自行設定哪一些 route 需要塞進 sitemap 中,並透過 middleware 來建立 sitemap cache data。
這個方法的缺點就是必須自行在 route 中決定是否要套用 sitemap 用 middleware,但是 Laravel 中的 grouping 功能可以簡化這項工作。優點就是只要有使用者瀏覽網頁、爬蟲爬過,就會自動更新 sitemap,不會消耗太多資源也不用排程。
個人目前覺得這個算是相當中庸的解決方案,只要 cache 設定妥當,幾乎不會消耗什麼系統資源。
經 CQD 提醒,一直戳 cache 在大型網站還是會造成瓶頸,以上二種方式可能都不太適合。