Skip to content

[Nom de la Configuration d'Indexation Pagefind]

Type de ressource : Configuration Indexation Pagefind (RÚgles / Exclusions / Métadonnées)
Fichier source : astro.config.mjs ou pagefind.yml
Statut : [Actif / Déprécié / En développement]

[Description concise du rîle de cette configuration d’indexation dans l’architecture du site]

  • [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]
  • 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]
[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]
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
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',
],
}),
],
});
# pagefind.yml (Ă  la racine du projet)
site: dist
exclude_selectors:
- nav
- footer
- .no-index
- .search-exclude
- script
- style
include_patterns:
- '**/*.html'
exclude_patterns:
- '**/api/**'
- '**/preview/**'
- '**/404.html'
- '**/500.html'
ranking:
pageLength: 0.1
termFrequency: 0.5
termSaturation: 0.5
termSimilarity: 0.9
package.json
{
"scripts": {
"build": "astro build && pagefind --source dist",
"build:search": "pagefind --source dist",
"dev": "astro dev"
}
}
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
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
<!-- 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>
---
title: "Titre de la page"
description: "Description de la page"
# Métadonnées Pagefind spécifiques
pagefind:
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"
---
<!-- 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>
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
astro.config.mjs
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
}),
],
});
  • ✅ 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
---
title: "Guide d'installation"
description: "Comment installer et configurer le projet"
sidebar:
label: "Installation"
order: 1
# Métadonnées Pagefind pour Starlight
pagefind:
meta:
type: "docs"
category: "guide"
filters:
- type: docs
- category: guide
---
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
É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
<!-- 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>
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
  • ✅ 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-body pour identifier le contenu principal

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Ă©es
src/components/ui/SearchBar.astro
---
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>
Type de contenu Badge Couleur
Documentation “Doc” Bleu
Article de blog “Blog” Vert
Projet portfolio “Portfolio” Orange
Page vitrine “Page” Gris
src/components/ui/SearchFilters.astro
<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>
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
Terminal window
# Génération de l'index
npm run build:search
# Vérification de l'index
ls -lh dist/_pagefind/
# Test de la recherche en local
npm run preview
# Ouvrir http://localhost:4321 et tester la recherche
# Inspection de l'index (debug)
npx pagefind --source dist --verbose
Terminal window
# Logs de build
npm run build -- --verbose
# Logs Pagefind
npx pagefind --source dist --verbose
# Vérification de la taille de l'index
du -sh dist/_pagefind/
  • ✅ 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
  • ✅ 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
  • ✅ 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
  • ✅ 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
  • [Évolution 1 : ex. Support du multi-langue (i18n)]
  • [Évolution 2 : ex. Recherche facette avancĂ©e]
  • [Évolution 3 : ex. Suggestions de recherche (autocomplete)]
  • ❌ 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
  • 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.mjs
    • pagefind.yml (si applicable)
    • src/components/ui/SearchBar.astro
    • src/components/ui/SearchFilters.astro
    • dist/_pagefind/ (gĂ©nĂ©rĂ© au build)
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
Edit page

Last updated: