Noindex sur toutes les pages inutiles de Prestashop

Toujours dans la lignée des scripts pour améliorer la qualité globale de vos sites et comme j’utilise presque quotidiennement Prestashop, en voici un autre.

Le script ci-dessous est un code que j’appelle ‘bulletproof’. Il va servir pour toutes les versions de Prestashop et dans toutes les situations dans je vais l’appliquer dans la majorité des cas.

Comme vous le savez, Prestashop génère des tonnes d’url pour trier vos produits, faire des comparaisons, pour faire de la pagination, des recherches de produits, etc etc.

Vous pouvez bien sûr passer par les Google Webmaster Tools pour régler ce problème et encore, je fais moins confiance à cette solution qu’à celle que je propose. Copiez le code dans le header.tpl de votre thème Prestashop et remplacez

<meta name="robots" content="{if isset($nobots)}no{/if}index,follow" />

par

Edit 17/02 : suite aux recommandations de Bertimus, code modifié et optimisé. (Je ne l’ai pas mentionné mais si vous n’avez pas activé la ré-écriture d’URL, ce code va désindexer votre site…)

{assign var=myURI value=$smarty.server.REQUEST_URI}
{if $myURI|strstr:"/recherche" ||
	$myURI|strstr:"mentions-legales" ||
	$myURI|strstr:"products-comparison.php" ||
	$myURI|strstr:"orderby" ||
	$myURI|strstr:"orderway" ||
	$myURI|strstr:"fabricants" ||
	$myURI|strstr:"fournisseurs" ||
	$myURI|strstr:"magasins" ||
	$myURI|strstr:"commande" ||
	$myURI|strstr:"promotions" ||
	$myURI|strstr:"id_cms" ||
	$myURI|strstr:"id_manufacturer" ||
	$myURI|strstr:"id_category" ||
	$myURI|strstr:"back=" ||			
	$myURI|strstr:"back%3D" ||			
	$myURI|strstr:"sendtoafriend-form.php" ||
	$myURI|strstr:"attachment.php" ||
	$myURI|strstr:"/content/category" ||
	$myURI|strstr:"n=" ||
	$myURI|strstr:"n%3D" ||
	$myURI|strstr:"p=" ||
	$myURI|strstr:"p%3D" ||
	$myURI|strstr:"qty" ||
	$myURI|strstr:"noredirect=" ||
	$myURI|strstr:"add=" ||
	$myURI|strstr:"add%3D" ||
	$myURI|strstr:"selected_filters" ||
	$myURI|strstr:"bPost=" ||	
	$myURI|strstr:"search_query=" ||
	$myURI|strstr:"token"}
	<meta name="robots" content="noindex,follow" />
{else}
	<meta name="robots" content="{if isset($nobots)}no{/if}index,{if isset($nofollow) && $nofollow}no{/if}follow" />
{/if}
Mettre une page de Joomla en noindex via du PHP
Comment supprimer le /fr/ des urls de Prestashop

