Automatically Updating the Last Modified Date of Hugo Posts: Streamlining Management Steps and Enhancing SEO
Foreword
🔗There are often situations where posts need to be edited or updated that show updated time on the post, usually to improve SEO or inform readers that the content is the latest. Originally, the Front Matter was used, and within each post's content, the lastmod
field along with a date would be added to display the last editing time of the post. However, this process was quite tedious as it required editing the field every time an post was modified. With a large number of posts, this procedure became intricate. Upon researching, it was discovered that it's possible to directly add a default Front Matter reference order in the config.toml
file. This allows automatic insertion of any desired value for lastmod
in cases where it's not explicitly used in the post. This achieves the desired effect of default lastmod
display.
Solution
🔗Simply by adding the following syntax to config.toml
:
toml[frontmatter]
lastmod = ["lastmod" ,':fileModTime', ":git", "date"]
:fileModTime
: The last modification time of the file.
lastmod
: The original lastmod date.
:git
: It is said to be possible to use the commit time from git as the display date, but further research has not been conducted here.
date
: The publication date of the post.
This method involves modifying the default data for lastmod
(prioritizing the one listed first in the order; if not found, moving on to the next) to be displayed.
So, the syntax can be as simple as this.
toml[frontmatter]
lastmod = ["lastmod" ,':fileModTime']
If an post doesn't have the lastmod
field, then the default behavior is to use :fileModTime
as the last modification time of the post.
However, this approach would result in each post displaying the last modification time, since typically there is a difference between the post's date
and :fileModTime
.
My approach involves modifying root\themes\{your theme}\layouts\partials\post_meta\date.html
to achieve the effect of hiding the modification date for certain posts.
Code:
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 }}
The modification involves the following changes, with the logic being to calculate the time difference between post date.Date
and modification date.Lastmod
.
If the time difference is greater than 100 hours, then the modification date is displayed.
(This value can be adjusted according to personal preference. Since I'm accustomed to the timeframe between writing an post and publishing it being usually less than a week, as long as the modification date is more than a week after the post date, it indicates content update and the modification date is shown.)
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 -}}
Conclusion
🔗By employing this method, it's possible to efficiently manage modification dates and even use only the latest modification date as the publication date. This creates a perception for readers that the content is freshly published and entirely new. As for how browsers might interpret this and the impact on SEO ranking, that's a bit uncertain 😎.
Alvin
Software engineer, interested in financial knowledge, health concepts, psychology, independent travel, and system design.
Related Posts
Discussion (0)
No comments yet.