website/layouts/partials/head.html
Pierre-Olivier Mercier ca6f8367dd
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Add JSON-LD structured data for improved SEO
Add Organization, WebSite, and SoftwareApplication schema.org
markup to the homepage head partial, enabling rich search results
with app category, pricing (free), license, and social profiles.

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

140 lines
5.1 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 }}">
<!-- Structured Data (JSON-LD) -->
{{ if .IsHome }}
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "Organization",
"@id": "{{ .Site.BaseURL }}#organization",
"name": "happyDomain",
"url": "{{ .Site.BaseURL }}",
"logo": {
"@type": "ImageObject",
"url": "{{ .Site.BaseURL }}img/happydomain.png"
},
"sameAs": [
"https://floss.social/@happyDomain",
"https://github.com/happyDomain/happydomain",
"https://framagit.org/happyDomain/happydomain"
]
},
{
"@type": "WebSite",
"@id": "{{ .Site.BaseURL }}#website",
"name": "happyDomain",
"url": "{{ .Site.BaseURL }}",
"description": "{{ $description }}",
"inLanguage": ["en", "fr"],
"publisher": {
"@id": "{{ .Site.BaseURL }}#organization"
}
},
{
"@type": "SoftwareApplication",
"@id": "{{ .Site.BaseURL }}#software",
"name": "happyDomain",
"url": "{{ .Site.BaseURL }}",
"description": "{{ $description }}",
"applicationCategory": "DeveloperApplication",
"operatingSystem": "Linux, Windows, macOS, Docker",
"license": "https://www.gnu.org/licenses/agpl-3.0.html",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD"
},
"screenshot": "{{ .Site.BaseURL }}img/og.webp",
"softwareHelp": {
"@type": "WebPage",
"url": "https://help.happydomain.org/"
},
"author": {
"@id": "{{ .Site.BaseURL }}#organization"
}
}
]
}
</script>
{{ end }}
<script async defer data-website-id="a10b2ee8-ed13-4acb-a017-0b9a661f31c3" src="https://pythagore.p0m.fr/pythagore.js"></script>
</head>