23 Comments on “Noindex sur toutes les pages inutiles de Prestashop”

  1. Bonjour,

    Merci pour cette astuce

    Une autre solution pour ne demander l’indexation que des pages « importantes » par les moteurs de recherche, toujours dans le header.tpl :

    {if $page_name == ‘cart’ or $page_name == ‘order’ or $page_name == ‘discount’ or $page_name == ‘contact’ or $page_name == ‘authentication’ or $page_name == ‘cms’ or $page_name == ‘sitemap’ or $page_name == ‘pagenotfound’ or $page_name == ‘best-sales’ or $page_name == ‘supplier’}

    {else}

    {/if}

    Petite astuce : pour connaître le nom de la page, insérez (temporairement) dans votre layout le code {$page_name}. Ainsi vous ajoutez dans la liste ci-dessus (forme « $page_name == ‘nomdelapageanepasindexer’) les pages que vous ne souhaitez pas retrouver dans les moteurs de recherche.

    Bonne journée !

  2. Merci pour la solution je vais teste ça dès cette semaine pour un site tout neuf, car les paramètres d’Url sont une véritable plaie pour le ref’ d’un prestashop et je te confirme Google Webmaster tool, ça ne marche pas à tous les coups… Pensez également à interdire tous ces paramètres dans le robots.txt ;)

  3. En place, merci Jérôme !

    J’en ajoute quelques-unes que Google m’a indexé et que je ne juge pas pertinentes (à trier suivant vos besoins) :

    $smarty.server.REQUEST_URI|strstr: »fabricants » ||
    $smarty.server.REQUEST_URI|strstr: »fournisseurs‎ » ||
    $smarty.server.REQUEST_URI|strstr: »magasins » ||
    $smarty.server.REQUEST_URI|strstr: »commande » ||
    $smarty.server.REQUEST_URI|strstr: »plan-du-site » ||
    $smarty.server.REQUEST_URI|strstr: »promotions » ||

    Ah sinon, j’ai retiré tous les %3D et reculé d’un cran, ça allège le code et remplit la même fonction. En + clair :

    Avant :

    $smarty.server.REQUEST_URI|strstr: »id_manufacturer= » ||
    $smarty.server.REQUEST_URI|strstr: »id_manufacturer%3D » ||

    Après :

    $smarty.server.REQUEST_URI|strstr: »id_manufacturer » ||

  4. Edit : M’enfin à ne pas faire si vos URLs de pages pertinentes (catégories, produits, CMS) contiennent ces expressions hein.

    Par exemple vaut mieux ne pas toucher à :

    $smarty.server.REQUEST_URI|strstr: »n= » ||
    $smarty.server.REQUEST_URI|strstr: »n%3D » ||

    ;-)

  5. cette astuce est-elle valable quand on à un site avec plusieurs langues, du genre quand on désindexe

    $myURI|strstr: »commande » ||

    faut-il aussi rajouter une ligne

    $myURI|strstr: »order » ||

    ne faut-il pas aussi changer le lien comme:

    $myURI|strstr: »/recherche » ||

    par

    $myURI|strstr: »/fr/recherche » ||

    Voilà les questions qui me hantent

    1. Oui, pour tout ce qui est autre langue que le français. Pour les autres langues, il va falloir traduire les chaînes.
      J’ai mis à jour le code ;)

  6. ah aussi dans prestashop le duplicate content est valable aussi pour

    $myURI|strstr: »bPost » ||

    en tous cas certains dont moi-ême ont le soucis.

  7. Bonjour,

    Merci pour la solution c’est exactement ce dont j’avais besoin. Au moins maintenant j’ai des liens propres sur ma boutique. C’était vraiment un chantier dans le sitemap et d’ailleurs je ne comprends pas pourquoi un tel script ne soit pas de base dans prestashop.
    J’ai vu un commentaire préconisant de rajouter les pages dans le fichier robots.txt en plus du script mais est ce vraiment utile sachant qu’en théorie en noindex il n’est pas censé utiliser ces pages.

    Bonne semaine !

    1. Perso, je me contente de ce script. Si tu as fait l’équivalent pour le robots.txt, tu peux le poster ici, ça sera un bon complément ;)

  8. Bonjour,

    Je suis très intéressé d’intégrer ce bout de code dans mon Prestasop pour régler le problème des balises en double a cause de sendtoafriend, token, order etc ….

    Donc dans le header.tpl je dois copier coller le premier code ou celui de l’Edit 17/02 ou les deux ?

    Merci de votre soutien

  9. Bonjour,
    je prépare un site avec prestashop version 1.6.0.6, j’ai testé votre code sur cette version et cela fonctionne, je ne suis pas un pro de PHP et je voudrais utiliser votre code, mais je voudrais avoir sur la page index la meta suivante: noodp,noydir, que faudrait il changer ?

    vous allez trouver que j’abuse, mais cela me rendrais bien service
    très cordialement
    webludi

    1. Bonjour,

      Si votre site n’est pas dans DMOZ, cette balise ne sert à rien.
      Sinon, il suffit d’adapter le code par : content=’noodp,noydir,{if isset($nobots)}…

      1. Bonjour,

        Merci pour ce code.

        Par contre, je me demande pourquoi ne pas mettre carrément :

        au lieu de :

        Y-a-t-il une raison pour laisser ces pages en « follow » ?

        Cordialement,
        Frédéric.

      2. Bonjour, le code devait être dans des balises HTML, du coup ce n’est pas passé dans le commentaire.
        Mais pour répondre à votre seconde question, le noindex permet de ne pas indexer la page dans les résultats de recherche.
        Le follow indique à Google de tout de même suivre les liens de la page. Cela permet d’avoir un maillage intacte est cohérent.

  10. Bonjour,

    Le code fonctionne très bien sur la dernière version de PrestaShop. Personnelent j’ai mis le code suivant :
    {if $page_name == ‘new-products’ || $page_name == ‘authentication’ ||$page_name == ‘manufacturer’ || $page_name == ‘order’ || $page_name == ‘search’ || $page_name == ‘best-sales’ || $page_name == ‘cart’ || $page_name == ‘pagenotfound’ || $page_name == ‘order-opc’ || $smarty.get.n || $smarty.get.orderby || $smarty.get.orderway || $search_query}

    {else}

    {/if}

  11. Bonjour,
    Mercie pour ce script. Je suis intéressé mais mes compétences sont un peu limitées. Quand vous précisez  » si vous n’avez pas activé la ré-écriture d’URL, ce code va désindexer votre site », vous faites allusion :
    – à la nécessité de mettre « oui » à « url simplifiée dans le Backoffice / Préférences / SEO & URL
    – où à « Forcer la mise à jour des URL simplifiées » dans Backoffice / Préférences / Produits
    Je ne voudrais désindexer mon site ;)
    Merci

    1. Bonjour,
      Première option.
      Après pour être sûr, vous pouvez installer « Seerobots » sur Chrome qui permet de savoir si le site est en nofollow ou pas ;)

  12. Bonjour,
    Pour le code $myURI|strstr: »p= » || il s’agit de passer en noindex la pagination, est-ce qu’il n’y a pas un risque, lors du noindex de la deuxième page des catégories, que les fiches produits soient en plus désindexées?

    1. Bonjour,
      Non, c’est un noindex sur les pages suivantes mais la directive est à follow. Les robots continuent de passer.
      Dans la majorité des cas, préférez augmenter le nombre de produits par page pour éviter d’avoir des problèmes, notamment la duplication de la description de la catégorie sur les pages 2, 3 etc.

  13. Bonjour Jérôme,

    Je ne laisse jamais de message sur les forums et commentaires, mais votre travail est tellement bon que je voulais vous le dire.

    Félicitation et continuez ainsi !

    Merci

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *