problème sitemap et google

Eléphant du PHP | 372 Messages

03 avr. 2016, 00:36

Salut à tous.
J'ai un script qui permet de créer mon site map mais après l'analyse et la soumission sur search console,
google me dit erreur:
Votre sitemap semble correspondre à une page HTML. Veuillez utiliser un format de sitemap pris en charge

PS: mon fichier est bien enregistré en sitemap_ville.xml

et la déclaration en robot.txt est:
User-Agent: *
Allow: /
Sitemap: http://monsite.fr/sitemap_ville_2.xml
Sitemap: http://monsite.fr/sitemap_departement.xml

Qu'est ce que je ne fait pas bien svp.
Merci à vous
<?php
	
  set_time_limit(0);

  $sitemap = "SELECT DISTINCT city FROM `type`";
  $req = $bdd->query($sitemap);

  $xml = '<?xml version="1.0" encoding="UTF-8"?>';
  $xml.= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';

  while ($ligne = $req->fetch(PDO::FETCH_ASSOC)) {
    $xml.= '<url>' . "\n";
	// toutes les villes avec les diff
    $xml.= '   <loc>http://monsite.fr/actu-de-'.simplification($ligne['city']).'.html</loc>' . "\n";
    $xml.= '   <changefreq>daily</changefreq>' . "\n";
    $xml.= '   <priority>0.9</priority>' . "\n";
    $xml.= '</url>' . "\n";
  }  
  $xml.= '</urlset>';

  echo $xml;

?>
Le code renvoi donc
<?xml version="1.0" encoding="utf-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> 
<url>
   <loc>http://monsite.fr/actu-de-mornac.html</loc>
   <changefreq>daily</changefreq>
   <priority>0.9</priority>
</url>
<url>
   <loc>http://monsite.fr/actu-de-pennautier.html</loc>
   <changefreq>daily</changefreq>
   <priority>0.9</priority>
</url>
</urlset>

ViPHP
ViPHP | 928 Messages

11 avr. 2016, 20:50

Il te manque les headers pour dire que le contenu que tu envoies est en XML, ajoute le code suivant avant ton echo :

Code : Tout sélectionner

header('content-type: text/xml');

Eléphant du PHP | 372 Messages

11 avr. 2016, 23:11

Donc en mettant ce que vous m'avez dit j'ai ceci:

Erreur d'analyse XML : instruction de traitement XML ou texte pas au début d'une entité externe
Emplacement : http://lasortie.fr/gen_sitemap.php
Numéro de ligne 6, Colonne 1 :<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"><url>
^

Le code:
<?php
  
  set_time_limit(0);

  $sitemap = "SELECT DISTINCT city FROM `loisirs`";
  $req = $bdd->query($sitemap);

  header('content-type: text/xml');
  $xml = '<?xml version="1.0" encoding="UTF-8"?>';
  $xml.= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';

  while ($ligne = $req->fetch(PDO::FETCH_ASSOC)) {
    $xml.= '<url>' . "\n";
  // toutes les villes avec les diff
    $xml.= '   <loc>http://monsite.fr/actu-de-'.simplification($ligne['city']).'.html</loc>' . "\n";
    $xml.= '   <changefreq>daily</changefreq>' . "\n";
    $xml.= '   <priority>0.9</priority>' . "\n";
    $xml.= '</url>' . "\n";
  }  
  $xml.= '</urlset>';

  echo $xml;

?>

Mammouth du PHP | 2703 Messages

11 avr. 2016, 23:17

numéro de ligne 6 indique que ce qui doit être à la première ligne ne l'est pas. il faudrait tester d'enlever les retours à la ligne du code php.

ViPHP
ViPHP | 928 Messages

11 avr. 2016, 23:47

Il faut effectivement enlever le blanc qui est avant.

Eléphant du PHP | 372 Messages

12 avr. 2016, 07:23

Donc voilà mon script et mon problème du coup :/
<?php
  
  set_time_limit(0);

  $sitemap = "SELECT DISTINCT city FROM `type`";
  $req = $bdd->query($sitemap);

  header('content-type:text/xml') . "\n";
  $xml.= '<?xml version="1.0" encoding="UTF-8"?>'."\n";
  $xml.= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';

  while ($ligne = $req->fetch(PDO::FETCH_ASSOC)) {
    $xml.= '<url>'."\n";
  // toutes les villes avec les diff
    $xml.= '   <loc>http://monsite.fr/actu-de-'.simplification($ligne['city']).'.html</loc>';
    $xml.= '   <changefreq>daily</changefreq>';
    $xml.= '   <priority>0.9</priority>';
    $xml.= '</url>'."\n";
  }  
  $xml.= '</urlset>';

  echo $xml;
Et le message d'erreur:
Image
[/img]

Par contre si j'enléve $xml.= '<?xml version="1.0" encoding="UTF-8"?>'."\n";
Il n y a plus de message d'erreur, mais mon code xml sera t'il bon ? validé ? car ca ressembla à ca:
<urlset>
<url>
<loc>http://monsite.fr/actu-de-mornac.html</loc>
<changefreq>daily</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>http://monsite.fr/actu-de-pennautier.html</loc>
<changefreq>daily</changefreq>
<priority>0.9</priority>
</url>
.....
Merci encore

Mammouth du PHP | 1967 Messages

12 avr. 2016, 08:11

Je pense que ton XML est faux car il contient des messages d'erreur de php.
Vérifie le code source généré pour repèré d'éventuelle erreur.

Mais je pense que
header('content-type:text/xml') . "\n";
après un header, il ne faut rien mettre d'autre que le point-virgule. Ce n'est pas une instruction du type echo.
$xml.= '<?xml version="1.0" encoding="UTF-8"?>'."\n";
comme c'est ta première occurence de $xml, il ne faut pas utiliser l'opérateur de concaténation .= mais un simple =
Sinon ton code risque de générer une Notice qui gênera ton code XML.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 372 Messages

12 avr. 2016, 21:36

Re,
Par contre toujours le messeage d'erreur:

Erreur d'analyse XML : instruction de traitement XML ou texte pas au début d'une entité externe
Emplacement : http://lasortie.fr/gen_sitemap.php
Numéro de ligne 6, Colonne 1 :<?xml version="1.0" encoding="UTF-8"?>
^


Donc suivant vos conseil voici le script :
<?php
  
  set_time_limit(0);

  $sitemap = "SELECT DISTINCT city FROM `loisirs`";
  $req = $bdd->query($sitemap);

  header('content-type:text/xml');
  $xml= '<?xml version="1.0" encoding="UTF-8"?>'."\n";
  $xml.= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';

  while ($ligne = $req->fetch(PDO::FETCH_ASSOC)) {
    $xml.= '<url>'."\n";
  // toutes les villes avec les diff
    $xml.= '   <loc>http://monsite.fr/actu-de-'.simplification($ligne['city']).'.html</loc>';
    $xml.= '   <changefreq>daily</changefreq>';
    $xml.= '   <priority>0.9</priority>';
    $xml.= '</url>'."\n";
  }  
  $xml.= '</urlset>';

  echo $xml;

?>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

13 avr. 2016, 00:46

Bonjour,
Tu as des lignes blanches avant ta balise de début <?xml quand on regarde la source généré de ton XML :
view-source:http://lasortie.fr/gen_sitemap.php

Vérifie dans ton fichier PHP que tu n'aies rien avant ta balise <?php, vérifies aussi dans ton éditeur de code que tu sois en encodage UTF8 et surtout SANS BOM si ton éditeur a cette option
Quand tout le reste a échoué, lisez le mode d'emploi...