Featured image of post Hugo 如何在更新頁面的時候用 RSS 通知訂閱者?

Hugo 如何在更新頁面的時候用 RSS 通知訂閱者?

你可以在我更新頁面的時候收到通知了!

我的部落格有一個 /now(最近在幹嘛)的頁面,目前的規劃是拿來寫過去幾個月在做的事情,可以讓有點時間沒見的朋友快速 catch up,有點像是把社群貼文一次更新到這個頁面的感覺。

如果有訂閱我的 RSS 的朋友可能有發現,這個頁面最近這兩個月更新的時候,RSS 都會有新的 item。就像這樣:

RSS item 在 RSS reader 裡面的樣子

緣由

之所以這麼做,是因為我覺得除了第一次來的人們以外,應該很少人會去主動進去看,如果有更新的時候,也就沒什麼人會發現我更新了 ˊ_>ˋ

而靈感的來源,是來自 Sky 的 /now,他用的是一系列的 now + 更新時間 的文章來解決這個問題。但我比較偏好保持 /now 的 URL 一直不變,所以我才選擇在 RSS 上動手。

怎麼做到的?

我對 /now 的 RSS item 做了 2 件事情來達成我的目的:

  1. 讓 GUID 隨著頁面的「最後修改時間」更新而改變
    => 這樣 RSS reader 就會把更新過的 item 當成一個新的 item
  2. 在標題附註一下更新的時間
    => 不要訂閱者以為只是同樣的文章一直跳出來

RSS Item 就會變成這樣

如何客製化 RSS Feed

我用的 Hugo theme 是 Stack。要客製 RSS 的話,和要客製其他頁面的方式是一樣的,就是在 layouts 資料夾底下新增對應的檔案:layouts/_default/rss.xml

內容則是把 原本 repo 內的 rss.xml 複製一份過來,以這個為基礎去改。

複製完之後,可以把先把 Hugo server 起起來,到 http://localhost:1313/index.xml 看看一切正不正常。也可以隨便改個地方看看是不是真的有吃到這裡的設定。

開改!

GUID

首先是 GUID,我是這樣做的:

1
2
3
4
5
6
<guid>
    {{ .Permalink }}
{{- if eq .Slug "now" -}}                        // add
    {{ .Lastmod.Format "20060102" | safeHTML }}  // add
{{- end -}}                                      // add
</guid>

GUID 原本用的是 permalink。我在最後面再加上更新時間,就可以在更新的同時依舊保持唯一性。

但因為不是所有頁面或文章都需要做這件事情,所以我用 hardcode 的方式把 slug 是 now 的頁面撈出來。不然所有 item 的 GUID 全部都會一次被加上更新時間,導致在 RSS reader 把全部的文章當成新文章 XD

標題

標題也是用一樣的方式去標註:

1
2
3
4
5
6
<title>
    {{ .Title }}
{{- if eq .Slug "now" -}}                                // add
    ({{ .Lastmod.Format "20060102" | safeHTML }} 更新)  // add
{{- end -}}                                              // add
</title>

這麼做的好處是:改的這些東西只會出現在 RSS Feed 中,不會影響到原本的頁面,讀者就不會在頁面看到一些為了實現功能而加入的不相關的東西 XD

結語

老實說,我其實不太確定我這樣的做法是不是對的,也不知道有沒有什麼 bug。但我也大概一個月更新一次而已,應該不太會打擾到大家,如果真的有什麼問題的話再跟我說 XD

也希望這個做法可以給你一些靈感,或者讓你決定開始寫 /now 頁面,如果能有更好的解決方案的話那就再好不過啦~

與你的連結,是我寫部落格的動力

喜歡這篇文章的話,歡迎 在下方留言 或是 寄 Email 回饋給我!

也可以去 誰來我家 簽個到,或是去 看看其他文章 ~~

使用 Hugo 建立
主題 StackJimmy 設計