Aller au contenu

PD-229 — Retour d'expérience


📚 Navigation User Story | Document | | | ---------- | -- | | 📋 [Spécification](PD-229-specification.md) | | | 🛠️ [Plan d'implémentation](PD-229-plan.md) | | | ✅ [Critères d'acceptation](PD-229-acceptability.md) | | | 📝 **Retour d'expérience** | *(ce document)* | [← Retour à site-vitrine](../PD-225-epic.md) · [↑ Index User Story](index.md)

1. Résumé exécutif

La User Story PD-229 visait à garantir un référencement naturel optimal avec des métadonnées SEO complètes, JSON-LD structuré et OpenGraph. L'implémentation a produit des métadonnées de base fonctionnelles (title, description, OpenGraph, Twitter Cards) directement dans BaseLayout.astro, un schéma Organization complet, et un robots.txt bien configuré. Cependant, plusieurs écarts majeurs ont été identifiés : absence des schémas WebSite et BreadcrumbList, pas de balise robots meta, sitemap statique incomplet, et le composant Seo.astro créé mais jamais utilisé. Verdict : ACCEPTÉ AVEC RÉSERVES.


2. Points fluides

  • Métadonnées de base présentes sur toutes les pages (title, description, canonical)
  • OpenGraph complet avec og:title, og:description, og:type, og:url, og:image, og:locale
  • Twitter Cards correctement configurées (summary_large_image)
  • Images OpenGraph générées pour chaque page et langue (14 images PNG 1200x630)
  • Schéma JSON-LD Organization complet avec contactPoints et sameAs
  • Schéma JSON-LD SoftwareApplication pour la page produit
  • Robots.txt bien structuré avec blocage des crawlers AI (GPTBot, CCBot, etc.)
  • Liens hreflang alternate présents dans BaseLayout.astro

3. Points difficiles

  • Duplication SEO / non-utilisation du composant : Un composant Seo.astro a été créé mais n'est jamais utilisé. BaseLayout.astro implémente directement les balises SEO, créant une duplication et un composant mort.

  • Schémas JSON-LD partiels : Seuls Organization et SoftwareApplication sont implémentés. Les schémas WebSite et BreadcrumbList requis par la spec sont absents.

  • Sitemap manuel : Le sitemap.xml est un fichier statique dans public/, non généré automatiquement. Il risque de devenir obsolète si des pages sont ajoutées.

  • Pas de balise robots meta : Aucune gestion index/noindex au niveau des pages. Impossible de différencier prod/préprod ou de marquer certaines pages comme non indexables.


4. Hypothèses révélées tardivement

  • @astrojs/sitemap non utilisé : Le plan prévoyait une génération automatique du sitemap via l'intégration Astro officielle. Cette intégration n'a pas été installée.

  • JSON-LD centralisé vs distribué : La stratégie de gestion des schémas JSON-LD (centralisé dans un fichier vs distribué par page) n'était pas clarifiée. Les fichiers JSON existent mais leur injection est partielle.

  • Environnement de déploiement : La distinction prod/préprod pour les balises robots n'a pas été implémentée car aucun mécanisme de détection d'environnement n'était prévu.


5. Invariants complexes

Invariant Difficulté
Title + description sur chaque page Facile, bien respecté
JSON-LD valide et complet Complexe : plusieurs schémas à maintenir, injection conditionnelle
Pages indexables en prod uniquement Non implémenté : nécessite détection d'environnement
Sitemap à jour avec hreflang Manuel actuellement, risque d'obsolescence

6. Dette technique

Dette Impact Priorité
Composant Seo.astro non utilisé Code mort, confusion Moyenne
Pas de schéma WebSite JSON-LD SEO sous-optimal Haute
Pas de BreadcrumbList JSON-LD Rich snippets absents Moyenne
Pas de balise robots meta Pas de contrôle index/noindex Haute
Sitemap statique Risque d'obsolescence Haute
Pas de @astrojs/sitemap Génération manuelle Moyenne

7. Risques résiduels

Risque Probabilité Impact Mitigation suggérée
Sitemap obsolète après ajout de pages Haute Moyen Installer @astrojs/sitemap
Page de préprod indexée Moyenne Élevé Ajouter robots meta + env detection
Rich snippets non affichés Moyenne Faible Ajouter WebSite, BreadcrumbList
Duplication de code SEO Faible Faible Refactorer vers Seo.astro unique

8. Améliorations processus

  • Clarifier la stratégie JSON-LD avant l'implémentation : quels schémas, où les injecter, comment les maintenir
  • Utiliser les intégrations officielles Astro (@astrojs/sitemap) plutôt que des fichiers manuels
  • Supprimer le code mort : si un composant n'est pas utilisé, le retirer ou l'intégrer
  • Prévoir l'environnement dès le départ : variable d'environnement pour distinguer prod/staging/dev
  • Tester les Rich Results : utiliser l'outil Google Rich Results Test en CI

9. Enseignements clés

  1. Un composant créé doit être utilisé — Seo.astro existe mais BaseLayout.astro fait le travail. Cette duplication crée de la confusion et du code mort.

  2. Les fichiers statiques deviennent obsolètes — Un sitemap.xml manuel sera oublié lors de l'ajout de nouvelles pages. L'automatisation est essentielle.

  3. JSON-LD est un investissement — Implémenter correctement tous les schémas requis demande du temps. Il vaut mieux le planifier dès le départ.

  4. Le robots.txt ne suffit pas — Il ne contrôle que le crawl, pas l'indexation. La balise meta robots est nécessaire pour un contrôle fin.

  5. Les specs SEO sont exigeantes — La spécification listait clairement WebSite, Organization, BreadcrumbList. Ne pas tous les implémenter crée un écart majeur.


10. Addendum — Résolution des écarts

[2025-12-21] — Mise à jour suite à acceptation finale

Les écarts E-01 à E-04 identifiés lors de la revue initiale ont été corrigés :

Écart Résolution
E-01 (JSON-LD incomplet) Schéma WebSite ajouté (src/seo/website.json) ; spec mise à jour pour rendre BreadcrumbList conditionnel (profondeur > 1)
E-02 (Meta robots absente) BaseLayout.astro ajoute <meta name="robots" content={PROD ? "index, follow" : "noindex, nofollow"}>
E-03 (Sitemap incomplet) public/sitemap.xml couvre 18 pages FR/EN avec xhtml:link alternates fr/en/x-default
E-04 (Composant SEO non utilisé) Suppression du code mort src/components/Seo.astro

Verdict final : ✅ ACCEPTÉ (2025-12-20)