La Pagination de WordPressQuand je travaillais sur la nouvelle version de SeoMix, je me suis heurté à l’une des principales lacunes de WordPress : la pagination. Non seulement celle proposée par défaut est archaïque, mais dès que l’on veut l’améliorer, on se heurte à des bugs aussi variés que frustrants, notamment avec l’utilisation du query_post.

La question que je me suis posé lors de cette version 3 du site est toute simple :

Comment créer et modifier dynamiquement la pagination de mon site pour l’optimiser pour les visiteurs et les moteurs de recherche?

J’ai donc tout repris à la base pour implanter une navigation qui allie ergonomie et référencement naturel. Suivez le guide. ;)

La pagination sur un site Internet

Petit rappel d’ergonomie

Si votre site est bien conçu, les internautes arrivent dessus via votre page d’accueil (grâce à la fidélisation et à l’image de marque) ou via une page de contenu (grâce au référencement naturel ou encore aux réseaux sociaux, …).

Les pages de catégories et d’archives, ainsi que les pages suivantes (page 1, page 2, page 3, …), sont en général utilisées pour aider le visiteur à naviguer entre vos différents contenus et pour faciliter le travail de référencement naturel. Cette pagination et navigation entre vos différentes publications est donc cruciale. Elle doit être :

  • simple à utiliser
  • cohérente et logique

Voici quelques définitions avant de continuer.

La navigation :

Sur Internet, la navigation est tout élément permettant de naviguer entre plusieurs contenus, quel que soit la méthode utilisée.

La pagination :

Sur Internet, la pagination est une décomposition d’un contenu en plusieurs pages numérotées (Page 1 – Page 2 – …).

Il faut donc comprendre que la pagination n’est qu’un élément de la navigation, comme peuvent l’être un menu ou un bloc d’articles relatifs qui aident à naviguer d’un article à un autre.

La navigation sous WordPress

Lorsque l’on parle de navigation sur un blog, on parle forcément de liens, sous toutes ses formes. Ce n’est pas l’objectif de cet article, mais la navigation peut se faire de multiples façons sur WordPress. Je vous conseille donc de les ajouter ou non, et de les adapter en fonction de votre site, de vos objectifs (quelle page je désire mettre en avant) et de vos visiteurs.

Cette navigation peut se faire :

  • Avec un menu
  • Avec les liens contenus dans vos articles
  • Dans votre sidebar
  • Dans votre footer
  • Grâce à un bloc d’articles relatifs
  • Dans des pages d’auteurs
  • Via des pages de mots clés
  • Via les liens article suivant et article précédent

Le guide ici présent va plutôt se focaliser sur la pagination de WordPress, à savoir les liens vers les pages suivantes sur votre page d’accueil, ou encore sur les pages de catégories, de mots clés ou de dates.

WordPress et la pagination

Supprimer la pagination par défaut

La première étape consiste à se débarrasser des liens mis par défaut dans votre thème WordPress. Je parle des fameux « Articles plus anciens » et « Articles plus récents« , puisqu’ils posent deux problèmes:

  • Une indexation trop lente si vous avez beaucoup de contenus, et donc beaucoup de pages
  • Une ancre qui n’a aucune pertinence aux yeux des moteurs de recherche.
La pagination par défaut des blogs WordPress
La pagination par défaut des blogs WordPress

Dans votre thème, ces liens sont présents dans plusieurs fichiers de votre thème :

  • index.php
  • category.php
  • tag.php
  • search.php
  • taxonomy.php
  • loop.php
  • archive.php
  • date.php

Cherchez dans ces fichiers les codes suivants et supprimez-les. Pensez juste à retenir leur emplacement pour les étapes suivantes de ce guide.

<?php if ( $wp_query->max_num_pages > 1 ) : ?>
 <div id="nav-above">
 <div><?php next_posts_link( __( '<span>&larr;</span> Older posts', 'twentyten' ) ); ?></div>
 <div><?php previous_posts_link( __( 'Newer posts <span>&rarr;</span>', 'twentyten' ) ); ?></div>
 </div><!-- #nav-above -->
<?php endif; ?>

Vous trouverez aussi ce code sous une forme plus simple :

<?php next_posts_link('&laquo; Articles plus anciens') ?>
<?php previous_posts_link('Articles plus récents &raquo;') ?>

Les plugins de navigation

Maintenant, il vous faut remplacer cette pagination par des éléments plus efficaces, par exemple en installant les plugins WordPress WP-PageNavi ou encore PageBar. Il en existe bien entendu d’autres, plus ou moins puissants et personnalisables. Peu importe celui que vous allez prendre, le tout est de savoir l’utiliser à bon escient

