April
28th,
2017
最近剛好在處理 Sitemap 的問題,如果有在做 SOE 的朋友應該都知道 Sitemap 的重要性,他可以為搜索引擎的蜘蛛提供瀏覽整個網站的連結,藉此讓搜尋引擎更認識你的網站,後來就想在自己的部落格來玩玩看,就找到這個方法,不使用任何 Jekyll 套件,就能輕鬆產出 sitemap.xml。
因為我的部落格是使用 Github Pages 的服務,所以 Jekyll 是執行
--safe
模式,因此也不能使用客製套件
Sitemap 格式
sitemap.xml
裡面包含網站內的各個連結,他有個固定的格式,如下:
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>https://blog.poychang.net/generating-sitemap-in-jekyll-without-plugin/</loc>
<lastmod>2017-04-27T23:42:00+08:00</lastmod>
<changefreq>monthly</changefreq>
<priority>0.5</priority>
</url>
</urlset>
Sitemap 必須符合以下條件:
- 以起始
<urlset>
標記做為開頭,並以結束</urlset>
標記結束 - 指定
<urlset>
內的名稱領域 (通訊協定標準) - 讓每個 URL 中包含一個
<url>
項目做為母層 XML 標記 - 在每個
<url>
母層標記包含一個<loc>
子層項目
每一組 <url>
就代表一個頁面,其中屬性說明如下:
loc
網頁的 URLlastmod
檔案的最後修改日期changefreq
網頁可能變更的頻率,有效值如下:- always
- hourly
- daily
- weekly
- monthly
- yearly
- never
priority
此 URL 相對於您網站上的其他 URL 的優先順序,有效值從 0.0 到 1.0
自動產生 sitemap.xml 內容
在 Jekyll 我們可以透過 {% for post in site.posts %}
來遍巡文章,或 {% for page in site.pages %}
來遍尋頁面,藉此取得各頁面的 metadata,然後寫入 xml 中,因此可以在 jekyll 專案裡面建立一個 sitemap.xml
檔案,內容如下:
透過上面的程式碼,我們可以在部落格文章(post)或頁面(page)中,使用下列 metadata 來提供或修改相關資訊,格式如下:
sitemap:
lastmod: 2014-01-23
priority: 0.7
changefreq: 'monthly'
exclude: 'yes'
補充說明
在 Google Search Console 的提交 Sitemap 說明文件中提到, Sitemap 檔案要使用 UTF-8 編碼,如果遇到下列字元,需轉換成溢出碼。
字元 | 逸出碼 |
---|---|
& 符號 | & |
單引號 | ' |
雙引號 | " |
大於 | > |
小於 | < |
參考資料: