docs+fix: nettoyage post-migration et conformité svelte-autofixer
- CONTRIBUTING.md et SEO.md réécrits pour la structure SvelteKit
- README : section documents de référence (charte, recette, AGENTS.md, guides Svelte 5)
- Liens internes via resolve()/asset() de $app/paths, externes en rel="external"
- Seo.svelte : JSON-LD construits dans le script (</script> échappé)
- Titres de sections : {' '} remplacé par  
- Renommage svelte_core_bestpractices.md
- Passe svelte-autofixer : 0 issue restante hors {@html} first-party assumés
This commit is contained in:
@@ -1,11 +1,11 @@
|
||||
# Guide SEO - o-k-i.net
|
||||
|
||||
Ce document décrit l'optimisation SEO mise en place sur le site o-k-i.net V2.
|
||||
Ce document décrit l'optimisation SEO du site o-k-i.net (V3, SvelteKit statique).
|
||||
|
||||
## 📋 Fichiers SEO
|
||||
|
||||
### 1. robots.txt
|
||||
**Emplacement :** `src/robots.txt`
|
||||
**Emplacement :** `static/robots.txt` (servi à `/robots.txt`)
|
||||
|
||||
Permet aux moteurs de recherche d'indexer tout le contenu du site et indique l'emplacement du sitemap.
|
||||
|
||||
@@ -16,174 +16,116 @@ Sitemap: https://o-k-i.net/sitemap.xml
|
||||
```
|
||||
|
||||
### 2. sitemap.xml
|
||||
**Emplacement :** `src/sitemap.xml`
|
||||
**Emplacement :** `static/sitemap.xml` (servi à `/sitemap.xml`)
|
||||
|
||||
Liste toutes les pages du site avec leurs priorités et fréquences de mise à jour.
|
||||
Liste les 8 pages du site avec priorités et fréquences :
|
||||
|
||||
**Pages incluses :**
|
||||
- Page d'accueil (priorité 1.0, hebdomadaire)
|
||||
- Mentions légales (priorité 0.3, mensuelle)
|
||||
- `/` et `/en/` (priorité 1.0, hebdomadaire)
|
||||
- `/dons/` et `/en/donate/` (0.6, mensuelle)
|
||||
- `/presse/` et `/en/press/` (0.5, mensuelle)
|
||||
- `/mentions-legales/` et `/en/legal-notice/` (0.3, mensuelle)
|
||||
|
||||
**À mettre à jour :** Lors de l'ajout de nouvelles pages.
|
||||
**À mettre à jour :** lors de l'ajout de nouvelles pages.
|
||||
|
||||
## 🏷️ Meta Tags
|
||||
|
||||
### Meta Tags de base
|
||||
Définis dans `src/_includes/layouts/base.njk` :
|
||||
Tous les meta tags sont centralisés dans le composant **`src/lib/components/Seo.svelte`**, alimenté par `src/lib/i18n/{locale}/site.json`. Chaque page l'invoque avec ses props :
|
||||
|
||||
- **Title** : Dynamique selon la page
|
||||
- **Description** : Personnalisable par page via front matter
|
||||
- **Keywords** : OKI, Fédiverse, PeerTube, Pleroma, Funkwhale, Castopod, Guadeloupe, logiciel libre, GAFAM
|
||||
- **Author** : Organisation Ka Internationale
|
||||
- **Canonical URL** : Évite le contenu dupliqué
|
||||
```svelte
|
||||
<Seo title="Titre de la page" description="Description spécifique" path="/ma-page/" locale="fr" />
|
||||
```
|
||||
|
||||
### Open Graph (Facebook, LinkedIn)
|
||||
- **Title** : `Titre | ORGANISATION KA INTERNATIONALE` (home : `… | OKI`)
|
||||
- **Description** : par page, sinon `site.description`
|
||||
- **Keywords** : `site.keywords` · **Author** : `site.name`
|
||||
- **Canonical URL** : `https://o-k-i.net{path}` — évite le contenu dupliqué
|
||||
- **Hreflang** : `fr`, `en`, `x-default`, calculés via `alternatePath()` (`src/lib/i18n/index.ts`)
|
||||
|
||||
### Open Graph (10 balises)
|
||||
```html
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="https://o-k-i.net">
|
||||
<meta property="og:title" content="...">
|
||||
<meta property="og:description" content="...">
|
||||
<meta property="og:image" content="https://o-k-i.net/assets/images/logo-512x512.png">
|
||||
<meta property="og:url" content="https://o-k-i.net/…">
|
||||
<meta property="og:title" content="…">
|
||||
<meta property="og:description" content="…">
|
||||
<meta property="og:image" content="https://o-k-i.net/images/logo-512x512.png">
|
||||
<meta property="og:image:width" content="512">
|
||||
<meta property="og:image:height" content="512">
|
||||
<meta property="og:image:alt" content="…">
|
||||
<meta property="og:locale" content="fr_FR">
|
||||
<meta property="og:site_name" content="ORGANISATION KA INTERNATIONALE">
|
||||
```
|
||||
|
||||
### Twitter Cards
|
||||
```html
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:title" content="...">
|
||||
<meta name="twitter:description" content="...">
|
||||
<meta name="twitter:image" content="...">
|
||||
```
|
||||
`summary_large_image` + url, title, description, image, image:alt — self-hébergées comme tout le reste.
|
||||
|
||||
## 📊 Structured Data (JSON-LD)
|
||||
|
||||
### Organization Schema
|
||||
Données structurées conformes à Schema.org pour améliorer l'affichage dans les résultats de recherche.
|
||||
Deux blocs injectés par `Seo.svelte` sur toutes les pages :
|
||||
|
||||
**Type :** Organization
|
||||
1. **Organization** : nom (OKI), URL, logo, description, adresse (36 Rue Lethière, Basse-Terre 97100, GP), contact (kontak@o-k-i.net), sameAs (niyaj, kute, labola, liberapay), `foundingDate: 2024`, `nonprofitStatus`.
|
||||
2. **MusicGroup** : DJANGOKAM (genres Reggae/Zouk/Konpa/K-pop, djangokam.pawol.nu, membre OKI).
|
||||
|
||||
**Informations incluses :**
|
||||
- Nom : ORGANISATION KA INTERNATIONALE
|
||||
- Nom alternatif : OKI
|
||||
- URL : https://o-k-i.net
|
||||
- Logo
|
||||
- Description
|
||||
- Adresse physique (Basse-Terre, Guadeloupe)
|
||||
- Email de contact
|
||||
- Liens vers les plateformes sociales (GADE, BOKANTE, NIYAJ, KUTE, Discord, Labola, Liberapay)
|
||||
- Statut : Organisation à but non lucratif
|
||||
## 🔍 Attributs lang
|
||||
|
||||
## 🔍 Optimisations par page
|
||||
|
||||
### Page d'accueil
|
||||
- **Title :** "ORGANISATION KA INTERNATIONALE | OKI"
|
||||
- **Description :** Reprend site.description
|
||||
- **Keywords :** Fédiverse, logiciel libre, alternatives GAFAM, Guadeloupe
|
||||
|
||||
### Mentions légales
|
||||
- **Title :** "Mentions Légales | ORGANISATION KA INTERNATIONALE"
|
||||
- **Description :** "Mentions légales et informations juridiques de l'Organisation Ka Internationale (OKI) - Hébergement, RGPD, licence AGPL-V3"
|
||||
L'attribut `lang` du `<html>` est posé au prerender par `src/hooks.server.ts` (`fr` par défaut, `en` sous `/en/`), et `data-locale` pilote la redirection de langue (`static/lang-redirect.js`). Les microcopies en kréyòl (404, hors-ligne) portent `lang="gcf"`.
|
||||
|
||||
## 🎯 Bonnes pratiques
|
||||
|
||||
### Ajouter une nouvelle page
|
||||
1. Créer le fichier `.njk` dans `src/`
|
||||
2. Ajouter le front matter avec title et description personnalisés
|
||||
3. Mettre à jour `src/sitemap.xml`
|
||||
4. Ajouter un lien dans la navigation si nécessaire
|
||||
|
||||
### Personnaliser les meta tags
|
||||
Dans le front matter de la page :
|
||||
```yaml
|
||||
---
|
||||
layout: layouts/base.njk
|
||||
title: Titre de la page
|
||||
description: Description spécifique à cette page
|
||||
---
|
||||
```
|
||||
1. Créer `src/routes/ma-page/+page.svelte` avec `<Seo>` renseigné
|
||||
2. Ajouter la paire FR↔EN dans `PATH_PAIRS` (`src/lib/i18n/index.ts`)
|
||||
3. Mettre à jour `static/sitemap.xml`
|
||||
4. Ajouter un lien dans `src/lib/i18n/*/navigation.json` si nécessaire
|
||||
|
||||
## 🚀 Tests et validation
|
||||
|
||||
### Outils recommandés
|
||||
1. **Google Search Console** - Soumettre le sitemap
|
||||
2. **Facebook Sharing Debugger** - Tester les meta Open Graph
|
||||
- URL : https://developers.facebook.com/tools/debug/
|
||||
3. **Twitter Card Validator** - Tester les Twitter Cards
|
||||
- URL : https://cards-dev.twitter.com/validator
|
||||
4. **Schema Markup Validator** - Valider le JSON-LD
|
||||
- URL : https://validator.schema.org/
|
||||
5. **Google Rich Results Test** - Tester les données structurées
|
||||
- URL : https://search.google.com/test/rich-results
|
||||
2. **Facebook Sharing Debugger** - https://developers.facebook.com/tools/debug/
|
||||
3. **Schema Markup Validator** - https://validator.schema.org/
|
||||
4. **Google Rich Results Test** - https://search.google.com/test/rich-results
|
||||
|
||||
### Commandes utiles
|
||||
### Commandes utiles (sur `npm run preview`)
|
||||
```bash
|
||||
# Vérifier robots.txt
|
||||
curl http://localhost:8080/robots.txt
|
||||
|
||||
# Vérifier sitemap.xml
|
||||
curl http://localhost:8080/sitemap.xml
|
||||
|
||||
# Vérifier les meta tags
|
||||
curl http://localhost:8080/ | grep -E "(og:|twitter:)"
|
||||
curl http://localhost:4173/robots.txt
|
||||
curl http://localhost:4173/sitemap.xml
|
||||
curl http://localhost:4173/ | grep -oE '(property|name)="(og:|twitter:)[^"]*"'
|
||||
```
|
||||
|
||||
## 📈 Suivi et amélioration
|
||||
|
||||
### Métriques à surveiller
|
||||
- Position dans les résultats de recherche Google
|
||||
- Taux de clics (CTR) depuis les résultats de recherche
|
||||
- Nombre de pages indexées
|
||||
- Erreurs d'exploration
|
||||
|
||||
### Améliorations futures possibles
|
||||
- [ ] Ajouter un blog/actualités avec articles optimisés SEO
|
||||
- [ ] Créer des pages dédiées pour chaque service Fédiverse
|
||||
- [ ] Ajouter des FAQ avec Schema.org FAQPage
|
||||
- [ ] Optimiser les images avec attributs alt descriptifs
|
||||
- [ ] Ajouter breadcrumbs avec données structurées
|
||||
- [ ] Implémenter AMP (Accelerated Mobile Pages) si nécessaire
|
||||
- [ ] Ajouter hreflang pour versions multilingues (créole, anglais, etc.)
|
||||
- [ ] Pages dédiées pour chaque service Fédiverse
|
||||
- [ ] FAQ avec Schema.org FAQPage
|
||||
- [ ] Breadcrumbs avec données structurées
|
||||
- [ ] Hreflang pour d'autres langues (créole…)
|
||||
|
||||
## 🌍 Mots-clés ciblés
|
||||
|
||||
### Primaires
|
||||
- Organisation Ka Internationale
|
||||
- OKI
|
||||
- Fédiverse Guadeloupe
|
||||
- PeerTube Guadeloupe
|
||||
- Alternatives GAFAM
|
||||
- Organisation Ka Internationale · OKI · Fédiverse Guadeloupe · Alternatives GAFAM
|
||||
|
||||
### Secondaires
|
||||
- Pleroma
|
||||
- Funkwhale
|
||||
- Castopod
|
||||
- Logiciel libre Antilles
|
||||
- Médias libres Caraïbes
|
||||
- Hébergement éthique
|
||||
- Langues créoles
|
||||
- Réseau social libre
|
||||
- PeerTube / Mastodon / Nextcloud / Castopod Guadeloupe · Logiciel libre Antilles · Médias libres Caraïbes · Hébergement éthique · Langues créoles
|
||||
|
||||
### Longue traîne
|
||||
- "alternative libre à YouTube Guadeloupe"
|
||||
- "hébergement PeerTube Martinique"
|
||||
- "réseau social décentralisé Antilles"
|
||||
- "promotion langues créoles numérique"
|
||||
- "alternative libre à YouTube Guadeloupe" · "hébergement PeerTube Martinique" · "réseau social décentralisé Antilles" · "promotion langues créoles numérique"
|
||||
|
||||
## 📝 Checklist SEO
|
||||
|
||||
- [x] Robots.txt configuré
|
||||
- [x] Sitemap.xml créé et soumis
|
||||
- [x] Sitemap.xml (8 URLs, dates à jour)
|
||||
- [x] Meta description sur toutes les pages
|
||||
- [x] Balises title optimisées
|
||||
- [x] URL canoniques
|
||||
- [x] Open Graph tags
|
||||
- [x] Open Graph (10 balises, og:image self-hébergée)
|
||||
- [x] Twitter Cards
|
||||
- [x] JSON-LD Organization
|
||||
- [x] Logo haute résolution (512x512)
|
||||
- [ ] Images avec attributs alt
|
||||
- [ ] Performance optimale (Lighthouse score)
|
||||
- [x] Mobile-friendly (déjà responsive)
|
||||
- [x] JSON-LD Organization + MusicGroup
|
||||
- [x] Logo haute résolution (512×512)
|
||||
- [x] Images avec attributs alt
|
||||
- [x] Performance (Lighthouse mobile ≥ 90, mesuré à 91)
|
||||
- [x] Mobile-friendly (responsive, vérifié Lighthouse)
|
||||
- [x] HTTPS activé et HSTS configuré
|
||||
- [x] Hreflang FR/EN pour les versions multilingues
|
||||
- [x] Hreflang FR/EN/x-default
|
||||
- [ ] Google Search Console configuré
|
||||
- [ ] Analytics installé (optionnel, respectueux RGPD)
|
||||
- [ ] Analytics installé (optionnel, respectueux RGPD — rester sans tiers)
|
||||
|
||||
Reference in New Issue
Block a user