En ce qui me concerne, j’avais pris pour habitude d’utiliser PageNavi. Quel que soit votre choix, la plupart de ces plugins ajoutent automatiquement la nouvelle pagination. Si ce n’est pas le cas, reportez-vous au fichier d’aide de chaque plugin. Par exemple, PageNavi s’installe avec le code suivant :

<?php if (function_exists('wp_pagenavi')) wp_pagenavi(); ?>

Pagebar utilise quant-à lui le code PHP ci-dessous :

<?php if (function_exists('postbar')) postbar(); ?>

Le paramétrage

La pagination est une question de bon sens. Vous devez donner la possibilité à vos visiteurs et aux moteurs de recherche de naviguer rapidement et facilement sur votre site. Posez-vous donc les questions suivantes:

Quels sont les fonctionnalités de navigation dont mes visiteurs ont besoin ? Comment atteindre rapidement n’importe quel contenu de mon site ?

Selon mes essais et les retours que j’ai pu avoir, voilà ce que je peux vous dire sur une pagination optimale. Il vous faut:

  • Un rappel du nombre de pages total
  • Le rappel de la page où le visiteur se trouve (sans que cela soit un lien, puisque faire un lien vers « soi-même » n’a aucun intérêt)
  • Un accès direct à la première page et à la dernière page
  • Un accès aux deux pages suivantes et précédentes
  • Lors de la présence de nombreuses pages, un accès direct à des pages intermédiaires (par multiples de 5, 10, 20 ou plus en fonction du nombre de vos contenus).

En résumé, le visiteur et le moteur de recherche doivent pouvoir accéder à n’importe quelle page en 5 clics maximum. Cela devrait donc aboutir à ce type de navigation:

La Pagination de WordPress
La Pagination idéale pour WordPress

C’est donc à vous de paramétrer votre plugin WordPress pour qu’il affiche une pagination proche de celle montrée sur l’image précédente.

Pour que Google puisse facilement indexer tous vos contenus avec un nombre de clics minimum, on peut modifier deux éléments :

  • Le nombre d’articles par page (plus ils seront nombreux, moins il y aura de pages à indexer)
  • L’intervalle présent dans la pagination

La difficulté va être de trouver quelle valeur donner à cet intervalle. Pour cela, il faut faire un peu de maths.

  • Nombre d’intervalle = 3 à 5 (3 pour un petit blog, 4 voir 5 pour les plus gros).
  • Multiple d’intervalle = Nombre de pages total / 2 / Nombre d’intervalle.
  • Nombre de pages à afficher = Multiple d’intervalle /2 /2.

Prenons l’exemple d’un blog ayant 135 pages, et que l’on veuille indexer la 74ème page.

  1. 1er clic : Page d’accueil du site
  2. 2ème clic : arrivée sur la page 80 (Multiple d’intervalle de 16 avec 4 nombres d’intervalles)
  3. 3ème clic : arrivée sur la page 76 (Nombre de page à afficher à 4)
  4. 4ème clic : arrivée sur la page 74

En 4 clics, les moteurs de recherche et les visiteurs peuvent atteindre n’importe quelle page du site. Attention cependant, le concept ne fonctionnera pas à tous les coups : je pense notamment aux usines de contenus ayant plusieurs milliers de pages. Dans ce cas de figure, seul un bon maillage interne pourra permettre l’indexation de tous les contenus (via le menu, les mots clés, les articles relatifs, les liens contenus dans les publications, …)

Améliorer la pagination

Le Loop de WordPress

Tout ce qui a été expliqué juste avant va fonctionner sur 90% des sites utilisant WordPress. Mais cela va se compliquer énormément dès que l’on va vouloir mettre en place un thème spécifique, notamment avec le célèbre Query_Post.

Reprenons avant la base de fonctionnement du CMS. L’affichage des contenus de WordPress fonctionne avec 3 éléments différents :

  • un template (votre thème)
  • un système de variables (récupérée grâce à l’URL)
  • une ou plusieurs boucles PHP (appelées « Loop »)

Je m’explique :

  1. WordPress détecte l’url que vous demandez et choisit le template correspondant
    • index.php pour la page d’accueil
    • single.php pour un article
    • category.php pour une catégorie, …
  2. Une fois sur le bon template, WordPress va récupérer les variables et données correspondantes, notamment l’ID.
  3. Ensuite, WordPress exécute le fichier de votre thème, qui peut contenir une ou plusieurs boucles (ou loop) à exécuter.

Sur une page d’article, ce Loop est exécuté une seule fois pour afficher un seul contenu, tandis qu’il sera calculé plusieurs fois pour la page d’accueil (autant de fois que vous avez d’articles à afficher).

On peut reconnaître le loop à ce code :

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
     //Contenu du loop
<?php endwhile;?><?php endif; ?>

