Files

4.8 KiB

Phase 7: SEO Blog - Discussion Log

Audit trail only. Do not use as input to planning, research, or execution agents. Decisions are captured in CONTEXT.md — this log preserves the alternatives considered.

Date: 2026-04-22 Phase: 07-seo-blog Areas discussed: JSON-LD strategy, og:image fallback, Sitemap source, Périmètre listing, Author/publisher, dateModified, Drafts in sitemap, hreflang alternates


JSON-LD strategy

Option Description Selected
nuxt-schema-org (Recommended) Module Nuxt SEO. defineArticle/defineBreadcrumb typés, locale-aware.
Hand-rolled via useHead Construction manuelle JSON-LD. Zero dep mais répétitif et risque drift.
@nuxtjs/seo (umbrella) Bundle complet — doublonne avec @nuxtjs/sitemap.

User's choice: nuxt-schema-org Notes: Recommandation suivie — typage + auto-merge site.url + cohérence Nuxt SEO ecosystem.


og:image fallback

Option Description Selected
Frontmatter image OR static fallback (Recommended) image: frontmatter sinon /og-blog-default.jpg statique. KISS, zero runtime.
nuxt-og-image (Satori, runtime) Génération dynamique. Joli mais build-time + edge runtime + design.
Frontmatter only, fail si absent Strict, bloque les articles texte-only.

User's choice: Hybride frontmatter + fallback statique Notes: nuxt-og-image reporté en deferred ideas (à reconsidérer si traction social).


Sitemap source

Option Description Selected
Endpoint Nitro /api/sitemap/urls.ts (Recommended) Server route query collections, retourne loc+lastmod+alternates.
Auto-discovery via prerender hooks Marche en SSG uniquement.
Liste statique régénérée à chaque build Pas reactive aux nouveaux articles post-build.

User's choice: Endpoint Nitro Notes: Pattern officiel @nuxtjs/sitemap + i18n. Compatible SSR pur (déploiement Docker actuel).


Périmètre listing

Option Description Selected
Articles + listing minimal (Recommended) /blog reçoit useSeoMeta enrichi + JSON-LD Blog simple ; /blog/[slug] le pack complet.
Articles uniquement Plus rapide mais ranking listing affaibli.
Articles + listing + page d'accueil / Scope creep — relève d'une phase SEO globale.

User's choice: Articles + listing minimal Notes: WebSite/Person globaux home reportés en deferred.


Author/publisher

Option Description Selected
Constante globale Killian (Recommended) Single Person identity dans config. Pas de frontmatter override.
Frontmatter author override + fallback Killian Flexibilité guest-posts non planifiée.

User's choice: Constante globale Killian Notes: Pas de guest authors prévus — over-engineering évité.


dateModified

Option Description Selected
Frontmatter updated optionnel, fallback date (Recommended) Schema Zod enrichi updated.optional(). Semantically correct.
Toujours = date Perte signal SEO si article révisé.
git mtime du fichier .md Hook git — casse en build Docker sans .git layer.

User's choice: updated optional + fallback date Notes: git mtime déféré — à reconsidérer si on ajoute un layer git ou stamping CI.


Drafts in sitemap

Option Description Selected
Non, draft=false uniquement (Recommended) Cohérent avec Phase 6 D-14. Drafts accessibles direct URL only.
Oui, tous articles + drafts Risque indexation drafts (test-kotlin-syntax.md).

User's choice: Drafts exclus Notes: Cohérence avec filtrage listings établi Phase 6.


hreflang alternates

Option Description Selected
Oui, par paire de slugs (Recommended) xhtml:link rel='alternate' hreflang='fr/en' croisés + x-default FR.
Non, sitemap par locale indépendant Risque duplicate content vu par Google.

User's choice: Alternates par paire de slugs Notes: Fr = locale par défaut → x-default pointe sur FR.


Claude's Discretion

  • Naming exact composable/helper résolution og:image
  • Format précis description JSON-LD Blog/CollectionPage du listing
  • Choix definePerson global app.vue vs author inline par defineArticle (à confirmer en research)
  • Design exact /og-blog-default.jpg

Deferred Ideas

  • og:image dynamique via nuxt-og-image (Satori)
  • JSON-LD WebSite + Person globaux sur la home
  • Liens internes /hytale ↔ articles (SEO-14, déjà planifié Phase 8)
  • git mtime pour dateModified
  • JSON-LD BlogPosting[] exhaustif sur /blog