[Nom de la Configuration d'Indexation Pagefind]
Type de ressource : Configuration Indexation Pagefind (RÚgles / Exclusions / Métadonnées)
Fichier source :astro.config.mjsoupagefind.yml
Statut : [Actif / Déprécié / En développement]
1. Vue dâensemble
Section titled â1. Vue dâensembleâ1.1. Description
Section titled â1.1. Descriptionâ[Description concise du rĂŽle de cette configuration dâindexation dans lâarchitecture du site]
1.2. Objectif
Section titled â1.2. Objectifâ- [Objectif principal : ex. indexer uniquement les pages publiĂ©es du blog et de la documentation]
- [BĂ©nĂ©fice pour lâutilisateur final : ex. recherche rapide et pertinente]
1.3. PérimÚtre concerné
Section titled â1.3. PĂ©rimĂštre concernĂ©â- Sources de contenu : [Sanity (SSG) / Starlight / Les deux]
- Type dâindexation : [Statique au build / Dynamique / Les deux]
- Langues supportées : [fr / en / multi-langue]
- Couverture : [Vitrine / Blog / Portfolio / Documentation / Tout]
2. Architecture et flux
Section titled â2. Architecture et fluxâ2.1. Diagramme de flux
Section titled â2.1. Diagramme de fluxâ[Build Astro (SSG)] â âą GĂ©nĂ©ration HTML statique â âą Pages Sanity + Starlight âŒ[Pagefind CLI / astro-pagefind] â âą Lecture du dossier dist/ â âą Application des rĂšgles d'exclusion â âą Extraction du contenu texte â âą GĂ©nĂ©ration de l'index chunkĂ© âŒ[Dossier _pagefind/] â âą Index fragmentĂ© (chunks) â âą MĂ©tadonnĂ©es et filtres âŒ[Site dĂ©ployĂ©] â âą Index chargĂ© Ă la demande â âą Recherche cĂŽtĂ© client âŒ[Utilisateur final]2.2. Composants impliquĂ©s
Section titled â2.2. Composants impliquĂ©sâ| Composant | RĂŽle | Couche |
|---|---|---|
| Astro (SSG) | Génération des pages HTML | L2 |
| Pagefind CLI | Indexation statique | Build time |
| astro-pagefind | Intégration Astro | L2 |
| Starlight | Documentation indexée | L2 |
| Index Pagefind | Stockage de lâindex | Build artifact |
| UI de recherche | Interface utilisateur | L2 |
3. Configuration de lâindexation
Section titled â3. Configuration de lâindexationâ3.1. Configuration dans astro.config.mjs
Section titled â3.1. Configuration dans astro.config.mjsâimport pagefind from 'astro-pagefind';
export default defineConfig({ integrations: [ pagefind({ ranking: { pageLength: 0.1, termFrequency: 0.5, termSaturation: 0.5, termSimilarity: 0.9, }, excludeSelectors: [ 'nav', 'footer', '.no-index', '.search-exclude', 'script', 'style', ], }), ],});3.2. Configuration alternative : pagefind.yml
Section titled â3.2. Configuration alternative : pagefind.ymlâ# pagefind.yml (Ă la racine du projet)site: distexclude_selectors: - nav - footer - .no-index - .search-exclude - script - styleinclude_patterns: - '**/*.html'exclude_patterns: - '**/api/**' - '**/preview/**' - '**/404.html' - '**/500.html'ranking: pageLength: 0.1 termFrequency: 0.5 termSaturation: 0.5 termSimilarity: 0.93.3. Commandes npm
Section titled â3.3. Commandes npmâ{ "scripts": { "build": "astro build && pagefind --source dist", "build:search": "pagefind --source dist", "dev": "astro dev" }}4. RĂšgles dâinclusion et dâexclusion
Section titled â4. RĂšgles dâinclusion et dâexclusionâ4.1. Pages incluses
Section titled â4.1. Pages inclusesâ| Type de page | Source | Inclusion | Rationale |
|---|---|---|---|
| Pages vitrine | Sanity (SSG) | â | Contenu public |
| Articles de blog | Sanity (SSG) | â | Contenu public |
| Projets portfolio | Sanity (SSG) | â | Contenu public |
| Documentation | Starlight | â | Contenu technique |
| Pages dâaccueil | Sanity (SSG) | â | Contenu public |
4.2. Pages exclues
Section titled â4.2. Pages excluesâ| Type de page | Raison dâexclusion | MĂ©thode |
|---|---|---|
Pages API (/api/*) |
Routes techniques | Pattern **/api/** |
| Pages Preview | Contenu draft | Cookie/header detection |
| Pages dâerreur (404, 500) | Non pertinentes | Pattern **/404.html |
| Routes administratives | AccĂšs restreint | Pattern **/admin/** |
| Pages de formulaire (GET) | Pas de contenu indexable | Classe .no-index |
| ĂlĂ©ments de navigation | Bruit dans les rĂ©sultats | SĂ©lecteur nav |
| Footer | Bruit dans les résultats | Sélecteur footer |
4.3. Exclusion via attributs HTML
Section titled â4.3. Exclusion via attributs HTMLâ<!-- Exclure un Ă©lĂ©ment spĂ©cifique de l'indexation --><div data-pagefind-ignore="all"> <!-- Contenu non indexĂ© --></div>
<!-- Exclure uniquement le contenu texte (conserver les liens) --><div data-pagefind-ignore="content"> <!-- Texte non indexé, mais liens indexés --></div>
<!-- Exclure via classe CSS --><div class="no-index"> <!-- Contenu non indexé --></div>5. Métadonnées et filtres
Section titled â5. MĂ©tadonnĂ©es et filtresâ5.1. MĂ©tadonnĂ©es Pagefind
Section titled â5.1. MĂ©tadonnĂ©es Pagefindâ---title: "Titre de la page"description: "Description de la page"# MĂ©tadonnĂ©es Pagefind spĂ©cifiquespagefind: weight: title: 2.0 # Poids du titre dans le ranking content: 1.0 # Poids du contenu meta: type: "blog" # Type de contenu (pour filtrage) category: "tech" # CatĂ©gorie (pour filtrage) author: "John Doe" # Auteur (pour filtrage) filters: - type: blog - category: tech - author: john-doe exclude: selectors: - ".sidebar" - ".related-posts"---5.2. MĂ©tadonnĂ©es via attributs HTML
Section titled â5.2. MĂ©tadonnĂ©es via attributs HTMLâ<!-- DĂ©finir des mĂ©tadonnĂ©es Pagefind --><article data-pagefind-meta="type:blog,category:tech,author:john-doe"> <h1 data-pagefind-weight="2.0">Titre de l'article</h1> <div data-pagefind-body> <!-- Contenu principal --> </div></article>5.3. Filtres disponibles
Section titled â5.3. Filtres disponiblesâ| Filtre | Type | Exemple de valeurs | Usage |
|---|---|---|---|
type |
String | blog, portfolio, docs, page |
Distinction visuelle des résultats |
category |
String | tech, design, marketing |
Filtrage par catégorie |
author |
String | john-doe, jane-smith |
Filtrage par auteur |
language |
String | fr, en |
Filtrage par langue (i18n) |
date |
Date | 2026-09-03 |
Tri chronologique |
6. Intégration avec Starlight
Section titled â6. IntĂ©gration avec Starlightâ6.1. Configuration Starlight
Section titled â6.1. Configuration Starlightâimport starlight from '@astrojs/starlight';
export default defineConfig({ integrations: [ starlight({ title: 'Documentation Technique', // Starlight utilise Pagefind nativement // L'index est partagé avec le reste du site }), ],});6.2. Cohérence des index
Section titled â6.2. CohĂ©rence des indexâ- â Starlight et le site principal partagent le mĂȘme index Pagefind
- â Les pages de documentation sont indexĂ©es avec les mĂȘmes rĂšgles
- â Les filtres permettent de distinguer les rĂ©sultats (badge âDocâ)
- â LâexpĂ©rience de recherche est homogĂšne sur tout le site
6.3. Métadonnées Starlight
Section titled â6.3. MĂ©tadonnĂ©es Starlightâ---title: "Guide d'installation"description: "Comment installer et configurer le projet"sidebar: label: "Installation" order: 1# MĂ©tadonnĂ©es Pagefind pour Starlightpagefind: meta: type: "docs" category: "guide" filters: - type: docs - category: guide---7. StratĂ©gie de ranking
Section titled â7. StratĂ©gie de rankingâ7.1. ParamĂštres de ranking
Section titled â7.1. ParamĂštres de rankingâ| ParamĂštre | Valeur | Description |
|---|---|---|
pageLength |
0.1 | Pénalité pour les pages trop longues |
termFrequency |
0.5 | Importance de la fréquence des termes |
termSaturation |
0.5 | Saturation de la fréquence des termes |
termSimilarity |
0.9 | Tolérance aux fautes de frappe |
7.2. Pondération des éléments
Section titled â7.2. PondĂ©ration des Ă©lĂ©mentsâ| ĂlĂ©ment | Poids | Rationale |
|---|---|---|
Titre (<h1>) |
2.0 | Plus important que le contenu |
Sous-titres (<h2>, <h3>) |
1.5 | Importance intermédiaire |
| Contenu principal | 1.0 | Poids standard |
| Métadonnées (title, description) | 1.5 | Importance élevée |
| Liens et navigation | 0.5 | Poids réduit |
7.3. Personnalisation du ranking
Section titled â7.3. Personnalisation du rankingâ<!-- Augmenter le poids d'un titre spĂ©cifique --><h1 data-pagefind-weight="3.0">Titre trĂšs important</h1>
<!-- Réduire le poids d'une section --><section data-pagefind-weight="0.5"> <!-- Contenu moins important --></section>8. Performance et optimisation
Section titled â8. Performance et optimisationâ8.1. Taille de lâindex
Section titled â8.1. Taille de lâindexâ| MĂ©trique | Objectif | StratĂ©gie |
|---|---|---|
| Taille totale | < 5 MB | Exclusion des éléments non pertinents |
| Temps dâindexation | < 30s | Optimisation des rĂšgles dâexclusion |
| Temps de chargement | < 500ms | Index chunké (lazy loading) |
| Mémoire client | < 50 MB | Pagination des résultats |
8.2. Optimisation de lâindex
Section titled â8.2. Optimisation de lâindexâ- â Exclure les Ă©lĂ©ments de navigation et footer (rĂ©duit le bruit)
- â Utiliser des sĂ©lecteurs CSS prĂ©cis pour exclure du contenu
- â Limiter les mĂ©tadonnĂ©es aux filtres rĂ©ellement utilisĂ©s
- â Optimiser les images avant le build (rĂ©duit la taille HTML)
- â
Utiliser
data-pagefind-bodypour identifier le contenu principal
8.3. Index chunké
Section titled â8.3. Index chunkĂ©âPagefind gĂ©nĂšre un index fragmentĂ© (chunks) qui est chargĂ© Ă la demande :
_pagefind/âââ pagefind.js # Script principalâââ pagefind-ui.css # Styles UI (optionnel)âââ fragment/â âââ pagefind.pf_1 # Chunk 1â âââ pagefind.pf_2 # Chunk 2â âââ ...âââ metadata/ âââ pagefind.pf_meta # MĂ©tadonnĂ©es9. IntĂ©gration avec lâUI de recherche
Section titled â9. IntĂ©gration avec lâUI de rechercheâ9.1. Composant de recherche
Section titled â9.1. Composant de rechercheâ---import { Search } from 'pagefind-ui';---
<div id="search"></div>
<script> import { Search } from 'pagefind-ui';
new Search({ element: '#search', pageSize: 10, showSubResults: true, showImages: false, processResult: (result) => { // Personnalisation des résultats return { ...result, badge: result.meta.type === 'docs' ? 'Doc' : result.meta.type === 'blog' ? 'Blog' : result.meta.type === 'portfolio' ? 'Portfolio' : 'Page', }; }, });</script>9.2. Distinction visuelle des résultats
Section titled â9.2. Distinction visuelle des rĂ©sultatsâ| Type de contenu | Badge | Couleur |
|---|---|---|
| Documentation | âDocâ | Bleu |
| Article de blog | âBlogâ | Vert |
| Projet portfolio | âPortfolioâ | Orange |
| Page vitrine | âPageâ | Gris |
9.3. Filtrage par type
Section titled â9.3. Filtrage par typeâ<div class="search-filters"> <label> <input type="checkbox" value="docs" checked /> Documentation </label> <label> <input type="checkbox" value="blog" checked /> Blog </label> <label> <input type="checkbox" value="portfolio" checked /> Portfolio </label> <label> <input type="checkbox" value="page" checked /> Pages </label></div>10. DĂ©bogage et troubleshooting
Section titled â10. DĂ©bogage et troubleshootingâ10.1. ProblĂšmes courants
Section titled â10.1. ProblĂšmes courantsâ| SymptĂŽme | Cause probable | Solution |
|---|---|---|
| Page non trouvĂ©e dans les rĂ©sultats | Page exclue ou non publiĂ©e | VĂ©rifier les rĂšgles dâexclusion et le statut |
| Résultats non pertinents | Ranking mal configuré | Ajuster les poids et les métadonnées |
| Index trop volumineux | Trop de contenu indexé | Exclure les éléments non pertinents |
| Recherche lente | Index non optimisĂ© | RĂ©duire la taille de lâindex |
| Filtres non fonctionnels | Métadonnées manquantes | Ajouter les métadonnées Pagefind |
| Starlight non indexĂ© | Configuration incorrecte | VĂ©rifier lâintĂ©gration Starlight |
10.2. Tests manuels
Section titled â10.2. Tests manuelsâ# GĂ©nĂ©ration de l'indexnpm run build:search
# Vérification de l'indexls -lh dist/_pagefind/
# Test de la recherche en localnpm run preview# Ouvrir http://localhost:4321 et tester la recherche
# Inspection de l'index (debug)npx pagefind --source dist --verbose10.3. Logs et monitoring
Section titled â10.3. Logs et monitoringâ# Logs de buildnpm run build -- --verbose
# Logs Pagefindnpx pagefind --source dist --verbose
# Vérification de la taille de l'indexdu -sh dist/_pagefind/11. Bonnes pratiques
Section titled â11. Bonnes pratiquesâ11.1. Configuration
Section titled â11.1. Configurationâ- â Exclure systĂ©matiquement les Ă©lĂ©ments de navigation et footer
- â Utiliser des sĂ©lecteurs CSS prĂ©cis pour les exclusions
- â DĂ©finir des mĂ©tadonnĂ©es cohĂ©rentes pour tous les types de contenu
- â Tester lâindexation aprĂšs chaque modification majeure
- â Documenter les rĂšgles dâexclusion dans ce fichier
11.2. Contenu
Section titled â11.2. Contenuâ- â
Utiliser une structure HTML sémantique (
<h1>,<h2>,<article>) - â
Identifier le contenu principal avec
data-pagefind-body - â Fournir des titres descriptifs et uniques
- â Ăviter le contenu dupliquĂ© entre pages
- â Optimiser les images avant le build
11.3. Performance
Section titled â11.3. Performanceâ- â Surveiller la taille de lâindex (objectif < 5 MB)
- â Optimiser le ranking pour les contenus prioritaires
- â Utiliser lâindex chunkĂ© pour le lazy loading
- â Tester les performances de recherche sur mobile
- â Mesurer les Core Web Vitals avec la recherche active
11.4. Maintenance
Section titled â11.4. Maintenanceâ- â RĂ©gĂ©nĂ©rer lâindex Ă chaque build (automatique)
- â VĂ©rifier les rĂ©sultats de recherche aprĂšs publication
- â Ajuster les rĂšgles dâexclusion si nĂ©cessaire
- â Documenter les changements de configuration
- â Tester les filtres et les mĂ©tadonnĂ©es rĂ©guliĂšrement
12. Ăvolutions et roadmap
Section titled â12. Ăvolutions et roadmapâ12.1. AmĂ©liorations planifiĂ©es
Section titled â12.1. AmĂ©liorations planifiĂ©esâ- [Ăvolution 1 : ex. Support du multi-langue (i18n)]
- [Ăvolution 2 : ex. Recherche facette avancĂ©e]
- [Ăvolution 3 : ex. Suggestions de recherche (autocomplete)]
12.2. Limitations connues
Section titled â12.2. Limitations connuesâ- â Pagefind ne supporte pas nativement la recherche dynamique (SSR)
- â Lâindex doit ĂȘtre rĂ©gĂ©nĂ©rĂ© Ă chaque build (pas de mise Ă jour incrĂ©mentale)
- â Les filtres sont limitĂ©s aux mĂ©tadonnĂ©es dĂ©finies au build
- â La recherche full-text ne supporte pas nativement les langues non-latines
13. Ressources liées
Section titled â13. Ressources liĂ©esâ- Documentation Pagefind : Getting Started
- Documentation Pagefind : Indexing
- Documentation Pagefind : Search UI
- Documentation astro-pagefind : npm package
- DAT L2 : §8 - Stratégie de Recherche Unifiée (Pagefind)
- DAT L2 : §5.2 - Isolation de la Documentation (Starlight)
- Fichiers concernés :
astro.config.mjspagefind.yml(si applicable)src/components/ui/SearchBar.astrosrc/components/ui/SearchFilters.astrodist/_pagefind/(généré au build)
14. Historique des modifications
Section titled â14. Historique des modificationsâ| Date | Version | Description | Auteur |
|---|---|---|---|
| YYYY-MM-DD | 1.0 | Création initiale | [Nom] |
| YYYY-MM-DD | 1.1 | [Modification] | [Nom] |
---
**Points clés de ce template :**- Documente la configuration complÚte de l'indexation Pagefind- Détaille les rÚgles d'inclusion et d'exclusion (critique pour la pertinence)- Inclut l'intégration avec Starlight (index partagé)- Fournit la stratégie de ranking et de pondération- Couvre les métadonnées et les filtres (distinction visuelle des résultats)- Sépare clairement la configuration, le contenu, et l'UI- Inclut les bonnes pratiques de performance et de maintenance