From a0ace41ad3b0f4661e98d8fa8ef254369cc80d1e Mon Sep 17 00:00:00 2001 From: SayaAndy Date: Tue, 31 Mar 2026 00:06:46 +0700 Subject: feat: specify canonical hrefs for each page feat: specify more meta properties for search engines fix: correct user and catalogue meta format: specify og property names in property field feat: user profile description --- views/layouts/general-page.html | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'views/layouts') diff --git a/views/layouts/general-page.html b/views/layouts/general-page.html index 3f5bcfd..2114b1c 100644 --- a/views/layouts/general-page.html +++ b/views/layouts/general-page.html @@ -3,8 +3,14 @@ - {{- range $k, $v := .Meta }} - + {{- range .Meta }} + + {{- if eq .Property "og:description" }} + + {{- end }} + {{- if eq .Property "og:url" }} + + {{- end }} {{- end }} -- cgit v1.3.1+13 From 2bcf8ee39555ea98be309b85547c797b0d172b84 Mon Sep 17 00:00:00 2001 From: SayaAndy Date: Tue, 31 Mar 2026 00:22:59 +0700 Subject: feat: use semantic html tags for pages --- views/layouts/general-page.html | 16 ++++++++-------- views/pages/blog-page.html | 10 +++++----- views/partials/general-page-header.html | 2 +- 3 files changed, 14 insertions(+), 14 deletions(-) (limited to 'views/layouts') diff --git a/views/layouts/general-page.html b/views/layouts/general-page.html index 2114b1c..d7d11a3 100644 --- a/views/layouts/general-page.html +++ b/views/layouts/general-page.html @@ -186,7 +186,7 @@ flex-row sticky w-dvw h-fit xs:w-[90dvw] sm:left-0 sm:flex-col sm:fixed sm:w-fit z-20 shadow-[0_0_1rem_black]"> -
+
+
@@ -253,21 +253,21 @@
-
-
+

-
-
+
- +
diff --git a/views/pages/blog-page.html b/views/pages/blog-page.html index c81406f..3fc4526 100644 --- a/views/pages/blog-page.html +++ b/views/pages/blog-page.html @@ -1,12 +1,12 @@ {{ define "body" }}
-
- +
+

{{ .Title }}

{{ .L.Metadata.Published }}: - + +

{{ .L.Metadata.Action }}: {{ .ActionDate }}

{{ .ShortDescription }}

@@ -60,7 +60,7 @@ }); {{- end }} -
+ {{ end }} {{ define "header" }} diff --git a/views/partials/general-page-header.html b/views/partials/general-page-header.html index e019d3b..ac536d7 100644 --- a/views/partials/general-page-header.html +++ b/views/partials/general-page-header.html @@ -1,5 +1,5 @@ {{ .Title }} // SAYA TODAY
{{ block "header" . }}{{ end }} -

{{ .Title }}

+

{{ .Title }}

\ No newline at end of file -- cgit v1.3.1+13 From a8f566cbeb8358aca7fb4532d8b69c513ef197f3 Mon Sep 17 00:00:00 2001 From: SayaAndy Date: Tue, 31 Mar 2026 00:49:07 +0700 Subject: feat: add linked data --- internal/router/basic-handler.go | 4 ++++ internal/router/handlers/lang-blog-title.go | 16 ++++++++++++++++ internal/router/router.go | 12 ++++++++++++ views/layouts/general-page.html | 5 +++++ 4 files changed, 37 insertions(+) (limited to 'views/layouts') diff --git a/internal/router/basic-handler.go b/internal/router/basic-handler.go index 96d0f77..b973d01 100644 --- a/internal/router/basic-handler.go +++ b/internal/router/basic-handler.go @@ -53,6 +53,10 @@ func (r *BasicHandler) AddMeta(c *fiber.Ctx, supplements *Supplements, lang stri return []MetaField{{Name: "robots", Content: "noindex,nofollow"}}, nil } +func (r *BasicHandler) AddLinkedData(c *fiber.Ctx, supplements *Supplements, lang string, templateMap fiber.Map) (ld map[string]any, err error) { + return nil, nil +} + func (r *BasicHandler) RenderHeader(c *fiber.Ctx, supplements *Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) { return fiber.StatusNoContent, nil } diff --git a/internal/router/handlers/lang-blog-title.go b/internal/router/handlers/lang-blog-title.go index a9acdbb..5bfc6e7 100644 --- a/internal/router/handlers/lang-blog-title.go +++ b/internal/router/handlers/lang-blog-title.go @@ -81,6 +81,22 @@ func (r *BlogPageHandler) AddMeta(c *fiber.Ctx, supplements *router.Supplements, }, nil } +func (r *BlogPageHandler) AddLinkedData(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (ld map[string]any, err error) { + metadata, _, err := supplements.B2Client.ReadFrontmatter(lang + "/" + c.Params("title") + ".md") + if err != nil { + return nil, fmt.Errorf("failed to read frontmatter of the desired blog post: %w", err) + } + + return map[string]any{ + "@context": "https://schema.org", + "@type": "Article", + "headline": metadata.Title, + "description": fmt.Sprintf("%s [%s]", metadata.ShortDescription, metadata.ActionDate), + "author": map[string]string{"@type": "Person", "name": "Saya Andy"}, + "datePublished": metadata.PublishedTime.UTC().Format(time.RFC3339), + }, nil +} + func (r *BlogPageHandler) RenderBody(c *fiber.Ctx, supplements *router.Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) { _, pathParts, _, err := router.GetPathFromReferer(c) if err != nil { diff --git a/internal/router/router.go b/internal/router/router.go index 3ce7e3b..0d0ce8c 100644 --- a/internal/router/router.go +++ b/internal/router/router.go @@ -2,8 +2,10 @@ package router import ( "database/sql" + "encoding/json" "errors" "fmt" + "html/template" "log/slog" "net/url" "slices" @@ -78,6 +80,7 @@ type Route interface { ContentType() string Render(c *fiber.Ctx, supplements *Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) AddMeta(c *fiber.Ctx, supplements *Supplements, lang string, templateMap fiber.Map) (meta []MetaField, err error) + AddLinkedData(c *fiber.Ctx, supplements *Supplements, lang string, templateMap fiber.Map) (ld map[string]any, err error) RenderHeader(c *fiber.Ctx, supplements *Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) RenderBody(c *fiber.Ctx, supplements *Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) RenderFooter(c *fiber.Ctx, supplements *Supplements, lang string, templateMap fiber.Map) (statusCode int, err error) @@ -428,6 +431,15 @@ func (r *Router) generalPage(c *fiber.Ctx, route Route, lang string) error { slog.Warn("failed to receive meta", slog.String("path", path), slog.String("error", err.Error())) } + var ld map[string]any + if ld, err = route.AddLinkedData(c, r.supplements, lang, valueMap); err != nil { + slog.Warn("failed to receive linked data", slog.String("path", path), slog.String("error", err.Error())) + } + if ld != nil { + ldBytes, _ := json.Marshal(ld) + valueMap["LinkedData"] = template.JS(ldBytes) + } + content, err := r.supplements.TemplateManager.Render("general-page", valueMap) if err != nil { slog.Warn("failed to generate div", slog.String("path", path), slog.String("error", err.Error())) diff --git a/views/layouts/general-page.html b/views/layouts/general-page.html index d7d11a3..7167d12 100644 --- a/views/layouts/general-page.html +++ b/views/layouts/general-page.html @@ -16,6 +16,11 @@ + {{- with .LinkedData }} + + {{- end }} -- cgit v1.3.1+13