Tout savoir sur WordPress

Eviter l’erreur 404 provoquée par une pagination

WordPress contient un bug qui provoque une erreur 404 sur la pagination d’une archive. Pour ne pas pénaliser le référencement d’un site, il convient de régler ce problème.

Après vous avoir présenté l’astuce permettant d’éviter le duplicate content sur les pages des catégories, je vous propose de découvrir la démarche à suivre pour éviter une erreur 404 sur une page contenant une pagination.

Prenons comme exemple l’adresse suivante : http://www.exemple.com/category/test/page/999/

Si la catégorie “test” contient moins de 999 pages, WordPress redirige automatiquement le visiteur vers la page 404. Pour éviter cela, on décide de faire une redirection 301 vers la page d’origine sans pagination.

Copiez le code ci-dessous dans le fichier functions.php présent à la racine de votre thème :
[pastacode lang=”php” message=”” highlight=”” provider=”manual”]

add_action('template_redirect', 'baw_template_redirect_no_404_pagination' );
function baw_template_redirect_no_404_pagination() {
	
    // Récupération de la variable "paged"
    $paged = get_query_var( 'paged' );
	
    // Si nous sommes sur une page 404 avec une page > à 0
    if( is_404() && $paged > 0 ):
	global $wp_rewrite;
	
	$url = preg_replace( "#/$wp_rewrite->pagination_base/$paged(/+)?$#", '', $_SERVER['REQUEST_URI'] );
	wp_redirect( $url, 301 );
	die();
    endif;
}

[/pastacode]
Ce code permet de vérifier si l’on se trouve sur une page 404 et que le numéro de la page demandée est supérieure à 0. Dans le cas où nous sommes sur une erreur 404, cale signifie que la page demandée n’existe pas. Par conséquent, il convient de rediriger le visiteur vers la page d’origine sans pagination.

Merci à toutes les personnes qui ont testé l’astuce avant la publication : @gamesngeeks, @zagriyen, @rochdaniel, @theloopfr et aux autres.

Cet article a été mis à jour il y a 4170 jours - Il n'est peut être plus à jour !

Article écrit par Julio P.

Fondateur de SecuPress, l’extension de sécurité WordPress, Julio Potier est un Expert WordPress, un Formateur Expérimenté et un Consultant en Sécurité Web.

Il aime partager ses compétences et ses réflexions sur WordPress, donnant des conférences partout dans le monde.

11 Commentaires

  1. Bonjour,
    Il n’y pas mieux que les erreurs 404 pour tuer le référencement et faire fuir les robots. Merci pour l’astuce pour éviter cela.

  2. C’est sympa, mais mis à part si jamais on supprime énormément de contenu, on ne devrait jamais avoir de liens qui pointent vers une pagination qui n’existe pas

  3. Salut Julio,

    Le code est parfait pour les catégories et est très bien pensé. Cependant, le code ne fonctionne pour la pagination de la homepage. Si je check une URL du type monsite.com/page/9999, j’obtiens une magnifique page blanche.

  4. Très intéressante astuce, mais je me pose une question:

    Si un jour la pagination atteint, dans cet exemple çi la page 999 (dans les petits blogs, ça peut arriver plus tôt que prévu), qu’en est-il du SEO? Car un code 301 = redirection définitive, or finalement, la redirection définitive se retrouve avec une page valide et finalement, c’est plus un redirection définitive!

    Exemple: Jour 1: page 30, aucun article => 404 => 301 vers X
    Jour 5: page 30, présence de 2 articles => plus d’erreur 404, mais google a enregistré la redirection 301 vers X…

  5. Merci pour l’astuce

    j’ai du adapter la regexp car mes URL de pagination contenaient des paramètres additionnels. ‘add_args’ de paginate_links().

    $url = preg_replace( "#/$wp_rewrite->pagination_base/$paged(/+)?#", '', $_SERVER['REQUEST_URI'] );