summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-04-18 20:22:10 +0200
committerDanilo M. <danix@danix.xyz>2026-04-18 20:22:10 +0200
commitd01eb91363ad385fa62125976441ea71ceeb43ba (patch)
treea97146aed4bce8012a5144a7c5b76b2c1714290e
parentc5e429da6c19a2331fbedcb64839a66760214563 (diff)
downloaddanixxyz-d01eb91363ad385fa62125976441ea71ceeb43ba.tar.gz
danixxyz-d01eb91363ad385fa62125976441ea71ceeb43ba.zip
feat: add Open Graph and Twitter Card meta tags for social sharing
Implement comprehensive OG and Twitter Card support: - og:title, og:description, og:image, og:type (website/article) - og:article:published_time and og:article:author for article pages - twitter:card with summary_large_image, twitter:title, twitter:description, twitter:image - Per-page description from excerpt field with fallback to site description - Article-specific tags only rendered for pages with dates - Default dark thumbnail fallback when article has no image - Empty twitterHandle param (optional fill-in for users) Extracted head meta into new partial for maintainability. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
-rw-r--r--hugo.toml1
-rw-r--r--themes/danix-xyz-hacker/layouts/_default/baseof.html6
-rw-r--r--themes/danix-xyz-hacker/layouts/partials/head-meta.html38
3 files changed, 40 insertions, 5 deletions
diff --git a/hugo.toml b/hugo.toml
index c20b617..ad31c86 100644
--- a/hugo.toml
+++ b/hugo.toml
@@ -109,6 +109,7 @@ enableRobotsTXT = true
siteName = "danix.xyz"
author = "Danilo Macrì"
email = "danix@danix.xyz"
+ twitterHandle = ""
# Theme options
readingTime = true
diff --git a/themes/danix-xyz-hacker/layouts/_default/baseof.html b/themes/danix-xyz-hacker/layouts/_default/baseof.html
index 9370157..1f5dc97 100644
--- a/themes/danix-xyz-hacker/layouts/_default/baseof.html
+++ b/themes/danix-xyz-hacker/layouts/_default/baseof.html
@@ -3,11 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
- <meta name="description" content="{{ .Site.Params.siteDescription }}">
- <meta property="og:locale" content="{{ .Site.Language.Params.locale }}">
- <meta property="og:type" content="website">
- <meta property="og:url" content="{{ .Permalink }}">
- <meta property="og:site_name" content="{{ .Site.Title }}">
+ {{ partial "head-meta.html" . }}
<title>{{ .Title }}{{ if ne .Title .Site.Title }} — {{ .Site.Title }}{{ end }}</title>
<!-- Favicon -->
diff --git a/themes/danix-xyz-hacker/layouts/partials/head-meta.html b/themes/danix-xyz-hacker/layouts/partials/head-meta.html
new file mode 100644
index 0000000..cd4e88c
--- /dev/null
+++ b/themes/danix-xyz-hacker/layouts/partials/head-meta.html
@@ -0,0 +1,38 @@
+{{/* description: per-page excerpt wins over site-wide description */}}
+{{ $description := .Site.Language.Params.siteDescription }}
+{{ with .Params.excerpt }}{{ $description = . }}{{ end }}
+
+{{/* og:type: "article" only for single content pages that have a date */}}
+{{ $ogType := "website" }}
+{{ if and (eq .Kind "page") .Date }}{{ $ogType = "article" }}{{ end }}
+
+{{/* og:image: page image wins; fall back to default dark thumbnail */}}
+{{ $ogImage := printf "%s%s" .Site.BaseURL "images/default_thumbnail_dark.png" }}
+{{ with .Params.image }}{{ $ogImage = printf "%s%s" $.Site.BaseURL (strings.TrimLeft "/" .) }}{{ end }}
+
+{{/* author: page-level param wins; fall back to site param */}}
+{{ $author := .Site.Params.author }}
+{{ with .Params.author }}{{ $author = . }}{{ end }}
+
+<meta name="description" content="{{ $description }}">
+
+<meta property="og:title" content="{{ .Title }}">
+<meta property="og:description" content="{{ $description }}">
+<meta property="og:type" content="{{ $ogType }}">
+<meta property="og:url" content="{{ .Permalink }}">
+<meta property="og:site_name" content="{{ .Site.Title }}">
+<meta property="og:locale" content="{{ .Site.Language.Params.locale }}">
+<meta property="og:image" content="{{ $ogImage }}">
+
+{{ if eq $ogType "article" }}
+<meta property="article:published_time" content="{{ .Date.Format "2006-01-02T15:04:05Z07:00" }}">
+<meta property="article:author" content="{{ $author }}">
+{{ end }}
+
+<meta name="twitter:card" content="summary_large_image">
+<meta name="twitter:title" content="{{ .Title }}">
+<meta name="twitter:description" content="{{ $description }}">
+<meta name="twitter:image" content="{{ $ogImage }}">
+{{ with .Site.Params.twitterHandle }}
+<meta name="twitter:site" content="@{{ . }}">
+{{ end }}