lundi 27 octobre 2014, par
A l’occasion d’un rapide tour de contrôle de l’indexation de mes sites web depuis l’outil Google Webmaster Tools, j’ai constaté un problème sur le sitemap d’un de mes sites sous Wordpress, généré automatiquement par le plugin Wordpress SEO by Yoast. L’erreur indiquait la présence de lignes vides en début de fichier ce qui n’est pas conforme.
Pour rappel, un fichier sitemap.xml n’est pas une page à destination des visiteurs du site, mais un fichier xml qui contient l’ensemble des pages de votre site pour indiquer aux moteurs de recherche les pages à indexer.
La présence de ce fichier est importante pour le bon référencement de votre site. N’oubliez d’ailleurs pas d’aller le déclarer dans l’interface de Google Webmaster Tools.
Sur un CMS comme Wordpress, le fichier sitemap est généré automatiquement. Pour un site statique, il existe des générateurs de fichier sitemap en ligne, mais si le contenu du site change souvent cela deviendrait fastidieux de toujours mettre à jour le fichier. Il existe donc de nombreux plugins sous Wordpress pour la génération automatique de ce fichier. Personnellement j’utilise Wordpress SEO By Yoast qui propose plein de fonctionnalité pour un bon référencement.
Mais voilà, récemment j’ai obtenu l’erreur suivante :
error on line 2 at column 6: XML declaration allowed only at the start of the document
Première investigation du côté du plugin, puisque c’est lui génère le fichier. Le site du support évoque le problème, mais précise que cela ne vient pas du plugin et qu’il faut regarder du côté du template ou d’un autre plugin.
En fait, le problème est dû à un des fichiers PHP du template qui contient des lignes vides en dehors d’un bloc de balise <?php ?>
.
Sur mon installation, le problème venait d’une modification que j’avais introduit il y a quelques jours pour limiter l’accès aux mises à jour Wordpress. En ajoutant le bloc de code PHP indiqué dans l’article, à la fin de mon fichier functions.php j’ai ajouté un saut de ligne entre deux blocs de code PHP, ce qui a engendré l’erreur.
Une fois l’emplacement de l’erreur déterminé, la correction est évidente. J’ai supprimé les 2 lignes de codes suivantes qui ne servent à rien :
?>
<?php
pour n’obtenir plus d’un seul bloc de PHP, et tout est rentré dans l’ordre.
Si vous rencontrez le même problème, la cause est surement la même. La seule difficulté est de trouver le fichier concerné. Alors commencez par reprendre les dernières modifications que vous avez apporté au site.
Petite astuce, pour trouvez les dernières modifications effectuées sur votre site. S’il est hébergé sous linux et que vous avez un accès ssh, en vous plaçant à la racine du site, la commande suivante vous donnera les fichiers qui ont changé depuis 2 jours, à l’exclusion du cache :
find . -mtime -2 | grep -v /cache/
Vous pouvez adapter le nombre de jours pour la recherche en modifiant le paramètre.