Prestashop 1.5.6 & Google sitemap XML : message d’erreur « Date non valide »

Vous avez peut-être été confronté à ce message d’erreur après avoir soumis à Google votre sitemap Prestashop : « Date non valide »? Késako ? Voilà la solution pour corriger ce bug dans le module « gsitemap » de Prestashop 1.5.

Tout d’abord il vous faut savoir que votre fichier sitemap doit avoir des dates au format TDZ (Time Zone Designator). C’est-à-dire qu’il faut normalement, si vous utilisez les heures dans vos dates (ce que fait PS), spécifier la zone de temps, à savoir GMT+1 pour la France par exemple.

Vos dates doivent donc être au format « 2013-11-01T15:56:52+01:00 » et non « 2013-11-01 15:56:52 ». Vous voyez la différence ? un + 01:00 a été ajouté pour spécifier la zone de temps en fonction de la géographie de votre service.

La doc de Google nous indique pourtant :

Votre sitemap contient une ou plusieurs dates incorrectes.

Le problème peut provenir du format de la date ou de la date elle-même. Les dates doivent respecter le codage de date et d’heure W3C (vous pouvez cependant omettre la partie correspondant à l’heure). Exemple :

2005-02-21  
2005-02-21T18:00:15+00:00

Spécifier l’heure est optionnel (par défaut, l’heure est 00:00:00Z), mais si vous le faites, vous devez également spécifier un fuseau horaire.

Donc comment réparer cette erreur me direz-vous ? Simplement en modifiant le module gsitemap. Pour ce faire, il vous faut éditer le fichier modules/gsitemap/gsitemap.php avec votre éditeur texte favori (notpad++, bbedit, sublimtext par exemple). Et à la ligne 619, dans la fonction _addSitemapNode, ajouter ces 2 lignes :

date_default_timezone_set('Europe/Paris');
$last_mod = date('Y-m-d\TH:i:sP', strtotime($last_mod));

Ce qui aura pour effet de reformater la date et l’heure dans le node loc pour la balise lastmode.

xml-sitemap-prestashop

 

Il ne vous reste plus qu’à générer de nouveau votre sitemap et vous n’aurez plus le problème de « Date non valide ».

Bon référencement et bonnes ventes…

Sources :

 

10 Comments
  • Bart

    4 novembre 2013 at 17 h 30 min Répondre

    Bonjour,

    Un grand merci ! Cela faisait des jours que je cherchais dans toutes les langues sur le net pour trouver la solution. Excellent, merci 1000 fois d’avoir donné ce code.

  • cleano

    5 novembre 2013 at 11 h 30 min Répondre

    Bonjour,

    j’ai édité le fichier et généré le sitemap , mais il comporte toujours la même erreur.

    la fonction se présente comme ci-dessous:

    private function _addSitemapNode($fd, $loc, $priority, $change_freq, $last_mod = NULL)
    {
    fwrite($fd,  ».(Configuration::get(‘PS_REWRITING_SETTINGS’) ?  » : $loc). ». »rn ». ». »rn ».number_format($priority, 1, ‘.’,  »). ». »rn ».($last_mod ?  ».$last_mod. » :  »). »rn ». ».$change_freq. ». »rn »);
    date_default_timezone_set(‘Europe/Paris’);
    $last_mod = date(‘Y-m-dTH:i:sP’, strtotime($last_mod));
    }

    • Mike Castro Demaria

      10 novembre 2013 at 20 h 15 min Répondre

      Les 2 lignes :
      date_default_timezone_set(‘Europe/Paris’);
      $last_mod = date(‘Y-m-dTH:i:sP’, strtotime($last_mod));

      Son à mettre avant fwrite.
      Mike

  • Wiso

    10 novembre 2013 at 19 h 04 min Répondre

    Merci pour l’info, petit conseil pour les novices comme moi, il faut mettre le complément de code avant le code déjà présent dans la fonction, et pas après sinon, ça ne fonctionne pas.

    Moi j’ai une question car sur mon sitemap j’ai des +01:00 et des +02:00 normal ?

    Merci par avance,

    • Mike Castro Demaria

      10 novembre 2013 at 20 h 17 min Répondre

      C’est pas grave, mais normalement non si vous ètes en GMT +1 c’est +01:00 à la fin uniquement. Il doit avoir une initialisation ailleurs alors pour les images.

  • barbe

    11 novembre 2013 at 18 h 59 min Répondre

    J’ai suivis pas à pas ce que tu me propose et en effet j’ai une date correct, enfin presque 🙂

    Certaines partie comme par exemple l’index ou nouveau produit la date envoyé est le 1970-01-01T01:00:00+01:00

    Pas nécessairement normal si ?

    • Mike Castro Demaria

      13 novembre 2013 at 17 h 25 min Répondre

      Si tu as 1970-… c’est que ta date est null ou fausse et ne peut être traduite en date à travers (strtotime).

  • Broceliande

    14 novembre 2013 at 1 h 46 min Répondre

    Merci pour se post, sur lequel je suis tombé en gglant pour poster justement une réponse similaire au bon endroit.

    date(‘c’,strtotime($last_mod)) passe nickel aussi et on peu se passer du date_default_timezone_set(‘Europe/Paris’); pour peu que le serveur et php soient correctement configurés.

    • Mike Castro Demaria

      28 novembre 2013 at 19 h 53 min Répondre

      date_default_timezone_set(‘Europe/Paris’); n’est pas indispensable, mais pour les français en France uniquement 😉 . Chauvin va !

  • D-Lices

    27 novembre 2013 at 11 h 23 min Répondre

    Nickel!
    merci pour cette astuce.

Post a Comment