From 4e0c3d8fc4bd3980440068fe547898a57fc1c16d Mon Sep 17 00:00:00 2001 From: Samir Paul <77569653+SamirPaulb@users.noreply.github.com> Date: Mon, 11 May 2026 14:48:45 +0530 Subject: [PATCH] fix(seo): restructure head partial, fix Twitter social and SEO improvements (#749) * fix(scss): remove top-level parent selector for Dart Sass compatibility Dart Sass strictly disallows top-level parent selectors (`&`), which causes build failures on newer Hugo versions (e.g. 0.158.0+). * feat(styles): refactor special styles for friends and search layouts * fix(seo): restructure head partial, fix Twitter social and SEO improvements - Split head template into dedicated partial hierarchy for better maintainability - Add full Twitter Cards support with dynamic site and creator metadata - Update social media link prefix from twitter.com to x.com and rename label to X - Fix Twitter/X share button and Buffer via parameter handling - Add Mastodon verification meta tags and rel="me" links - Improve SEO structured data for both homepage and blog posts - Add test site configuration and test avatar asset --------- Co-authored-by: Cell <1024@lruihao.cn> --- apps/test/assets/images/fixit-test.png | Bin 0 -> 12215 bytes apps/test/hugo.toml | 16 +++++++ assets/scss/pages/specials/_base.scss | 6 +++ assets/scss/pages/specials/_friends.scss | 2 +- assets/scss/pages/specials/_index.scss | 14 ++---- assets/scss/pages/specials/_search.scss | 2 +- hugo.toml | 4 +- layouts/_partials/init/index.html | 2 +- .../layouts/{head.html => head/index.html} | 12 +++--- .../_partials/layouts/head/twitter-cards.html | 40 ++++++++++++++++++ layouts/_partials/plugin/share.html | 12 +++++- layouts/baseof.html | 5 +-- 12 files changed, 87 insertions(+), 28 deletions(-) create mode 100644 apps/test/assets/images/fixit-test.png create mode 100644 assets/scss/pages/specials/_base.scss rename layouts/_partials/layouts/{head.html => head/index.html} (97%) create mode 100644 layouts/_partials/layouts/head/twitter-cards.html diff --git a/apps/test/assets/images/fixit-test.png b/apps/test/assets/images/fixit-test.png new file mode 100644 index 0000000000000000000000000000000000000000..a11cef0ac3b645497d614738f8acf49e0432af16 GIT binary patch literal 12215 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 eCiYJMSBH!1zm4ouqq@KA0A!_ -{{- end -}} +{{- partial "layouts/head/twitter-cards.html" . -}} @@ -59,8 +56,8 @@ {{- $id := "" -}} {{- $prefix := "https://mastodon.social/" -}} {{- if reflect.IsMap . -}} - {{- $id = .Id | default .id -}} - {{- $prefix = .Prefix | default .prefix | default $prefix -}} + {{- $id = .id -}} + {{- $prefix = .prefix | default $prefix -}} {{- end -}} {{- if $id | and $prefix -}} {{- $link := printf "%s/%s" $prefix $id -}} @@ -317,3 +314,6 @@ {{- $options = dict "sourceMap" "external" | merge $options -}} {{- end -}} {{- dict "Source" (resources.Get "js/head/color-scheme.js") "Build" $options "Fingerprint" $fingerprint | partial "plugin/script.html" -}} + +{{- /* Custom head */ -}} +{{- block "custom-head" . }}{{ end -}} diff --git a/layouts/_partials/layouts/head/twitter-cards.html b/layouts/_partials/layouts/head/twitter-cards.html new file mode 100644 index 00000000..bf28d879 --- /dev/null +++ b/layouts/_partials/layouts/head/twitter-cards.html @@ -0,0 +1,40 @@ +{{- /* + Extends Hugo's embedded twitter_cards partial: + https://github.com/gohugoio/hugo/blob/master/tpl/tplimpl/embedded/templates/_partials/twitter_cards.html + + Key differences: + - Generates twitter:site / twitter:creator from site params (.Site.Params.social.twitter) + - The param can be a string or a map; when it's a map, reads Id/id +*/ -}} +{{- $images := partial "_funcs/get-page-images" . }} +{{- with index $images 0 }} + + +{{- else }} + +{{- end }} + +{{- with or .Title site.Title site.Params.title | plainify }} + +{{- end }} + +{{- with or .Description .Summary site.Params.description | plainify | htmlUnescape }} + +{{- end }} + +{{- with site.Params.social.twitter -}} + {{- $site := "" -}} + {{- $creator := "" -}} + {{- if reflect.IsMap . -}} + {{- $creator = .creator | default .id -}} + {{- $site = .site | default $creator -}} + {{- else -}} + {{- $creator = . -}} + {{- end -}} + {{- with $site -}} + + {{- end -}} + {{- with $creator -}} + + {{- end -}} +{{- end -}} diff --git a/layouts/_partials/plugin/share.html b/layouts/_partials/plugin/share.html index b7f20fd5..ddca9cdd 100644 --- a/layouts/_partials/plugin/share.html +++ b/layouts/_partials/plugin/share.html @@ -9,9 +9,17 @@ {{- if $share.enable -}} {{- $title := cond (.Param "capitalizeTitles") (title .Title) .Title -}} + {{- $twitterVia := "" -}} + {{- with .Site.Params.social.twitter -}} + {{- if reflect.IsMap . -}} + {{- $twitterVia = .creator | default .id -}} + {{- else -}} + {{- $twitterVia = . -}} + {{- end -}} + {{- end -}} {{- /* 001: Twitter */ -}} {{- if $share.Twitter -}} - + {{- dict "Class" "fa-brands fa-x-twitter" | partial "plugin/icon.html" -}} {{ end -}} @@ -81,7 +89,7 @@ {{- /* 011: Buffer */ -}} {{- if $share.Buffer -}} - + {{- dict "Class" "fa-brands fa-buffer" | partial "plugin/icon.html" -}} {{ end -}} diff --git a/layouts/baseof.html b/layouts/baseof.html index 7f6a2bdf..28b5760b 100644 --- a/layouts/baseof.html +++ b/layouts/baseof.html @@ -10,11 +10,8 @@ {{ block "title" . }}{{ .Site.Title }}{{ end }} - - {{- partial "layouts/head.html" . -}} + {{- partial "layouts/head/index.html" . -}} {{- /* TODO preload script https://developer.mozilla.org/zh-CN/docs/Web/HTML/Attributes/rel/preload */ -}} - {{- /* Custom head */ -}} - {{- block "custom-head" . }}{{ end -}} {{- /* Body wrapper */ -}}