Une image valant parfois 1000 mots, voici une brève explication du fonctionnement de WordPress:

Le Loop de WordPress (Boucle)
Le Loop de WordPress

Query_posts, pagination & Loop

La boucle par défaut de WordPress fonctionne parfaitement pour la pagination, puisqu’elle va automatiquement utiliser les bons paramètres et variables de la page.

Mais il existe un cas de figure dans lequel cela ne fonctionnera pas. Si vous associez votre plugin de navigation à un query_post, il ne saura pas sur quelle page il est situé ni quelles pages il doit afficher, et vous risquez par conséquence :

  • d’afficher des contenus identiques sur tous les pages…
  • de « perdre » des pages qui ne s’afficheraient pas dans votre pagination
  • d’afficher des pages qui n’existent pas (des erreurs 404).

On peut en effet demander à WordPress d’exécuter des loops supplémentaires utilisant la fonction query_post. Par exemple, ces boucles supplémentaires peuvent servir à afficher les derniers articles d’une catégorie précise, le contenu d’une taxonomie ou encore les articles populaires du blog.

Tant que vous conserverez le loop principal, vous n’aurez aucun souci. Mais si vous supprimez et remplacez celui-ci par un Query_posts, cela va complètement égarer votre plugin. Comme je l’ai dit auparavant, la boucle contient les variables supposées de la page selon votre paramétrage de WordPress. Sans ce loop, impossible pour les contenus et la pagination de fonctionner correctement. La boucle de WordPress fait appel automatiquement à la variable Paged qui indique la page actuelle, ce que ne fait pas la fonction query_post.

Si vous ne faites rien, toutes vos pages vont afficher le même contenu : celui de la 1ère page. Votre pagination ne servirait donc à rien. La solution est de forcer le plugin à comprendre la page où il est, grâce à la variable « Paged« . Avant la ligne qui contient votre query_posts, il faut donc demander à WordPress de récupérer le numéro de la page actuelle, puis de modifier la requête en conséquence (avec paged=$paged).

<?php if (have_posts()) : ?>
    <?php
    // On récupère la page actuelle
        $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    // On exécute le querypost en y ajoutant la variable de la page
        query_posts("vosparametres&paged=$paged"); ?>
    <?php while (have_posts()) : the_post(); ?>
        // votre contenu
    <?php endwhile; ?>
<?php endif; ?>

Votre plugin saura maintenant quel contenu afficher pour chaque page. L’intérêt d’une telle démarche est simple : pouvoir mélanger, supprimer, adapter ou modifier des types de contenus différents ou provenant de sources différentes.

Des paginations inutiles

Par défaut, on retrouve la pagination sur ces pages :

  • L’accueil
  • Les catégories
  • Les mots clés
  • Les taxonomies (si vous en avez créé)
  • les archives (par auteur ou par date).

Certaines sont inutiles à la fois pour le visiteur et pour le moteur de recherche : je vous conseille ainsi de supprimer les archives par date et par auteur, car le regroupement de contenus selon leur date de publication ou selon le rédacteur n’a tout simplement aucun intérêt. Commencez par vous modifier tous les fichiers de votre thème pour supprimer les liens qui permettent d’accéder à ce type d’archive.

Faites cependant attention : sur certains sites multi-utilisateurs, il est possible que la page auteur ait un intérêt. Dans ce cas, modifiez le page en question pour supprimer uniquement la pagination qui va dupliquer votre contenu déjà présent sur les pages de catégories ou de mots clés.

Une fois que les différentes pages de votre site ne contiennent plus de liens qui dirigent vers ces archives par date et par auteur, suivez ces étapes :

  • Ajoutez cette balise méta dans les fichiers author.php et date.php, ce qui va forcer la désindexation de ces contenus
<meta name="robots" content="noindex,nofollow></meta>
  • Enlever tous les widgets relatifs aux auteurs (s’ils incluent un lien) et aux archives par date (je pense notamment au calendrier).
  • Dans le fichier robots.txt situé à la racine de votre site, ajoutez également ces lignes :
User-agent: *
Disallow: /author/
Disallow: /2010/
Disallow: /2011/
Disallow: /2012/
...

Si vous avez suivi ce guide jusqu’au bout, vous avez désormais une navigation ergonomique pour l’utilisateur et optimisée pour le référencement naturel (et surtout pour l’indexation).

Dans deux prochains articles, je traiterais deux sujets fortement liés à la pagination de WordPress:

  • la duplication de contenus relatifs, notamment le contenu dupliqué entre les catégories, la page d’accueil et la page des mots clés
  • la méthode pour pouvoir afficher un nombre d’articles différents selon la page où l’on se trouve (par exemple 5 articles en pages d’accueil mais 30 articles en page 2).