Partie 19 sur 22

Pagination et navigation à facettes sans gonfler l'index

Pagination et navigation à facettes sans gonfler l'index

Les listings de catégories, les archives de blog et les vues filtrées génèrent plus d'URL que tout le reste du site réuni, et la plupart ne devraient pas être indexées. C'est là que meurt le budget de crawl et que naissent vraiment les problèmes de duplication. L'objectif : le robot atteint chaque produit/article, et les permutations d'URL parasites restent hors de l'index.

Pagination : de vraies URL, canonical vers soi-même

  • Chaque page reçoit une vraie URL, que l'on peut lier : /blog/page/2 ou ?page=2. La page 2 doit exister en HTML que le robot peut demander.
  • Chaque page se canonicalise vers elle-même, pas vers la page 1. Un canonical de la page 2 vers la page 1 dit à Google « la page 2 est un doublon », et tout ce qui n'est lié que depuis les pages 2+ sort silencieusement de la découverte. C'est toujours l'erreur de pagination la plus fréquente.
  • Google a abandonné rel="prev/next" en 2019 : ce qui compte désormais, ce sont de simples liens <a href> entre les pages (des liens numérotés amènent le robot aux pages profondes plus vite qu'une chaîne « suivant » seulement).
  • Les titres doivent différer : ajoutez « — Page 2 » pour ne pas multiplier les doublons de titres.

Sous Next.js, les pages basées sur des chemins peuvent être entièrement statiques :

// app/blog/page/[num]/page.tsx
export async function generateStaticParams() {
  const pages = Math.ceil((await getPostCount()) / PAGE_SIZE);
  return Array.from({ length: pages - 1 }, (_, i) => ({ num: String(i + 2) }));
}

Défilement infini : en tandem avec de vraies pages

« Afficher plus » et la liste infinie sont des mécaniques côté client, et les robots ne font pas défiler. Un schéma solide : gardez les URL paginées comme ossature explorable, mettez à jour la barre d'adresse via l'History API au fil du défilement (/page/3 quand l'utilisateur atteint le troisième lot), et faites en sorte que chacune de ces URL, en accès direct, rende son lot côté serveur. L'utilisateur obtient un flux fluide, le robot des pages.

Facettes : l'explosion combinatoire

Une catégorie avec 6 filtres de 10 valeurs donne des millions de permutations d'URL. Répartissez les facettes en trois niveaux :

  1. Dignes de l'index : les combinaisons avec une vraie demande et un assortiment stable (« chaussures de running rouges », « appartements avec balcon à Varsovie »). Donnez-leur des chemins statiques propres (/running-shoes/red), des titres et introductions uniques, un canonical vers elles-mêmes, une place dans le sitemap. Ce sont en pratique des pages de SEO programmatique : appliquez le même seuil de valeur unique.
  2. Utiles mais non indexables : tris, curseurs de prix, multi-sélections. Gardez-les en query params, robots: { index: false, follow: true }, canonical vers la catégorie de base.
  3. Pièges à crawl : paramètres de session, combinaisons infinies de calendriers et de dates. Bloquez dans robots.txt pour qu'ils ne consomment pas du tout de budget de crawl (noindex exige d'explorer chaque URL pour être pris en compte).

Ne laissez jamais les filtres générer des liens par lesquels le robot entrerait dans le niveau 3 : rendez ces contrôles sous forme de boutons/formulaires, pas de <a href>.

Checklist :

  • Pages de pagination : vraies URL, canonical vers soi-même, liens <a> numérotés, titres différents
  • Zéro canonical vers la page 1 ; rien n'est accessible uniquement par défilement infini
  • Facettes réparties par niveaux : indexables / noindex,follow / bloquées dans robots
  • Les combinaisons dignes de l'index reçoivent des chemins statiques, un contenu unique et des entrées dans le sitemap
  • Les paramètres-pièges ne sont jamais rendus comme des liens <a href> explorables

Vous préférez que quelqu'un s'en charge pour vous ?

J'audite et je corrige le SEO technique des sites Next.js : indexation, vitesse, hreflang et visibilité dans les moteurs d'IA.

Service de SEO technique