feat: enhance SEO and add multilingual support with new meta tags and sitemap
This commit is contained in:
parent
0708e33448
commit
37f3e1ecea
6 changed files with 101 additions and 1 deletions
|
|
@ -1,5 +1,6 @@
|
|||
---
|
||||
title: "Home"
|
||||
description: "TheAfriForge is the African foundation for free software and digital sovereignty. Open source projects, open governance and continental infrastructure."
|
||||
hero:
|
||||
kicker: "African digital infrastructure"
|
||||
titleLine1: "Free and sovereign"
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
---
|
||||
title: "Accueil"
|
||||
description: "TheAfriForge est la fondation africaine du logiciel libre et de la souveraineté numérique. Projets open source, gouvernance ouverte et infrastructure continentale."
|
||||
hero:
|
||||
kicker: "Infrastructure numérique africaine"
|
||||
titleLine1: "L'infrastructure libre"
|
||||
|
|
|
|||
|
|
@ -10,6 +10,8 @@ disableAliases = true
|
|||
organization = "TheAfriForge"
|
||||
gitforgeUrl = "https://gitforge.africa"
|
||||
repositoryUrl = "https://github.com/theafriforge"
|
||||
twitterHandle = "@theafriforge"
|
||||
ogImage = "/images/og-theafriforge.png"
|
||||
# Membership form configuration (fallback values).
|
||||
# Priority used in templates:
|
||||
# 1) HUGO_MEMBERSHIP_FORM_ACTION / HUGO_MEMBERSHIP_FORM_SUCCESS_PATH
|
||||
|
|
@ -18,6 +20,11 @@ disableAliases = true
|
|||
membershipFormAction = ""
|
||||
membershipFormSuccessPath = ""
|
||||
|
||||
[sitemap]
|
||||
changeFreq = "weekly"
|
||||
filename = "sitemap.xml"
|
||||
priority = 0.5
|
||||
|
||||
[languages]
|
||||
[languages.fr]
|
||||
languageName = "Français"
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>{{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ .Title }} | {{ .Site.Title }}{{ end }}</title>
|
||||
<meta name="description" content="{{ i18n "siteDescription" }}">
|
||||
{{ partial "seo.html" . }}
|
||||
<script>
|
||||
tailwind = {
|
||||
config: {
|
||||
|
|
|
|||
85
layouts/partials/seo.html
Normal file
85
layouts/partials/seo.html
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
{{/* ---- Resolved values ---- */}}
|
||||
{{ $title := cond .IsHome .Site.Title (printf "%s | %s" .Title .Site.Title) }}
|
||||
{{ $description := or .Description (i18n "siteDescription") }}
|
||||
{{ $url := .Permalink }}
|
||||
{{ $lang := .Site.Language.Lang }}
|
||||
{{ $locale := replace .Site.LanguageCode "-" "_" }}
|
||||
|
||||
{{/* ---- Canonical ---- */}}
|
||||
<link rel="canonical" href="{{ $url }}">
|
||||
|
||||
{{/* ---- Meta robots ---- */}}
|
||||
{{ if or .Params.noindex .Draft }}
|
||||
<meta name="robots" content="noindex, nofollow">
|
||||
{{ else }}
|
||||
<meta name="robots" content="index, follow">
|
||||
{{ end }}
|
||||
|
||||
{{/* ---- Meta description ---- */}}
|
||||
{{ with $description }}
|
||||
<meta name="description" content="{{ . | plainify | truncate 160 }}">
|
||||
{{ end }}
|
||||
|
||||
{{/* ---- Hreflang alternates ---- */}}
|
||||
{{ range .AllTranslations }}
|
||||
<link rel="alternate" hreflang="{{ .Language.Lang }}" href="{{ .Permalink }}">
|
||||
{{ end }}
|
||||
{{ range .AllTranslations }}
|
||||
{{ if eq .Language.Weight 1 }}
|
||||
<link rel="alternate" hreflang="x-default" href="{{ .Permalink }}">
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
|
||||
{{/* ---- Open Graph ---- */}}
|
||||
<meta property="og:site_name" content="{{ .Site.Title }}">
|
||||
<meta property="og:title" content="{{ $title }}">
|
||||
<meta property="og:description" content="{{ $description | plainify | truncate 200 }}">
|
||||
<meta property="og:url" content="{{ $url }}">
|
||||
<meta property="og:locale" content="{{ $locale }}">
|
||||
{{ if .IsHome }}
|
||||
<meta property="og:type" content="website">
|
||||
{{ else }}
|
||||
<meta property="og:type" content="article">
|
||||
{{ end }}
|
||||
{{ with .Site.Params.ogImage }}
|
||||
<meta property="og:image" content="{{ . | absURL }}">
|
||||
{{ end }}
|
||||
|
||||
{{/* ---- Twitter Card ---- */}}
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="{{ $title }}">
|
||||
<meta name="twitter:description" content="{{ $description | plainify | truncate 200 }}">
|
||||
{{ with .Site.Params.twitterHandle }}
|
||||
<meta name="twitter:site" content="{{ . }}">
|
||||
{{ end }}
|
||||
{{ with .Site.Params.ogImage }}
|
||||
<meta name="twitter:image" content="{{ . | absURL }}">
|
||||
{{ end }}
|
||||
|
||||
{{/* ---- JSON-LD Organization (home only) ---- */}}
|
||||
{{ if .IsHome }}
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Organization",
|
||||
"name": "{{ .Site.Title }}",
|
||||
"url": "{{ .Site.BaseURL }}",
|
||||
"description": "{{ i18n "siteDescription" | plainify }}",
|
||||
"sameAs": [
|
||||
{{ with .Site.Params.repositoryUrl }}"{{ . }}"{{ end }}
|
||||
]
|
||||
}
|
||||
</script>
|
||||
{{ end }}
|
||||
|
||||
{{/* ---- JSON-LD WebSite (home only — enables sitelinks search) ---- */}}
|
||||
{{ if .IsHome }}
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebSite",
|
||||
"name": "{{ .Site.Title }}",
|
||||
"url": "{{ .Site.BaseURL }}"
|
||||
}
|
||||
</script>
|
||||
{{ end }}
|
||||
6
layouts/robots.txt
Normal file
6
layouts/robots.txt
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
User-agent: *
|
||||
Allow: /
|
||||
|
||||
Sitemap: {{ .Site.BaseURL }}sitemap.xml
|
||||
Sitemap: {{ .Site.BaseURL }}fr/sitemap.xml
|
||||
Sitemap: {{ .Site.BaseURL }}en/sitemap.xml
|
||||
Loading…
Add table
Add a link
Reference in a new issue