Type de ressource : Composant Astro (UI atomique)
Fichier source : src/components/BaseHead.astro
Statut : Actif
Composant pour les métadonnées HTML globales de la page (meta tags, title, description, Open Graph, Twitter Card). Importe également le CSS global.
- Centraliser les métadonnées SEO pour toutes les pages
- Assurer la cohérence des meta tags sur tout le site
- Importer le CSS global pour inclure les styles sur toutes les pages
- Fournir une image de fallback pour le partage social
| Propriété |
Valeur |
| Type |
UI atomique |
| Hydratation |
Aucune |
| Framework JS |
Aucun |
| Accessibilité |
Partiellement conforme (meta tags) |
| Responsive |
Non applicable |
âââ FormattedDate.astro
âââ HeaderLink.astro
| Composant parent |
Fichier |
Relation |
| Toutes les pages |
src/pages/*.astro |
Utilisation dans le <head> |
| Composant enfant |
Fichier |
RĂŽle |
| Aucun |
- |
Composant leaf |
import '../styles/global.css';
import type { ImageMetadata } from 'astro';
import FallbackImage from '../assets/blog-placeholder-1.jpg';
import { SITE_TITLE } from '../consts';
const canonicalURL = new URL(Astro.url.pathname, Astro.site);
const { title, description, image = FallbackImage } = Astro.props;
<meta name="viewport" content="width=device-width,initial-scale=1" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<link rel="icon" href="/favicon.ico" />
<link rel="sitemap" href="/sitemap-index.xml" />
type="application/rss+xml"
href={new URL('rss.xml', Astro.site)}
<meta name="generator" content={Astro.generator} />
<link rel="canonical" href={canonicalURL} />
<!-- Primary Meta Tags -->
<meta name="description" content={description} />
<!-- Open Graph / Facebook -->
<meta property="og:type" content="website" />
<meta property="og:url" content={Astro.url} />
<meta property="og:title" content={title} />
<meta property="og:description" content={description} />
<meta property="og:image" content={new URL(image.src, Astro.url)} />
<meta name="twitter:card" content="summary_large_image" />
import BaseHead from '../components/BaseHead.astro';
import { SITE_TITLE, SITE_DESCRIPTION } from '../consts';
<BaseHead title={SITE_TITLE} description={SITE_DESCRIPTION} />
<!-- Contenu de la page -->
| Prop |
Type |
Description |
Exemple |
title |
string |
Titre de la page |
"Accueil" |
description |
string |
Description de la page |
"Blog personnel" |
| Prop |
Type |
Description |
Valeur par défaut |
image |
ImageMetadata |
Image pour Open Graph/Twitter |
FallbackImage (blog-placeholder-1.jpg) |
Aucun slot nâest implĂ©mentĂ© dans ce composant.
| Type de composant |
Stratégie |
Rationale |
| Composant UI atomique |
Aucune |
HTML pur, pas dâinteraction |
Aucune directive nâest utilisĂ©e (composant HTML pur).
| Métrique |
Sans hydratation |
| HTML size |
+1 KB |
| CSS size |
+taille global.css |
| JS size |
0 KB |
| TTI |
Immédiat |
Non applicable - ce composant nâa pas de styles inline, il importe le CSS global.
Non applicable - les meta tags viewport assurent le responsive design au niveau global.
Non applicable - ce composant ne gĂšre pas le mode sombre.
| CritĂšre |
Implémentation |
Statut |
| 1.1.1 Non-text Content |
Alt text non applicable (pas dâimages) |
N/A |
| 1.3.1 Info and Relationships |
Structure HTML sémantique (<head>, <title>) |
â
|
| 1.4.3 Contrast (Minimum) |
Non applicable (pas de contenu visuel) |
N/A |
| 2.4.7 Focus Visible |
Non applicable (pas dâĂ©lĂ©ments interactifs) |
N/A |
Aucun attribut ARIA nâest utilisĂ© (composant de mĂ©tadonnĂ©es).
Non applicable (composant de métadonnées).
npx lighthouse http://localhost:4321/ --view
- â
HTML statique par défaut
- â
Pas de JavaScript
- â
Import unique du CSS global
- â
Canonical URL pour éviter le duplicate content
| Métrique |
Objectif |
Stratégie |
| LCP |
< 2.5s |
Pas de JS bloquant |
| INP |
< 200ms |
Pas de JS |
| CLS |
< 0.1 |
Pas de layout shift |
| Type |
HTML |
CSS |
JS (hydraté) |
Total |
| UI atomique |
1 KB |
+global.css |
0 KB |
1 KB + global.css |
| SymptĂŽme |
Cause probable |
Solution |
| Styles non appliqués |
global.css non importé |
VĂ©rifier le chemin dâimport |
| Meta tags incorrects |
Props non passées |
Vérifier les props title et description |
| Image fallback incorrecte |
FallbackImage non trouvé |
VĂ©rifier le chemin de lâasset |
# Vérification des meta tags
# Ouvrir les DevTools â Onglet Network â Recharger la page
# Vérifier les meta tags dans la réponse HTML
Non applicable (composant statique).
- â
Centraliser les métadonnées dans un composant unique
- â
Importer le CSS global une seule fois
- â
Utiliser une image de fallback pour le partage social
- â
Typer les props avec TypeScript
- â
Toujours inclure un title et une description
- â
Utiliser les meta tags Open Graph et Twitter Card
- â
Inclure une canonical URL
- â
Pas de JavaScript inutile
- â
Image fallback optimisée
- â
Pas de styles inline
- â
Mettre Ă jour les meta tags selon les besoins SEO
- â
Vérifier la compatibilité des meta tags avec les réseaux sociaux
- â Pas de support du mode sombre
- â Pas de structured data
- â Meta tags Twitter incomplets (twitter:title, twitter:description manquants)
- Documentation Astro : Components
- Documentation Astro : SEO
- DAT L2 : §4 - StratĂ©gie dâHydratation & Gestion du JavaScript
- Composants associés :
src/components/Header.astro
src/components/Footer.astro
- Fichiers assets :
src/assets/blog-placeholder-1.jpg
- CSS global :
src/styles/global.css
| Date |
Version |
Description |
Auteur |
| 2026-09-15 |
1.0 |
Création initiale |
Devin |