3Zebres-Tarangire[1]

Eviter le duplicate content
Au moins sur les archives des catégories !

Par défaut, WordPress provoque du duplicate content sur les pages d’archives des catégories. Bug ou pas, un ticket est en route depuis pas mal de temps pour savoir si le core doit être modifié à ce sujet. Néanmoins, il existe une solution rapide pour régler ce problème.

Du code, direct

Ne perdons pas de temps ! Voici le code que j’ai donc mis à jour et qui corrige quelques rares cas qui peuvent provoquer des redirections non attendues.

Copiez ce code dans un mu-plugin ou dans le fichiers functions.php de votre thème (enfant)

add_action( 'wp', 'baw_non_duplicate_content' );
function baw_non_duplicate_content( $wp ) {
    global $wp_query;
 	// On cherche à naviguer dans une catégorie
    if( isset( $wp_query->query_vars['category_name'], $wp_query->query['category_name'] ) )
    {
    	global $wp_rewrite;
    	$paged = isset( $wp_query->query_vars['paged'] ) && (int)$wp_query->query_vars['paged']>1 ?
    			$wp_rewrite->pagination_base.'/'.(int)$wp_query->query_vars['paged'].'/' : '';
    	// On récupère l'url de la catégorie désirée, et l'url actuelle
	    $correct_url = get_term_link( $wp_query->query_vars['category_name'], 'category' );
	    if( is_string( $correct_url ) && $correct_url )
	    {
	    	$correct_url .= $paged;
	    }
	    $actual_url = 'http' . ( is_ssl() ? 's' : '' ) . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
	    $actual_url = reset( (explode('?', $actual_url)) );
	    $actual_url = reset( (explode('&', $actual_url)) );
	    // Si les urls sont différentes, on redirige vers la vraie url de la catégorie
		if( is_string( $correct_url ) && $correct_url != $actual_url )
		{

	        wp_redirect( $correct_url, 301 );
		die();

	    }
    }
}

Cette mise à jour gère la pagination de ces catégories, ce qui n’était pas le cas, de plus je récupère le permalien du terme maintenant, ce que je trouve meilleur.

Lire la suite

Vous aimez ? Partagez !

15 réflexions sur “ Eviter le duplicate content

  1. Bonjour et merci pour cet article.
    Mais je me posais la question à savoir pour « de rares cas… » si cela valait le cout d’alourdir WordPress de quelques lignes de codes supplémentaires ?

    En tous cas, j’ai bien noter (et lu l’article) sur le mu-plugin très intéressant: merci encore pour les infos et découverte à la fois.

    1. Hello
      « alourdir » : si tu as besoin de ces redirections car les fakes pages de catégories qui font le duplicate content te gênent, le « poids » en vaut-il le coup ? Tu n’auras pas le même résultat sans rien. Au pire, c’est WordPress qui prendra ça sur lui, et là tu ne te posera pas la question.
      Ensuite à la lecture du code, il n’y a aucun traitement lourd si le cas n’est pas « true ». Je ne fais que vérifier des valeurs dans un tableau, ce n’est même pas calculable en temps de traitement. 0 requête !
      Après, si le cas est vrai, on fait un traitement en plus, mais on en a besoin non ? Sinon on aurait pas mis le code en place, ça reste finalement léger.
      Traiter le code de lourd, ça me fait mal au coeur :)
  2. Salut Julio,
    merci de la màj du code, attention toutefois il semble qu’utilisé conjointement avec ton code « 404 erreurs de pagination », il provoque une boucle de redirection…
  3. Et dire que j’ai failli manquer cet article.

    C’est une excellente idée que voilà. Cela pourra éviter partiellement certaines attaques de négatives SEO qui cibleraient la création de pages doublons sur le site visé.

    D’ailleurs, je suis sûr qu’on peut faire le même code pour toutes les taxonomies de WordPress (celle des tags ou d’éventuelles custom taxonomies).

    1. Merci pour tous tes partages !
      Il me semble que pour les tags c’est inutile car la structure ne permets pas de triche, en revanche, à tester sur une custom taxo hiérarchique.
      ;)
  4. Hello,
    Je viens de lire le livre de Daniel Roch « Optimiser son référencement WordPress » et de découvrir ton site, mentionné, par la même occasion.
    Amusant de le voir commenter cet article d’ailleurs…
    Je teste immédiatement ce code et petit lol en passant pour la charte @ »Plan rencontre dans les WC ».
  5. je découvre votre blog récemment et j’avoue que vos articles sont très intéressantes :)
    Merci pour les codes partagés pour éviter la duplicate en WP
    bon continuation,
  6. Hellow.

    Attention, redirection infinie si le site est installé dans un sous-dossier (pas à la racine du site donc). Dans ce cas, $_SERVER['REQUEST_URI'] contiendra ce sous-dossier au début, et home_url( $_SERVER['REQUEST_URI'] ) fera apparaitre ce dossier en double.

    A+ et merci :)

    1. Problème résolu :)

      $actual_url = 'http' . ( is_ssl() ? 's' : '' ) . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
      $actual_url = reset( (explode('?', $actual_url)) );
      $actual_url = reset( (explode('&', $actual_url)) );

Envie de dire quelque chose ?

Avant de parler, merci de lire la charte des commentaires.

Utiliser le tag [php][/php] pour ajouter du code ou utilisez un service comme pastebin.com.
Cibler un commentateur avec un "@", merci à Mention Comments Authors !