Ajouter Pagefind à un blog Astro : guide complet gratuit, rapide et multilingue

Plus j’écris d’articles, plus je reçois de messages : « Tu peux ajouter une recherche ? Je me souviens que tu as écrit sur XX, mais je ne retrouve plus rien. »
J’ai longtemps repoussé — Algolia coûte trop cher pour un blog perso (des dizaines de dollars par mois), et monter Elasticsearch soi-même, c’est galérer. Puis j’ai découvert Pagefind : configuration simple, index de quelques dizaines de Ko, entièrement gratuit, multilingue natif.
Qu’est-ce que Pagefind ? En bref, un moteur de recherche conçu pour les sites statiques. Il génère l’index au build ; la recherche s’exécute entièrement dans le navigateur — pas de backend, pas d’API tierce. Gratuit, rapide, ultra simple à configurer.
Dans cet article, je vous guide pas à pas :
- Pourquoi Pagefind convient mieux qu’Algolia à un blog personnel
- Comment configurer Pagefind en 10 minutes
- Optimisations avancées et réglage multilingue
- Solutions aux problèmes courants
Si vous avez un blog Astro et voulez la recherche sans payer, cet article est pour vous.
Pourquoi choisir Pagefind ?
Avant d’ajouter la recherche, j’ai comparé les solutions du marché. J’ai choisi Pagefind pour trois raisons : coût, confidentialité et performances.
Les atouts de la recherche statique
Pagefind est une « recherche statique » : l’index est généré au build, déployé avec le site, la recherche s’exécute dans le navigateur.
Entièrement gratuit. Contrairement à Algolia facturé au volume, Pagefind ne coûte rien. Peu importe le trafic, la recherche reste gratuite.
Respectueux de la vie privée. Les requêtes ne partent pas vers un serveur tiers — tout se fait en local. Important pour les lecteurs soucieux de confidentialité.
Sans backend. Les solutions classiques exigent serveur, base de données et haute disponibilité. Pagefind est 100 % statique, sur CDN, aussi stable que vos pages.
Chargement à la demande. L’index est découpé en petits blocs, chargés uniquement quand l’utilisateur cherche. Le premier écran n’en souffre pas — excellente expérience.
Pagefind vs Algolia
Tableau comparatif rapide :
| Critère | Pagefind | Algolia |
|---|---|---|
| Coût mensuel | Gratuit | Free tier limité ; standard dès 1 $/1 000 recherches |
| Confidentialité | 100 % local, aucune donnée envoyée | Contenu envoyé sur les serveurs Algolia |
| Taille d’index | < 300 Ko pour 10 000 pages | Index volumineux |
| Chargement | À la demande, blocs correspondants | Appels API en temps réel |
| Complexité | Quelques lignes de code | Clés API, upload de données |
| Cas d’usage | Blogs moyens, sites de docs | E-commerce, applications enterprise |
Franchement, Algolia est très puissant — vitesse, tolérance aux fautes, analytics au top. Pour un blog perso, c’est un canon pour tuer une mouche. Et dès que le trafic monte, la facture Algolia grimpe vite.
Cas réels et chiffres
Les performances de Pagefind sont excellentes. D’après BryceWray.com, un site de 10 000 pages produit un index de moins de 300 Ko. La plupart des blogs restent autour de 100 Ko.
Les tests officiels vont plus loin : 19 pages indexées en 0,043 s. Écrit en Rust, le build est ultra rapide — quelques secondes pour des milliers de pages.
En pratique, la doc officielle Astro Starlight intègre Pagefind par défaut. Si Astro l’a choisi, l’outil est fiable.
5 étapes pour configurer Pagefind
La théorie est faite — passons à la pratique. Je vous guide étape par étape ; comptez 10 minutes.
Étape 1 : installer les dépendances
Installez deux paquets npm :
npm install astro-pagefind pagefind
Pourquoi deux paquets ?
astro-pagefind est l’intégration Astro qui lance Pagefind au build. pagefind est la bibliothèque core (UI et API). Les deux sont nécessaires — nous référencerons directement les ressources de pagefind.
Étape 2 : configurer astro.config.mjs
Ouvrez astro.config.mjs et ajoutez l’intégration Pagefind :
import { defineConfig } from 'astro/config';
import pagefind from 'astro-pagefind';
export default defineConfig({
integrations: [pagefind()],
});
C’est tout ! Après ces lignes, chaque npm run build indexera automatiquement votre site.
Étape 3 : créer le composant de recherche
Créez Search.astro dans src/components/ :
---
// src/components/Search.astro
---
<link href="/pagefind/pagefind-ui.css" rel="stylesheet">
<script src="/pagefind/pagefind-ui.js"></script>
<div id="search"></div>
<script>
window.addEventListener('DOMContentLoaded', () => {
new PagefindUI({
element: "#search",
showSubResults: true,
showImages: false
});
});
</script>
Quelques options :
element: élément DOM où monter l’UIshowSubResults: afficher les sous-résultats (ex. paragraphes correspondants)showImages: vignettes de page (je le désactive — chargement plus rapide)
Si vous utilisez ViewTransitions, ajoutez transition:persist pour éviter la réinitialisation à chaque navigation :
<div id="search" transition:persist></div>
Étape 4 : utiliser le composant sur vos pages
Deux approches :
Option 1 : intégrer à la barre de navigation
Dans Header.astro ou Navbar.astro :
---
import Search from '../components/Search.astro';
---
<header>
<nav>
<!-- vos liens de navigation -->
</nav>
<Search />
</header>
Option 2 : page de recherche dédiée
Créez src/pages/search.astro :
---
import Layout from '../layouts/Layout.astro';
import Search from '../components/Search.astro';
---
<Layout title="Recherche">
<main>
<h1>Rechercher des articles</h1>
<Search />
</main>
</Layout>
Puis un lien vers /search dans la navigation. Je préfère cette option — la barre reste aérée.
Étape 5 : build et test
Lancez le build :
npm run build
Si tout va bien, vous verrez quelque chose comme :
Running Pagefind...
Indexed 42 pages
Indexed 3,582 words
Created 5 index chunks
Finished in 0.234 seconds
Pour tester en local :
npm run build && npx pagefind --site dist --serve
Ouvrez http://localhost:1234 et testez la recherche.
Si le champ apparaît et que les mots-clés renvoient des résultats — bravo, c’est configuré !
Configuration avancée et optimisations
La recherche fonctionne déjà. Pour plus de précision, de vitesse et d’adéquation à vos besoins, voici des optimisations.
Contrôler précisément la portée d’indexation
Par défaut, Pagefind indexe tout le contenu de <body>. Navigation, sidebar, pied de page — tout entre dans l’index, ce qui fausse les résultats.
Exemple : un pied de page « À propos » sur chaque page fait que « auteur » matche partout.
Solution : l’attribut data-pagefind-body pour cibler la zone à indexer :
<body>
<nav data-pagefind-ignore>
<!-- navigation non indexée -->
</nav>
<main data-pagefind-body>
<!-- seul le contenu principal est indexé -->
<article>
<h1>Titre de l'article</h1>
<p>Contenu...</p>
</article>
</main>
<aside data-pagefind-ignore>
<!-- sidebar non indexée -->
</aside>
<footer data-pagefind-ignore>
<!-- pied de page non indexé -->
</footer>
</body>
Avec data-pagefind-body, seul ce bloc est indexé. Pour exclure des éléments isolés, utilisez data-pagefind-ignore.
Deux bénéfices :
- Recherche plus précise — le corps du texte, sans bruit
- Index plus petit — sans nav/footer répétés, −30 à −50 % de volume
Métadonnées et titres personnalisés
Pagefind prend par défaut le premier <h1> comme titre et les premiers paragraphes comme extrait. Parfois insuffisant.
Utilisez data-pagefind-meta :
<!-- remplacer le titre par défaut -->
<h1 data-pagefind-meta="title">Guide d'intégration de la recherche Astro</h1>
<!-- définir l'extrait -->
<p data-pagefind-meta="description">
Comment ajouter Pagefind à un blog Astro : étapes complètes et optimisation multilingue.
</p>
<!-- définir l'image -->
<img data-pagefind-meta="image[src]" src="/cover.jpg" alt="Couverture">
Ajuster les poids de recherche
Pour prioriser les correspondances dans les titres :
<h1 data-pagefind-weight="10.0">Titre de l'article</h1>
<p data-pagefind-weight="1.0">Contenu du corps</p>
Plus le poids est élevé, plus le résultat remonte. Défaut : 1,0 ; titres souvent entre 5,0 et 10,0.
Test multilingue
Inquiet du support chinois sur un outil occidental ? Bonne nouvelle : Pagefind gère nativement le multilingue, chinois inclus, sans config.
Résultats concrets :
- Segmentation : « Astro recherche » matche « Astro », « recherche », « fonction recherche Astro »
- Correspondance floue : « recherche blog » matche « ajouter recherche au blog », « recherche du blog »
- Pas de pinyin : « boke » ne trouve pas « 博客 » (peu impactant pour un blog technique)
UI de recherche personnalisée
L’UI par défaut suffit souvent. Pour un contrôle total (styles, filtres), utilisez l’API JavaScript :
// initialiser Pagefind
const pagefind = await import("/pagefind/pagefind.js");
// exécuter une recherche
const search = await pagefind.search("Astro");
// récupérer les détails
const results = await Promise.all(
search.results.map(r => r.data())
);
// rendu UI personnalisé
results.forEach(result => {
console.log(result.url); // URL de la page
console.log(result.meta.title); // titre
console.log(result.excerpt); // extrait
});
L’API offre un contrôle total et s’intègre à votre design system. Inconvénient : vous écrivez le rendu — pour la plupart, l’UI par défaut suffit.
Problèmes courants et solutions
Quelques écueils fréquents et leurs correctifs.
Problème 1 : titres ou extraits incorrects
Symptôme : le titre affiché n’est pas celui de l’article, ou l’extrait vient de la navigation.
Cause : Pagefind prend le premier <h1> et les premiers paragraphes — structure de page non standard.
Solution : data-pagefind-meta :
---
// BlogPost.astro
const { title, description } = Astro.props;
---
<article>
<h1 data-pagefind-meta="title">{title}</h1>
<p data-pagefind-meta="description">{description}</p>
<!-- reste du contenu -->
</article>
Problème 2 : ViewTransitions casse la recherche
Symptôme : avec ViewTransitions, en naviguant vers la page de recherche, le champ ne répond plus.
Cause : ViewTransitions réexécute les scripts alors que le DOM a été vidé — échec d’initialisation.
Solution : transition:persist sur le conteneur :
<div id="search" transition:persist></div>
Astro conserve cet élément lors des transitions, sans re-render.
Problème 3 : commande pagefind introuvable au build
Symptôme : npm run build échoue avec pagefind: command not found
Cause : seul astro-pagefind installé, pas le paquet core pagefind.
Solution : installer les deux :
npm install astro-pagefind pagefind
Si ça persiste, vérifiez l’intégration dans astro.config.mjs.
Problème 4 : recherche en 404 après déploiement
Symptôme : OK en local, mais 404 sur /pagefind/pagefind.js après déploiement Cloudflare Pages/Netlify.
Cause : dossier pagefind absent du build — commande de build incorrecte.
Solution : la commande doit inclure l’indexation Pagefind. Avec astro-pagefind, c’est automatique. Sinon, modifiez package.json :
{
"scripts": {
"build": "astro build && npx pagefind --site dist"
}
}
Utilisez cette commande au déploiement.
Problème 5 : erreur CSP ou index trop volumineux
Erreur CSP (Content Security Policy)
Si la console affiche Refused to load WebAssembly, Pagefind utilise WebAssembly — ajoutez wasm-unsafe-eval à la CSP :
Content-Security-Policy: script-src 'self' 'wasm-unsafe-eval'
Sur Cloudflare Pages, dans _headers :
/*
Content-Security-Policy: script-src 'self' 'wasm-unsafe-eval'; default-src 'self'
Index trop volumineux
Si le dossier pagefind pèse plusieurs Mo, du contenu superflu est indexé. Limitez la portée au corps :
<body>
<nav data-pagefind-ignore>...</nav>
<main data-pagefind-body>
<!-- seul ce bloc est indexé -->
</main>
<footer data-pagefind-ignore>...</footer>
</body>
−30 à −50 % de volume. Pagefind charge à la demande — l’utilisateur ne télécharge que les blocs correspondant à sa requête.
Cas pratiques et bonnes pratiques
Quelques conseils pour peaufiner la recherche après configuration.
Surveiller la qualité d’index
À chaque build, Pagefind affiche des statistiques — surveillez :
Running Pagefind...
Indexed 42 pages ← pages indexées
Indexed 3,582 words ← mots total
Created 5 index chunks ← blocs d'index
Finished in 0.234 seconds
Interprétation :
pagesdoit correspondre au nombre d’articles. Moins ? Vérifiez sidata-pagefind-ignoreexclut trop- Moins de
index chunks= index plus compact. Environ un chunk par 1 000–2 000 pages - Build > 5 s : contenu volumineux ou portée trop large — optimisez
Checklist de déploiement
Avant la prod :
1. Vérifier que le dossier pagefind existe
ls dist/pagefind
Vous devez voir pagefind.js, pagefind-ui.js, pagefind-ui.css, etc.
2. Tester la recherche
- Mots-clés courants → résultats OK
- Termes multilingues → segmentation correcte
- Mot inexistant → message « aucun résultat »
3. Vérifier la taille d’index
du -sh dist/pagefind
En général 50 Ko–500 Ko. Au-delà de 1 Mo, réduisez la portée.
4. Test mobile
Sur smartphone, vérifiez le bon fonctionnement. L’UI par défaut est responsive ; une UI custom exige votre propre travail.
Considérations SEO
La page de recherche n’a pas besoin d’être indexée — ajoutez noindex dans search.astro :
<head>
<meta name="robots" content="noindex, follow">
</head>
Les moteurs n’indexeront pas la page de recherche, mais suivront les liens qu’elle contient.
Optimisations performance
1. Chargement paresseux du composant
Si la recherche est dans la nav mais peu utilisée :
<div id="search"></div>
<script>
// charger Pagefind seulement au clic sur l'icône
document.getElementById('search-icon').addEventListener('click', async () => {
const pagefind = await import("/pagefind/pagefind-ui.js");
new PagefindUI({ element: "#search" });
});
</script>
Le premier écran ne charge pas Pagefind — meilleures performances.
2. Accélération CDN
Les fichiers d’index sont statiques — mettez-les en cache :
# _headers (Cloudflare Pages)
/pagefind/*
Cache-Control: public, max-age=31536000, immutable
3. Préchargement
Sur une page de recherche, préchargez les mots-clés fréquents :
const pagefind = await import("/pagefind/pagefind.js");
// précharger l'index des mots-clés populaires
pagefind.preload("Astro");
pagefind.preload("React");
Conclusion
En résumé : Pagefind est le meilleur choix pour ajouter la recherche à un blog Astro — gratuit, simple à configurer, performant, multilingue.
Comparé aux centaines de dollars par an chez Algolia, Pagefind fait économiser beaucoup. Pas de serveur, pas d’API : branchez et c’est prêt.
Si vous hésitez encore, essayez Pagefind 10 minutes. C’est plus simple que vous ne le pensez — et le résultat dépasse souvent les attentes.
Des questions en cours de config ? Laissez un commentaire. Déjà Pagefind en place ? Partagez votre retour !
Pour aller plus loin :
Intégrer Pagefind à un blog Astro — flux complet
Recherche full-text gratuite, rapide et multilingue en 10 minutes
⏱️ Estimated time: 10 min
- 1
Step 1: Comprendre les atouts de Pagefind et comparer aux autres solutions
Atouts Pagefind :
• Entièrement gratuit (contrairement à Algolia facturé au volume de recherches — aucun coût même avec beaucoup de trafic)
• Respectueux de la vie privée (les requêtes ne partent pas vers un serveur tiers, tout se fait en local)
• Sans backend (100 % statique, déployé sur CDN, aussi stable que vos pages)
• Chargement à la demande (index découpé en petits blocs, chargés uniquement quand l'utilisateur cherche)
Pagefind vs Algolia :
• Coût : Pagefind gratuit ; Algolia offre 10 000 recherches/mois en free tier, puis facturation à l'usage
• Confidentialité : Pagefind 100 % local ; Algolia exige l'envoi du contenu sur ses serveurs
• Taille d'index : Pagefind < 300 Ko pour 10 000 pages ; Algolia nécessite un index volumineux
• Configuration : Pagefind en 10 minutes ; Algolia exige clés API et paramétrage - 2
Step 2: Configuration en 10 minutes : installation et génération d'index
Installer le CLI Pagefind :
• Exécuter npm install -D pagefind
• Après installation, le CLI Pagefind génère automatiquement l'index au build
Générer l'index :
• Ajouter un script de build dans package.json
• Lancer pagefind après le script build
• Exemple : "build": "astro build && pagefind --site dist"
• L'index est ainsi créé automatiquement après le build
Intégrer l'UI de recherche :
• Ajouter un composant de recherche à la page
• Créer un bouton et un champ de recherche
• Utiliser les composants UI Pagefind pour afficher les résultats
Configurer le multilingue :
• Pagefind gère nativement le chinois et d'autres langues, sans config supplémentaire
• Il suffit de définir les options de langue
Tester la recherche :
• Lancer npm run build
• Tester dans le navigateur
• Vérifier que la recherche fonctionne - 3
Step 3: Optimisations avancées : UI personnalisée et performances
Personnaliser l'UI de recherche :
• Adapter le champ et la liste de résultats au design de votre site
• Surcharger les styles par défaut de Pagefind avec du CSS
Configurer la portée de recherche :
• Titres uniquement, contenu uniquement, ou full-text
• Ajuster selon vos besoins
Optimiser la taille d'index :
• Exclure les pages inutiles (404, pages de test)
• N'indexer que le contenu pertinent pour réduire la taille
Mettre en surbrillance les correspondances :
• Surligner les mots-clés pour faciliter la lecture des résultats
Optimisations performance :
• Chargement différé : ne pas charger Pagefind au premier écran, seulement au clic sur la recherche
• Accélération CDN : les fichiers d'index sont statiques — les mettre en cache via Cache-Control dans _headers
• Préchargement : sur une page de recherche, précharger l'index des mots-clés fréquents
FAQ
Pourquoi choisir Pagefind ? Quels sont ses atouts ?
• Entièrement gratuit (contrairement à Algolia facturé au volume — aucun coût même avec beaucoup de trafic)
• Respectueux de la vie privée (requêtes en local, sans envoi vers un tiers — important pour les lecteurs soucieux de confidentialité)
• Sans backend (pas de serveur ni base de données à maintenir — 100 % statique sur CDN, aussi stable que vos pages)
• Chargement à la demande (index découpé en blocs, chargés à la recherche — le premier écran n'en souffre pas)
Pagefind est une « recherche statique » : l'index est généré au build, déployé avec le site, la recherche s'exécute dans le navigateur. Comparé aux centaines de dollars par an chez Algolia, Pagefind fait économiser beaucoup — sans serveur ni API à configurer : branchez et c'est prêt.
Quelle est la différence entre Pagefind et Algolia ?
Coût :
• Pagefind entièrement gratuit
• Algolia : 10 000 recherches/mois en free tier, puis facturation à l'usage (standard dès 1 $/1 000 recherches)
Confidentialité :
• Pagefind 100 % local, aucune donnée envoyée
• Algolia exige l'envoi de tout le contenu sur ses serveurs
Taille d'index :
• Pagefind : < 300 Ko pour 10 000 pages
• Algolia : index volumineux
Configuration :
• Pagefind : 10 minutes
• Algolia : clés API et paramétrage
Comparé aux centaines de dollars par an chez Algolia, Pagefind fait économiser beaucoup — sans serveur ni API : branchez et c'est prêt.
Comment configurer Pagefind ? Quel est le flux en 10 minutes ?
• Exécuter npm install -D pagefind
• Le CLI génère automatiquement l'index au build
Générer l'index :
• Ajouter un script dans package.json
• Lancer pagefind après build, ex. "build": "astro build && pagefind --site dist"
• L'index est créé automatiquement
Intégrer l'UI :
• Ajouter un composant de recherche
• Créer bouton et champ
• Utiliser l'UI Pagefind pour les résultats
Multilingue :
• Support natif du chinois et d'autres langues
• Définir les options de langue
Tester :
• npm run build
• Tester dans le navigateur
• Vérifier le bon fonctionnement
Si vous hésitez encore à ajouter la recherche, essayez Pagefind 10 minutes — c'est plus simple que vous ne le pensez, et le résultat dépasse souvent les attentes.
Comment optimiser les performances de Pagefind ?
Chargement différé :
• Ne pas charger Pagefind au premier écran — seulement au clic sur la recherche
• Import dynamique : import('pagefind/pagefind-ui.js').then(({ PagefindUI }) => { new PagefindUI({ element: '#search' }); })
Accélération CDN :
• Les fichiers d'index sont statiques — les mettre en cache CDN
• Dans _headers : Cache-Control: public, max-age=31536000, immutable
Préchargement :
• Sur une page de recherche, précharger l'index des mots-clés fréquents
Optimisations avancées :
• UI personnalisée (CSS sur les styles par défaut)
• Portée de recherche (titres, contenu ou full-text)
• Taille d'index (exclure 404 et pages de test)
• Surbrillance des mots-clés correspondants
Pagefind prend-il en charge la recherche en chinois ?
• Support natif du chinois sans configuration supplémentaire
• Index souvent < 100 Ko
• Recherche rapide, bonne expérience utilisateur
Configuration : définir les options de langue — Pagefind reconnaît et traite automatiquement le contenu chinois.
10 min de lecture · Publié le: 3 déc. 2025 · Mis à jour le: 27 juil. 2026
Guide Astro
Si vous arrivez depuis la recherche, le plus rapide est de passer à l’article précédent ou suivant de cette série.
Précédent
Guide complet d'optimisation d'images Astro : 5 astuces pour accélérer votre site de 50 %
Optimisation d'images Astro en pratique : composant Image, choix WebP/AVIF, lazy loading, intégration Cloudflare CDN. Exemples complets pour passer de 6 s à 1,8 s au premier affichage et viser 95 au Lighthouse.
Partie 15 sur 18
Suivant
Migrer de Hugo/Hexo/Next.js vers Astro : guide détaillé en 3 jours
Vous voulez quitter Hugo, Hexo ou Next.js pour Astro ? Ce guide couvre les trois frameworks majeurs : étapes détaillées, pièges courants et bonnes pratiques pour une migration en 1 à 3 jours, gains de performance nets et SEO préservé.
Partie 17 sur 18



Commentaires
Connectez-vous avec GitHub pour laisser un commentaire