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.
11 Commentaires
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.
Merci de cette astuce qui me sera très utile.
De rien !
Oui merci de penser à nos SEO Julio
Merci Julio, je vais m’occuper de mettre ça en place pour mes 404, c’est vrai que je n’y pensai même plus…
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
Bonjour,
Juste un très grand merci pour cette solution qui me délivre d’un piétinement de plusieurs jours.
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.
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…
La solution à mon problème! Merci pour l’astuce.
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().