Hugo 自動更新文章最後修改日期:簡化管理步驟、提升SEO
前言
🔗常會有編輯或是更新文章內容的情況,通常為了SEO或是告知讀者此文屬於最新的內容,通常需要標示文章的最後修改日期,原本都是使用Front Matter,在每篇的文章內容裡,若想顯示文章的最後編輯時間,就會加上lastmod
欄位並加上日期,但使用起來其實蠻麻煩的,因為每次修改文章就要對欄位進行編輯,若有大量文章,那步驟就會很繁瑣,查詢了資料,發現其實可以直接在config.toml
,新增預設的Front Matter參照順序就能在文章未添加使用lastmod
的情況下,自動代入任何想要的值,達到預設顯示lastmod
的效果。
方法
🔗只要在config.toml
加上以下語法:
toml[frontmatter]
lastmod = ["lastmod" ,':fileModTime', ":git", "date"]
:fileModTime
: 檔案的最後修改時間
lastmod
: 原本的lastmod日期
:git
: 據說是可以使用 git 的 commit 時間當作顯示日期,但這邊沒做更多的研究。
date
: 文章的發布日期
這個方法就是修改lastmod
的預設資料(由排序第一的優先顯示,若找不到再往下一個尋找。)
所以語法其實只要這樣就好。
toml[frontmatter]
lastmod = ["lastmod" ,':fileModTime']
若文章沒有lastmod
此欄位,則預設使用:fileModTime
為文章的最後修改時間。
但這樣的方式,會導致每篇文章都會顯示最後修改時間,畢竟通常文章的date
與:fileModTime
都會有差異。
我的作法是,藉由修改根目錄\themes\{your theme}\layouts\partials\post_meta\date.html
去達到部分文章修改日期隱藏的效果。
程式碼:
Html{{- if not .Date.IsZero }}
<div class="meta__item-datetime meta__item">
{{ partial "svg/calendar.svg" (dict "class" "meta__icon") -}}
<time class="meta__text" datetime="{{ .Date.Format "2006-01-02T15:04:05Z07:00" }}">
{{- .Date.Format (.Site.Params.dateformat | default "January 02, 2006") -}}
</time>
{{- $dateDiff := .Lastmod.Sub .Date -}}
{{- if ge $dateDiff.Hours 100 }}
<time class="meta__text" datetime="{{ .Lastmod.Format "2006-01-02T15:04:05Z07:00" }}">(
{{- T "meta_lastmod" }}: {{ .Lastmod.Format (.Site.Params.dateformat | default "January 02, 2006") -}}
)</time>
{{- end -}}
</div>
{{- end }}
修改部分如下,邏輯為先計算文章日期.Date
與 修改日期.Lastmod
的時間差異。
若時間差異大於100小時,則顯示修改日期。(此數值可以自己修改,因為本身習慣從文章撰寫到發佈通常耗時會小於一個禮拜,所以只要修改日期多於文章日期一個禮拜,就代表文章有內容更新即顯示修改日期。)
HTML{{- $dateDiff := .Lastmod.Sub .Date -}}
{{- if ge $dateDiff.Hours 100 }}
<time class="meta__text" datetime="{{ .Lastmod.Format "2006-01-02T15:04:05Z07:00" }}">(
{{- T "meta_lastmod" }}: {{ .Lastmod.Format (.Site.Params.dateformat | default "January 02, 2006") -}}
)</time>
{{- end -}}
結語
🔗使用此方法可以有效率的管控修改日期,甚至可以只使用最新的修改日期為發佈日期,達到讀者觀看時都會覺得文章是剛發佈的內容是全新的,至於瀏覽器會怎麼判斷,SEO會如何排名就不清楚了😎。
Alvin
軟體工程師,喜歡金融知識、健康觀念、心理哲學、自助旅遊與系統設計。
相關文章
留言區 (0)
尚無留言