feat: SEO complet + analytics Umami + og:image § logo
ci/woodpecker/push/woodpecker Pipeline was successful
ci/woodpecker/push/woodpecker Pipeline was successful
SEO : - composable useSeoPage() : og:*, Twitter Cards, canonical sur toutes les pages (15 pages) - app.vue : JSON-LD Organization + Book, og:image global og-default.png - og-default.png 1200×630 : logo § calligraphique + texte (Pillow) - nuxt.config.ts : @nuxtjs/sitemap avec 26 URLs statiques Analytics Umami : - useTracking() : helpers typés audio/pdf/player/scroll/cta - useScrollTracking() : scroll depth 25/50/75/100% + liens externes auto - useAudioPlayer : trackAudioPlay/Progress/Complete - BookPdfReader : trackPdfOpen/Close avec durée - BookPlayer : trackPlayerOpen/Chapter/Mode - docker-compose : variables NUXT_PUBLIC_UMAMI_* passées au container Images : - Couv-Economie-du-don.jpg ajoutée dans public/images/ - bookplayer.config.yml + home.yml : références mises à jour Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -83,3 +83,49 @@ PORT=3099 node .output/server/index.mjs # Test build prod (toujours avant commi
|
||||
- Shadoks SVG inline thématiques sur chaque page (hidden mobile, opacity 0.18–0.28)
|
||||
- Hexagramme 益 (#42 Yi, Augmentation) dans `layouts/default.vue`
|
||||
- Signature § (logo calligraphique SVG gradient) dans `TheHeader.vue` — ne pas modifier sans demander
|
||||
|
||||
## SEO & Recherche IA — Checklist permanente
|
||||
|
||||
### À chaque nouvelle page Vue
|
||||
|
||||
1. **Appeler `useSeoPage()`** — jamais `useHead({ title })` seul
|
||||
```ts
|
||||
useSeoPage({
|
||||
title: 'Titre page — Le Librodrome', // 50–60 chars
|
||||
description: 'Description...', // 120–155 chars
|
||||
image: '/images/og-specifique.jpg', // optionnel, sinon og-default.png (logo §)
|
||||
type: 'website' | 'article' | 'book', // défaut: website
|
||||
})
|
||||
```
|
||||
2. **og:image** : utiliser la couverture `/images/Couv-Economie-du-don.jpg` pour les pages livre/musique ; `og-default.png` (logo §) pour les pages site générales
|
||||
3. **type: 'article'** pour les chapitres du modele-eco ; **type: 'book'** pour les index livre
|
||||
|
||||
### À chaque nouveau fichier YAML dans `site/pages/`
|
||||
|
||||
Ajouter le bloc `seo:` en tête :
|
||||
```yaml
|
||||
seo:
|
||||
title: "Titre SEO — 50-60 chars max"
|
||||
description: "Description 120-155 chars, avec mots-clés naturels"
|
||||
# image: /images/og-specifique.jpg # optionnel
|
||||
# keywords: [monnaie libre, TRM, économie du don]
|
||||
```
|
||||
|
||||
### Règles description SEO
|
||||
|
||||
- Commence par un verbe d'action ou une affirmation forte
|
||||
- Contient les mots-clés : économie du don, monnaie libre, TRM, June, bassin de vie, autonomie
|
||||
- 120–155 caractères (ni trop court, ni tronqué)
|
||||
- Différente du titre et du H1
|
||||
|
||||
### JSON-LD automatique
|
||||
|
||||
- JSON-LD `Organization` + `Book` : injecté globalement dans `app.vue` — ne pas redupliquer
|
||||
- Chapitres → og:type `article` via `useSeoPage({ type: 'article' })`
|
||||
- Sitemap : géré par `@nuxtjs/sitemap` — ajouter manuellement les nouvelles routes statiques dans `nuxt.config.ts > sitemap.urls`
|
||||
|
||||
### Analytics — Nouveaux composants
|
||||
|
||||
- Tout bouton CTA externe : `trackCta(label, url)` depuis `useTracking()`
|
||||
- Tout `<a target="_blank">` : capturé automatiquement par `useScrollTracking()` dans `default.vue`
|
||||
- Tout nouveau lecteur média : appeler `trackAudioPlay` / `trackPdfOpen` depuis `useTracking()`
|
||||
|
||||
Reference in New Issue
Block a user