4.8 KiB
4.8 KiB
phase, plan, subsystem, tags, requires, provides, affects, tech_stack, key_files, decisions, metrics
| phase | plan | subsystem | tags | requires | provides | affects | tech_stack | key_files | decisions | metrics | ||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 07-seo-blog | 03 | blog-listing-seo |
|
|
|
|
|
|
|
|
Phase 07 Plan 03 : Blog Listing SEO Enrichment Summary
One-liner : /blog listing enrichi avec useSeoMeta D-16 (og:image absolu, og:locale+alternate, twitter summary_large_image) + JSON-LD CollectionPage via defineWebPage({'@type':'CollectionPage'}) et BreadcrumbList Accueil → Blog.
Ce qui a été fait
Task 1 : Enrichir app/pages/blog/index.vue
Imports/constantes ajoutées :
SITE_URL = 'https://killiandalcin.fr'OG_FALLBACK = 'https://killiandalcin.fr/og-blog-default.jpg'(fallback hardcodé ; helperresolveOgImagepas encore créé par 07-02 parallèle, autorisé par plan §interfaces)canonicalUrl = computed(() => ${SITE_URL}${localePath('/blog')})
useSeoMeta étendu (D-16) :
title,description,ogTitle,ogDescription(inchangés, via() => t(...))ogType: 'website'ogImage: OG_FALLBACK(absolu, D-13/SEO-13)ogUrl: canonicalUrlogLocale: () => (isFr.value ? 'fr_FR' : 'en_US')ogLocaleAlternate: () => [isFr.value ? 'en_US' : 'fr_FR']twitterCard: 'summary_large_image'twitterImage: OG_FALLBACK
useSchemaOrg ajouté :
defineWebPage({ '@type': 'CollectionPage', name, description, inLanguage, url })defineBreadcrumb({ itemListElement: [Accueil → Blog] })
Commit : 47c2839 — feat(07-03): enrich blog listing with D-16 useSeoMeta + CollectionPage/Breadcrumb JSON-LD
Déviations du plan
Rule 1 — Bug : contrainte type inLanguage de defineWebPage
- Trouvé pendant : Task 1,
pnpm typecheck - Issue : Le plan proposait
inLanguage: () => (isFr.value ? 'fr-FR' : 'en-US'), mais le type schema-org pourdefineWebPagen'accepte qu'une literal union'fr-FR' | 'en-US' | ...(pas une arrow fn, pas un ComputedRef — TS2322). - Fix : Résolu à setup via valeur littérale
inLanguage: isFr.value ? 'fr-FR' : 'en-US'. Acceptable car locale évaluée au render SSR (pas de switch mid-render côté serveur — re-mount si locale change côté client). - Files modified :
app/pages/blog/index.vue(ligne 62) - Commit :
47c2839(même commit)
Deferred Issues (hors scope 07-03)
app/pages/blog/[slug].vue(126,3)TS2322 et(136,17)TS2322 : erreurs de typage Schema/useSeoMeta — fichier owned par 07-02. À corriger dans 07-02 ou plan follow-up.server/api/__sitemap__/urls.ts(20,28) (25,28)TS2554 : sitemap endpoint — owned par 07-02.
Ces erreurs sont pré-existantes/parallèles et n'affectent pas les must-haves de 07-03.
Must-haves vérifiés
| Must-have | Statut | Preuve |
|---|---|---|
| og:image absolu /og-blog-default.jpg | ✅ | ogImage: OG_FALLBACK littéral absolu dans useSeoMeta |
| og:locale fr_FR ↔ en_US + alternate | ✅ | ogLocale + ogLocaleAlternate arrow fns SSR-safe |
| JSON-LD CollectionPage | ✅ | defineWebPage({ '@type': 'CollectionPage' }) dans useSchemaOrg |
| JSON-LD BreadcrumbList Accueil → Blog | ✅ | defineBreadcrumb({ itemListElement: [home, blog] }) |
Typecheck vert sur app/pages/blog/index.vue (erreurs résiduelles dans d'autres fichiers out-of-scope).
Self-Check: PASSED
- ✅
app/pages/blog/index.vuecontientdefineWebPage,defineBreadcrumb,ogLocaleAlternate,og-blog-default.jpg - ✅ Commit
47c2839existe dans git log - ✅ Requirements SEO-10, SEO-13, SEO-15 couverts par frontmatter