PrestaShop Faceted Search : Sauvegarder le Budget de Crawl Googlebot

Audit et assainissement du module ps_facetedsearch : élimination des millions d'URLs dupliquées, gestion fine du robots.txt, et canonisation des filtres d'attributs sans détruire le SEO.

Sur un catalogue PrestaShop de 5 000 références, le module officiel de navigation à facettes (ps_facetedsearch) peut générer plus de 500 000 combinaisons d’URLs dynamiques indexables. Couleurs, pointures, marques, gammes de prix : chaque filtre coché par l’utilisateur ajoute des paramètres d’URL qui s’empilent.

Le résultat pour les boutiques e-commerce françaises est immédiat : Googlebot épuise l’intégralité de son quota d’exploration (crawl budget) sur des pages orphelines sans valeur ajoutée, délaissant les fiches produits stratégiques et les nouvelles collections.

Ce guide technique détaille la méthodologie d’ingénierie pour neutraliser le gaspillage d’exploration sans altérer l’expérience utilisateur des acheteurs.


1. Diagnostic : Identifier le Piège à Crawl dans les Logs Serveur

Avant toute modification, analysez les requêtes de Googlebot dans vos logs d’accès Nginx ou Apache :

# Filtrer les requêtes Googlebot explorant des URL à facettes
grep -i "Googlebot" /var/log/nginx/access.log | grep -E "(q=|filtre|categories=)" | awk '{print $7}' | head -n 30

Si vous observez des URL de type /12-chaussures?q=Couleur-Bleu-Noir-Rouge/Pointure-42-43-44, Googlebot s’est engagé dans une boucle combinatoire infinie. Les pages de listing affichent du contenu quasi identique, déclenchant des avertissements de contenu dupliqué dans Google Search Console (“Page en double sans URL canonique sélectionnée par l’utilisateur”).


2. Configuration Optimale de ps_facetedsearch en Base de Données

Le module PrestaShop permet de définir un filtre comme indexable ou non via son panneau d’administration. Cependant, lors des mises à jour ou de synchronisations ERP, ces flags sautent régulièrement.

Exécutez cette requête SQL pour inspecter les attributs configurés en indexation active :

SELECT 
    id_faceted_search_filter, 
    filter_name, 
    filter_type, 
    is_indexed 
FROM ps_faceted_search_filter;

Règle d’or : Ne laissez indexables que les filtres correspondant à un volume de recherche réel (ex: les marques principales /chaussures/nike). Désactivez impérativement l’indexation sur les combinaisons d’attributs secondaires :

  • Pointures / Tailles
  • Tranches de prix
  • Disponibilité en stock
  • Options de livraison

3. Durcissement du Fichier robots.txt

Le fichier robots.txt généré par défaut sous PrestaShop 8 ne bloque pas les nouveaux schémas d’URLs de facettes. Ajoutez ces directives strictes dans votre /robots.txt :

# Bloquer les combinaisons multiples et filtres de recherche
Disallow: /*?*q=
Disallow: /*&*q=
Disallow: /*?*id_feature=
Disallow: /*?*id_attribute=
Disallow: /*?*order=
Disallow: /*?*price=
Disallow: /*?*categories=

# Autoriser les assets statiques indispensables au rendu JS
Allow: /modules/ps_facetedsearch/*.js
Allow: /modules/ps_facetedsearch/*.css

[!WARNING] N’utilisez pas Disallow si vous souhaitez que Googlebot prenne en compte une balise noindex présente sur la page. Si l’URL est bloquée par robots.txt, le robot ne téléchargera jamais le code HTML et n’exécutera pas la balise noindex.


4. Balise Canonique Dynamique via Smarty

Dans votre thème PrestaShop (par exemple themes/custom-theme/templates/_partials/head.tpl), forcez l’URL canonique vers l’URL racine de la catégorie lorsqu’un filtre est actif :

{if isset($listing.pagination) && $listing.pagination.pages_count > 1}
  {* En cas de pagination pure, conserver page=X *}
  <link rel="canonical" href="{$page.canonical}">
{elseif isset($smarty.get.q)}
  {* Si un filtre de facette est présent, forcer l'URL propre de la catégorie *}
  <link rel="canonical" href="{$link->getCategoryLink($category->id)}">
  <meta name="robots" content="noindex, follow">
{else}
  <link rel="canonical" href="{$page.canonical}">
{/if}

5. Vérification et Rétablissement du Crawl

Une fois les correctifs déployés :

  1. Purgez le cache APCu/Redis et le cache Smarty PrestaShop : php bin/console cache:clear.
  2. Inspectez l’en-tête de réponse via curl sur une URL avec paramètres :
    curl -s -I "https://votresite.fr/12-pantalons?q=Taille-M" | grep -i "robots"
  3. Surveillez dans Google Search Console l’onglet Paramètres > Statistiques sur l’exploration. Vous observerez une chute drastique des requêtes 200 inutiles et une remontée immédiate de l’exploration des fiches produits prioritaires.

🔗 Diagnostics Techniques & Maillage d’Architecture :

Les goulots d’étranglement d’infrastructure ne sont jamais isolés. La latence serveur, les requêtes SQL et le rendu DOM interagissent en continu :

🛠️ Engineering Next Step

Besoin d'une intervention directe sur votre serveur ?

Les reconfigurations chirurgicales de serveurs, l'indexation de bases de données ou les optimisations JavaScript en environnement de production comportent des risques de coupure. Si vous préférez une résolution sans risque et sans interruption de service, je déploie ce correctif directement sur votre stack sous notre modèle Result-First, Fair-Pay.

Demander un diagnostic chirurgical →
✓ Paiement uniquement au résultat•✓ Zéro risque d'interruption•✓ Implémentation directe par ingénieur
Damar Nurvianto - Lead Systems Auditor
💬 Desk Technique Direct • WhatsApp
Damar Nurvianto • Lead Systems Auditor

Besoin d'un diagnostic rapide sur une erreur active ?

Envoyez vos logs de terminal, stack trace ou URL de serveur à tout moment — 7 jours sur 7. Triage asynchrone par message direct avec Damar, Senior Systems Auditor. Aucun appel téléphonique requis.

Envoyer le Log via WhatsApp &rarr;Drop Log 24/7 • No Calls