想要訂閱Hugo靜態網站更新,除了依賴第三方提供的Email電子報服務,就是使用RSS feed這個古老的手段了。儘管現在已經越來越少人用,但RSS仍然是那些不想被搜尋引擎與演算法決定觀看內容的選擇。
Hugo內建支援RSS,大多主題也支援RSS。Hugo生成的RSS通常位於網站根目錄下的rss.xml
檔案內。如果想要讓人訂閱RSS,就提供網址給讀者就行了。
例如在RSS閱讀器Fluent Reader輸入:http://ivonblog.com/rss.xml
或https://ivonblog.com/index.xml
即可訂閱本站的RSS Feed,並收到新文章的通知。如果開啟全文收錄的話,甚至不用跳轉到本站也可以閱讀文章。
不過,RSS的問題在於它會將每一篇文章收錄進去,這代表不管我發什麼都會被人看光光 —— 比方說那些我刻意從首頁隱藏的敏感文章,一般從搜尋引擎進來的讀者不容易找到,可是訂閱RSS的就會被敏感文章轟炸。
儘管上面說現在比較少人用RSS,但我還是要考量到想單純看較為「乾淨」內容的RSS訂閱讀者,為此決定修改RSS的內容,過濾掉特定分類的文章。
1. 修改RSS範本#
Hugo預設的RSS範本可在
Github找到。要覆寫內建RSS的話,就是在網站根目錄新建layouts/_default/
目錄,再新增rss.xml
檔案,將預設的RSS範本內容填進去後再開始修改。
參考
Hugo文件了解RSS檔案的讀取順序,預設是layouts/index.rss.xml
優先,接著才是layouts/home.rss.xml
。
這裡要注意:有些網站主題會使用自己的RSS範本,例如我的MemE主題是使用index.sectionsrss.xml
來產生RSS (通常在config.toml
也會有RSS的相關設定)
那麼就要改成修改這個檔案。將位於網站根目錄下的themes/meme/layouts/index.sectionsrss.xml
複製到/layouts/index.sectionsrss.xml
,再修改這個檔案。
開啟RSS.xml的檔案內容,找到這一段
{{ range $pages }}
{{ $page := . }}
{{- $author := partial "utils/author.html" $page -}}
<item>
這一段就可以寫判斷式來過濾產生的RSS內容了。我的過濾方式:讀取文章的frontmatter裡面的categories
陣列,讀取第一個值,如果是要過濾的文章類別,那麼就跳過寫入RSS。
在<item>
的上方加入if判斷式,當文章的分類不是deepdark
的時候才寫入RSS。不過如果你有限定RSS是抓取最新10篇文章的話,此方法會導致該文章直接被鬼隱,導致產生的RSS不滿10篇。
{{ if ne (index (.Params.categories) 0 ) "deepdark" }}
然後在</item>
下方加入end
</item>
{{ end }}
2. 確認成果#
- 本機預覽,開啟
http://localhost:1313/rss.xml
,使用CTRL+F搜尋文章看是否已經成功過濾
hugo server -D
- 保險起見,生成靜態HTML
hugo
- 再開啟
public/rss.xml
查看內容是否已經正確過濾。