website/layouts/partials/head.html
Pierre-Olivier Mercier b85d01c31f Improve per-page SEO with dynamic meta tags and canonical URLs
OG/Twitter tags now use page-specific titles and descriptions instead of
hardcoded site-wide defaults. Added canonical URLs, og:locale with
alternate languages, and unique titles/descriptions to all content pages
(use-case personas, community, press kit, about pages) in both EN and FR.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-11 09:59:48 +07:00

80 lines
3.4 KiB
HTML

<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<meta name="robots" content="all,follow">
<meta name="googlebot" content="index,follow,snippet,archive">
<title>{{ .Title }}</title>
<meta name="author" content="{{ .Site.Params.author.name }}" />
{{ if .Keywords }}
<meta name="keywords" content="{{ delimit .Keywords ", " }}">
{{ else if .Site.Params.DefaultKeywords }}
<meta name="keywords" content="{{ delimit .Site.Params.DefaultKeywords ", " }}">
{{ end }}
{{ if .Description }}
<meta name="description" content="{{ .Description }}">
{{ else if .Site.Params.DefaultDescription }}
<meta name="description" content="{{ .Site.Params.DefaultDescription }}">
{{ end }}
{{- $title := .Title | default "happyDomain" }}
{{- $description := .Description | default .Site.Params.DefaultDescription }}
{{- $image := .Params.og_image | default (printf "%simg/og.webp" .Site.BaseURL) }}
{{- $pageURL := .Permalink | default .Site.BaseURL }}
<!-- Canonical URL -->
<link rel="canonical" href="{{ $pageURL }}">
<!-- Facebook Meta Tags -->
<meta property="og:url" content="{{ $pageURL }}">
<meta property="og:type" content="{{ if .IsHome }}website{{ else }}article{{ end }}">
<meta property="og:title" content="{{ $title }}">
<meta property="og:description" content="{{ $description }}">
<meta property="og:image" content="{{ $image }}">
<meta property="og:locale" content="{{ .Lang }}">
{{ range .Translations }}
<meta property="og:locale:alternate" content="{{ .Lang }}">
{{ end }}
<!-- Twitter Meta Tags -->
<meta name="twitter:card" content="summary_large_image">
<meta property="twitter:domain" content="happydomain.org">
<meta property="twitter:url" content="{{ $pageURL }}">
<meta name="twitter:title" content="{{ $title }}">
<meta name="twitter:description" content="{{ $description }}">
<meta name="twitter:image" content="{{ $image }}">
<!-- Mastodon proof -->
<link rel="me" href="https://floss.social/@happyDomain">
<link rel="stylesheet" href="/css/bootstrap.min.css">
<link rel="stylesheet" href="/icons/font/bootstrap-icons.min.css">
<!-- Theme stylesheet, if possible do not edit this stylesheet -->
{{ if and (isset .Site.Params "style") .Site.Params.style }}
<link href="{{ .Site.BaseURL }}css/style.{{ .Site.Params.style }}.css" rel="stylesheet" id="theme-stylesheet">
{{ else }}
<link href="{{ .Site.BaseURL }}css/style.default.css" rel="stylesheet" id="theme-stylesheet">
{{ end }}
<!-- Custom stylesheet - for your changes -->
<link href="{{ .Site.BaseURL }}css/custom.css" rel="stylesheet">
<!-- Responsivity for older IE -->
{{ `
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
` | safeHTML }}
<!-- Favicon and apple touch icons-->
<link rel="shortcut icon" href="{{ .Site.BaseURL }}img/favicon.ico" type="image/x-icon" />
<link rel="apple-touch-icon" href="{{ .Site.BaseURL }}img/apple-touch-icon.png" />
<link rel="alternate" href="{{ "/index.xml" | absURL }}" type="application/rss+xml" title="{{ .Site.Title }}">
<script async defer data-website-id="a10b2ee8-ed13-4acb-a017-0b9a661f31c3" src="https://pythagore.p0m.fr/pythagore.js"></script>
</head>