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.
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 :
- Support Google Webmaster tool : https://support.google.com/webmasters/answer/35738
- Gestion des dates Smarty : https://www.smarty.net/docsv2/fr/tips.dates.tpl
- PHP date_default_timezone_set : https://php.net/manual/fr/function.date-default-timezone-set.php
- PHP date : https://www.php.net/manual/fr/function.date.php
Bart
4 novembre 2013 à 17 h 30 minBonjour,
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 à 11 h 30 minBonjour,
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 à 20 h 15 minLes 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 à 19 h 04 minMerci 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 à 20 h 17 minC’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 à 18 h 59 minJ’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 à 17 h 25 minSi 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 à 1 h 46 minMerci 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 à 19 h 53 mindate_default_timezone_set(‘Europe/Paris’); n’est pas indispensable, mais pour les français en France uniquement 😉 . Chauvin va !
D-Lices
27 novembre 2013 à 11 h 23 minNickel!
merci pour cette astuce.