Hugo 自動更新文章最後修改日期:簡化管理步驟、提升SEO


August 21, 2023 程式語言

Hugo 自動更新文章最後修改日期:簡化管理步驟、提升SEO
由從 Front Matter 設置,改為使用文章檔案的修改日期為預設文章更新日期,簡化繁瑣流程,提升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會如何排名就不清楚了😎。

HugoSEO



Avatar

Alvin

軟體工程師,喜歡金融知識、健康觀念、心理哲學、自助旅遊與系統設計。

相關文章