Jump to content

Module Sitemap : correctif pour les problèmes rencontrées


Cédric Girard

Recommended Posts

Bonjour

En analysant le sitemap généré par le module du même nom, je m'aperçois qu'il y a de gros problèmes, notamment pour les sites gérant plusieurs langues, entre autres soucis.

En effet, il y a rajout systématique de "&lang=xxx" au bout de chaque URL (ce qui n'est pas sans poser problème en matière de duplicate content puisqu'on se retrouve avec des pages avec x URL possibles et notamment 123-produit.html et 123-produit.html&lang=2, par exemple ! Sans compter la version non réécrite product.php?idproduct=123, doublée de product.php?idproduct=123&lang=2 !!!)

Par ailleurs, il ajoute de manière systématique un lien vers une page... inutile de la boutique : la "catégorie 1" (en clair : la racine de la boutique mais PAS la page d'accueil !) dont l'URL est category.php?id_category=1 !

Voici les modifications que j'ai apporté... pour l'instant (vu que j'ai désactivé la partie anglophone tant que la saisie in english ne sera pas effective dans la boutique en cours de saisie !)

Cela concerne la fonction _postProcess, avec au programme :
* ajout de la racine du site en début de sitemap (la moindre des choses... même si en théorie c'est "inutile")
* filtrage de la catégorie racine
* filtrage sur le français (ndlr : cette modif ne s'applique donc QUE pour les sites utilisant exclusivement le français !)
* suppression de la variable lang des URL inscrites


   private function _postProcess()
   {
       $link = new Link();
       $fp = fopen($this->_filename, 'w');
       $xml = new SimpleXMLElement('');

       // AJOUT de la page index
       $sitemap = $xml->addChild('url');
       $sitemap->addChild('loc', 'http://'.htmlspecialchars($_SERVER['HTTP_HOST'], ENT_COMPAT, 'UTF-8'));
       $sitemap->addChild('priority', 0.9);
       $sitemap->addChild('lastmod', date("Y-m-d"));
       $sitemap->addChild('changefreq', 'weekly');

       $categories = Db::getInstance()->ExecuteS('
       SELECT c.id_category, c.level_depth, link_rewrite, DATE_FORMAT(date_add, \'%Y-%m-%d\') AS date_add, cl.id_lang
       FROM '._DB_PREFIX_.'category c
       LEFT JOIN '._DB_PREFIX_.'category_lang cl ON c.id_category = cl.id_category
       LEFT JOIN '._DB_PREFIX_.'lang l ON cl.id_lang = l.id_lang
       WHERE l.`active` = 1 AND l.id_lang = 2 AND c.id_category>1');    // FILTRAGE LANGUE FRANÇAISE + FILTRAGE DE LA CATEGORIE RACINE //
       foreach($categories as $category)
       {
           if (($priority = 0.9 - ($category['level_depth'] / 10)) < 0.1)
               $priority = 0.1;
           $sitemap = $xml->addChild('url');
           $sitemap->addChild('loc', 'http://'.htmlspecialchars($_SERVER['HTTP_HOST'], ENT_COMPAT, 'UTF-8').htmlspecialchars($link->getCategoryLink($category['id_category'], $category['link_rewrite'])));  // .'&id;_lang='.intval($category['id_lang'])   ///// SUPPRESSION DE LA VARIABLE LANGUE
           $sitemap->addChild('priority', $priority);
           $sitemap->addChild('lastmod', $category['date_add']);
           $sitemap->addChild('changefreq', 'weekly');
       }

       $products = Db::getInstance()->ExecuteS('
       SELECT p.id_product, pl.link_rewrite, DATE_FORMAT(date_add, \'%Y-%m-%d\') AS date_add, pl.id_lang, cl.`link_rewrite` AS category, (
           SELECT MIN(level_depth)
           FROM '._DB_PREFIX_.'product p2
           LEFT JOIN '._DB_PREFIX_.'category_product cp2 ON p2.id_product = cp2.id_product
           LEFT JOIN '._DB_PREFIX_.'category c2 ON cp2.id_category = c2.id_category
           WHERE p2.id_product = p.id_product) AS level_depth
       FROM '._DB_PREFIX_.'product p
       LEFT JOIN '._DB_PREFIX_.'product_lang pl ON p.id_product = pl.id_product
       LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (p.`id_category_default` = cl.`id_category` AND pl.`id_lang` = cl.`id_lang`)
       LEFT JOIN '._DB_PREFIX_.'lang l ON cl.id_lang = l.id_lang
       WHERE l.`active` = 1 AND l.id_lang = 2');    // FILTRAGE LANGUE FRANÇAISE  ////////////////////////////////////////////////
       foreach($products as $product)
       {
           if (($priority = 0.7 - ($product['level_depth'] / 10)) < 0.1)
               $priority = 0.1;
           $sitemap = $xml->addChild('url');
           $sitemap->addChild('loc', 'http://'.htmlspecialchars($_SERVER['HTTP_HOST'], ENT_COMPAT, 'UTF-8').htmlspecialchars($link->getProductLink($product['id_product'], $product['link_rewrite'], $product['category'])));  // .'&id;_lang='.intval($category['id_lang']) ///// SUPPRESSION DE LA VARIABLE LANGUE
           $sitemap->addChild('priority', $priority);
           $sitemap->addChild('lastmod', $product['date_add']);
           $sitemap->addChild('changefreq', 'weekly');
       }

       $xmlString = $xml->asXML();
       fwrite($fp, $xmlString, Tools::strlen($xmlString));
       fclose($fp);

       $res = file_exists($this->_filename);
       $this->_html .= '';
       $this->_html .= $res ? $this->l('Sitemap file successfully generated') : $this->l('Error while creating sitemap file');
       $this->_html .= '';
   }



Si cela peut servir ! Évidemment à mettre en parallèle avec l'optimisation anti-duplicate content que j'avais proposé dans ce même forum et visible sur mon site (partie blog)...

Link to comment
Share on other sites

Merci
Je m'étais déjà interrogé sur la structure de la sitemap sur ce forum car google trouve des url non suivis alors que si je le fabrique avec un autre outil, il n'y a pas d'erreur. Je viens de corriger, et la sitemap générée me plait beaucoup plus, j'ai divisé le nombre d'url par 2 sans les &lang=xxx

merci beaucoup
ps: je venais juste de télécharger yooda quand j'ai vu ce billet. un grand MERCI
je vais tout de suite soumettre la nouvelle sitemap à google. ;o)))

Link to comment
Share on other sites

très intéressant ton blog...
Cela voudrait-il dire qu'il vaut mieux utiliser d'autres générateurs de sitemap que celui qui est intégré dans ps ?

j'ai lancé ma boutique : http://www.lepuitsauxcadeaux.com ...mais il y a encore du travail

conseilles tu de passer par un référencement payant ?

je suis un peu déçu de la lenteur d'indexation de ps car j'ai aussi un blog sous wp lequel est en 1ere page en 5mn (ex gif cs4, mediachance 4, Rerome Brunschwig .....

Link to comment
Share on other sites

Bonjour

En théorie avec mes petites modifs tu n'auras plus à passer par un générateur externe.

Au niveau du référencement, Prestashop est plutôt (très) bien fait, mais il convient de modifier certaines petites choses. Au niveau de ta boutique, comme tu n'as pas renseigné la partie anglophone (textes inchangés) inévitablement toutes tes pages sont en duplicate content, ce qui pénalise fortement l'indexation et le positionnement.

Je te conseille donc en tout premier lieu de... virer le bloc Langues (et le bloc Devises, à mon humble avis tout aussi inutile) !

Sinon la fréquence d'indexation moteur est généralement axée sur plusieurs critères dont la fréquence de mise à jour du site : ceci explique notamment pourquoi les blogs sont très souvent bien indexés et énormément crawlés. Sur une boutique Prestashop bien optimisée et mise à jour régulièrement, on "devrait" avoir le même résultat au fil du temps, mais avec un crawl plus lent (car il est rare quand même que l'on rajoute des produits tous les jours !)

Au niveau du référencement payant, le paiement au résultat (ce que je propose) me paraît la meilleure solution et permet surtout de lisser les coûts dans le temps, avec une réel retour sur investissement (attention, je ne parle pas de payer "tant que le site est placé dans les moteurs" comme certaines sociétés le font : avec un tel système, autant utiliser les ADWords !!!)

Link to comment
Share on other sites

Salut à tous



Cedric Merci pour le code

Heureusement, que des personnes comme vous se la donnent .

Il me semblait bien que cela venez des langages ( voire mon ancien poste a ce sujet ).

Donc merci pour la résolution.

Pour ceux qui n'ont pas compris quel fichier il faut modifier.

dossier 'Module' 'gsitemap' -> fichier gsitemap.php ligne 164

Si cela peut servir ! Évidemment à mettre en parallèle avec l’optimisation anti-duplicate content que j’avais proposé dans ce même forum et visible sur mon site (partie blog)…


Tout résolution peut servir un grand Bravo :)

Voila

Bye

Yannick
Link to comment
Share on other sites

Bonjour

J'ai fait la correction..mais depuis quelques jours je constate que google met énormément de temps à valider mes sitemaps (cela avait il me semble commencé avant la correction). Cela fait 2 jour que le traitement est en cours... Pourrait-il y a voir un rapport avec le changement de struture du sitemap ?

cdlt
ritchie

Link to comment
Share on other sites

J'ai fait la correction et j'ai rechargé suite un traitement trop long mais j'ai un gros problème :

Google me dit ceci :

Espace de nom incorrect


en cherchant l'aide Google dit ceci:

Si cette erreur s'affiche, cela signifie que l'élément racine n'indique aucun espace de nom par défaut. L'espace de nom doit être indiqué de la manière suivante :

xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"

Cette erreur s'affiche notamment dans les cas suivants :

* l'espace de nom est introuvable ;
* l'espace de nom est déclaré de manière incorrecte (il se termine par ".9" et non par "0.9", par exemple).

Un fichier Sitemap doit débuter de la manière suivante :

<?xml version="1.0" encoding="UTF-8"?>


Un fichier d'index de sitemaps doit débuter de la manière suivante :

<?xml version="1.0 " encoding="UTF-8"?>


Décidement je cherche en vain une solution pérenne pour fabriquer mon sitemap et je n'y arrice pas. Via PS il y a toujours des erreurs. Merci pour votre aide.
Link to comment
Share on other sites

  • 4 weeks later...

Voilà je mets le gsitemap.php en pj car je remarque que le code complet ne passe pas dans le billet, c'est sans doute l'origine du pb en effet ce qui est entre ne s'affiche pas ..

Bien sur j'ai oublié de préciser que tout le mérite revient à Cedric...merci

et surtout depuis ce gsitemap, plus de pb d'url non suivie etc...google ne dit plus rien....

gsitemap.php

Link to comment
Share on other sites

Bonjour,
J'ai remplacé le contenu de mon "gsitemap" par celui donné en pièce jointe plus haut, j'ai recréé un fichier sitemap par presta, j'ai supprimé la requête de google gsitemap que j'ai fait précédemment et l'ai remplacé par le nouveau.
Maintenant ça fait plus de 12 heures que le fichier est en cours de traitement, alors que la version "de base " avait pris à peine 2h avant de finir (avec des erreurs mais finie quand même), est-ce normal ou y a-t-il un truc qui cloche?
Je précise que la nouvelle version comprenait 2 fois moins de données que la version précédente (normal vous me direz, si la version précédente contenait aussi des traductions...).
Merci de me rassurer, ou pas, sur ma "mise à jours".



Arnaud

Link to comment
Share on other sites

Bonjour,
J’ai remplacé le contenu de mon “gsitemap” par celui donné en pièce jointe plus haut, j’ai recréé un fichier sitemap par presta, j’ai supprimé la requête de google gsitemap que j’ai fait précédemment et l’ai remplacé par le nouveau.
Maintenant ça fait plus de 12 heures que le fichier est en cours de traitement, alors que la version “de base “ avait pris à peine 2h avant de finir (avec des erreurs mais finie quand même), est-ce normal ou y a-t-il un truc qui cloche?
Je précise que la nouvelle version comprenait 2 fois moins de données que la version précédente (normal vous me direz, si la version précédente contenait aussi des traductions…).
Merci de me rassurer, ou pas, sur ma “mise à jours”.

Arnaud


bonjour

essaye de recréer ton sitemap et puis de le renvoyer (j'avais aussi ce pb en cours de traitement pendant plusieurs jours) mais en le recréant cela marche
Link to comment
Share on other sites

Je pense qu'il voulait parler du statut "en cours de traitement" dans l'interface google, pas dans la génération du sitemap.
Auquel cas il me semble que c'est normal car google traite l'ajout d'un sitemap quand il en a envie.

Link to comment
Share on other sites

Merci d'avoir pris le temps de vous pencher sur mon soucis.

En effet, j'ai eu le statut "en cours de traitement", j'ai re-créé le sitemap et re-belote pendant plus de 6h, j'ai donc fait un sitemap depuis http://www.auditmypc.com/xml-sitemap.asp (configuré par défaut), après un traitement de 2h, j'ai eu les messages suivant :
- dans sitemap, j'ai 9 erreurs, des URL non autorisées (même sur ma page d'accueil).
En voici le copier-coller :

3 URL non autorisée
Cette URL n'est pas autorisée pour un sitemap situé à cet emplacement. Aide Aide
URL :
Problème détecté le : http://92.243.0.164
21 mars 2009
Détails 3 URL non autorisée
Cette URL n'est pas autorisée pour un sitemap situé à cet emplacement. Aide Aide
URL :
Problème détecté le : http://92.243.0.164/category.php?id_category=39
21 mars 2009
Détails 3 URL non autorisée
Cette URL n'est pas autorisée pour un sitemap situé à cet emplacement. Aide Aide
URL :
Problème détecté le : http://92.243.0.164/category.php?id_category=3
21 mars 2009
Détails 3 URL non autorisée
Cette URL n'est pas autorisée pour un sitemap situé à cet emplacement. Aide Aide
URL :
Problème détecté le : http://92.243.0.164/category.php?id_category=5
21 mars 2009
Détails 3 URL non autorisée
Cette URL n'est pas autorisée pour un sitemap situé à cet emplacement. Aide Aide
URL :
Problème détecté le : http://92.243.0.164/category.php?id_category=6
21 mars 2009
Détails 3 URL non autorisée
Cette URL n'est pas autorisée pour un sitemap situé à cet emplacement. Aide Aide
URL :
Problème détecté le : http://92.243.0.164/category.php?id_category=32
21 mars 2009
Détails 3 URL non autorisée
Cette URL n'est pas autorisée pour un sitemap situé à cet emplacement. Aide Aide
URL :
Problème détecté le : http://92.243.0.164/category.php?id_category=8
21 mars 2009
Détails 3 URL non autorisée
Cette URL n'est pas autorisée pour un sitemap situé à cet emplacement. Aide Aide
URL :
Problème détecté le : http://92.243.0.164/category.php?id_category=9
21 mars 2009
Détails 3 URL non autorisée
Cette URL n'est pas autorisée pour un sitemap situé à cet emplacement. Aide Aide
URL :
Problème détecté le : http://92.243.0.164/category.php?id_category=10
21 mars 2009
Détails 3 URL non autorisée
Cette URL n'est pas autorisée pour un sitemap situé à cet emplacement. Aide Aide



- dans diagnostic/exploration du web, j'ai : "URL à accès restreint par un fichier robots.txt"


Quelqu'un aurait un conseil ou avis, svp?

Merci d'avance pour votre aide.

Link to comment
Share on other sites

Bonjour

Mais pourquoi utiliser l'outil d'Auditmypc alors que le module peut vous générer un sitemap valable ?

Le truc avec l'outil d'Auditmypc c'est qu'il faut avant d'enregistrer le fichier XML, contrôler s'il n'y a pas d'anomalies visibles. Dans votre cas, les URL avec une adresse IP ne me semblent pas valides, ni celles non rewritées de catégories.

Link to comment
Share on other sites

Et bien comme je le disais plus haut, le sitemap généré après la modification n'est finissait pas d'être en traitement (plus de 12 heure, sans résultat), il fallait bien que je trouve une autre solution.

Qu'entendez-vous par URL non valides, svp? que dois-je modifier?

Link to comment
Share on other sites

Je suis chez Gandi.
Comment je fait pour trouver et supprimer ces reliquats, svp? (Mais peut-être n'est-ce pas nécessaire?)
Peut-être faut-il que je modifie mon fichier settings.inc où se trouve l'IP de mon serveur et la remplace par le nom de domaine?)

Link to comment
Share on other sites

Bonjour,

Merci pour toutes ces informations très utiles.

Je viens également de générer mon premier sitemap, mais ce n'était pas terrible, avec les erreurs relevés par Google.

Je vais donc effectuer les modifications proposés et proposer un nouveau sitemap.

J'ai lu tous les posts sur le sujet, mais je ne trouve rien sur l'absence d'URL en .html au niveau des catégories et des sous catégories, au niveau du sitemap biensure, mais avant tout au niveau de la boutique.

Désolé, je viennais de poster un nouveau message sur le sujet ce matin !

Si quelqu'un connait une solution, je suis preneuse.

Merci
Rose

Link to comment
Share on other sites

Bonjour,

Merci de me répondre.

Je viens de soumettre un nouveau sitemap à google, après avoir fait toutes les manips nécessaires (langue, devises, nouveau fichier...). J'attends pour voir comment il le traite.

C'est d'autant plus dur pour moi de ne pas avoir plusieurs URLS pour une même page que je viens de passer d'un site Oscommerce à Prestashop.

J'ai écrit dans mon .htaccess une redirect 301 de toutes mes anciennes URLS vers les nouvelles comme cela :

Redirect 301 /boucles-or-coquillage-moorea-p-121.html http://monsite.com/boucle-d-oreilles/24-coquillage-bordure-or-moorea.html Redirect 301 /boucles-or-coquillage-raiatea-p-122.html http://monsite.com/boucle-d-oreilles/25-coquillage-or-raiatea.html



Pour le .html, sur les catégories, c'est google qui me les sortait en erreur, j'ai donc supposé que cela venait de là !

Sais-tu si je peux insérer mes redirect 301 dans mon sitemap pour Google, ou si il y a une autre solution ?

Merci de ton aide
Rose

Link to comment
Share on other sites

Re-Bonjour,

Le résultat semble parfait, il m'indique les informations suivantes :


Date d'envoi il y a 23 minutes
Dernier téléchargement par Google il y a 23 minutes
État OK
Nombre total d'URL dans le sitemap 319
URL indexées dans le sitemap 306
Erreurs et avertissements relatifs au sitemap : Aucune erreur ni aucun avertissement trouvé.


Il semble donc avoir réindéxé mes anciennes URLS.

Par contre, j'ai perdu environ 200 produits qui ne sont pas dans le sitemap, car ils diffèrent simplement par le facteur couleur !

Si tu as une idée pour intégrer ces pages sans risque de duplicat content.

Merci encore pour votre contribution à tous.
Rose
Link to comment
Share on other sites

Si ce sont des déclinaisons de produits, il n'y a pas moyen étant donné qu'il s'agit d'un seul produit à chaque fois, décliné en diverses couleurs. Il faudrait dans ce cas créer un produit par couleur... chose que je déconseille car à mon avis, il est possible de se positionner sur le nom du produit suivi de chaque couleur, ce sur une seule page.

La chose à savoir est si tu as plus de visite sur "" tout court ou l'ensemble des expressions "" !


Les catégories n'ont pas de ".html" dans Prestashop, seuls les produits ont cette extension (qui n'est d'ailleurs qu'indicative...) :)

Link to comment
Share on other sites

Aiiieee!! Je viens de constater le même problème j'ai des

"&id_lang=1"
en bout d'URL dans le sitemap. Je vais jeter un coup d'oeil à ta solution.
Merci ;)


Par contre j'aurais une petite question, comment est géré la fréquence de modification des pages, après étude il y a des monthly, daily etc...
Link to comment
Share on other sites

Ça c'est en dur dans le module gsitemap (dans le code). Le paramétrage n'est pas "parfait" (il faudrait adapter le sitemap littéralement de manière spécifique à chaque boutique, pour faire bien) mais globalement c'est pas mal et "passe partout".

Ce n'est pas personnellement un paramètre que j'utilise quand je génère des sitemaps, mais il peut avoir son intérêt pour contrôler la fréquence de visite des bots.

Ma solution fonctionne même en multilingue mais attention : les noms de produits doivent IMPÉRATIVEMENT différer d'une langue à l'autre !

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour

La modification ne doit pas être très compliquée (je sais plus si j'ai filtré la langue ou pas) ; en théorie tout doit fonctionner pareillement, à la petite obligation qu'il faut que chaque URL (je parle du texte) doit être différente, quelle que soit la langue.

Par ex. si vous vendez des parapluies, vous devrez avoir pour le même produit :
* /123-red-ombrella.html
* /123-parapluie-rouge.html

Dans le cas où le nom du produit est identique dans plusieurs langues, voir pour les différencier d'une manière ou d'une autre. De toute façon d'un point de vue SEO, c'est une règle immuable et obligatoire : une URL = un contenu, point barre.

Link to comment
Share on other sites

d accord merci, donc j ai juste a marquer mes bons noms d url pour chaque langue rien d autre a changer, c est ce que je voulais savoir

Edit :

Je viens de faire comme tu as dis, sauf que cela ne m affiche que la langue française et aucunement la langue anglaise :(

Link to comment
Share on other sites

alors ce matin j ai :

Résumé du sitemap
Dans la plupart des cas, toutes les pages des sites ne sont pas indexées.
Optimisez la façon dont Google explore et indexe votre site. Plus d'informations.
Propriété État
Type de sitemap Web
Format Sitemap
Date d'envoi Il y a 22 heures
Dernier téléchargement par Google Il y a 22 heures
État OK
Nombre total d'URL dans le sitemap 97
URL indexées dans le sitemap 2


Commment se fait il qu il y en ai que 2 ?


Merci

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour

Il faut supprimer le filtrage de langue dans la requête SQL, et bien valider les URL anglophones au niveau du BO.

Je reprécise qu'à l'origine cette optimisation a été pensée pour les sites monolingues... Mais bon l'adaptation ne doit pas être très fastidieuse non plus. Cela implique par contre que toutes les URL (toutes langues confondues) soient UNIQUES, impérativement.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...