Raccourcis : Contenu - rubriques - sous rubriques
EN FR

jResponseSitemap permet de générer un sitemap (utilisé par les moteurs de recherche, entre autres Google).

Téléchargement et installation

Depuis Jelix 1.7, la classe jResponseSitemap et ses dépendances sont dans un module séparé, qu'il faut télécharger et installer, soit sous forme de zip sur le site de téléchargement de Jelix, soit installable via Composer : paquet jelix/sitemap-module.


composer require "jelix/sitemap-module"

Configurez et activez ensuite le module dans l'application :


php dev.php module:configure jsitemap

Ensuite lancez l'installation :


php yourapp/dev.php install

Utilisation dans un contrôleur

Récupération de la réponse dans le contrôleur :


$rep = $this->getResponse('sitemap');

Vous avez alors dans $rep une instance de l'objet jResponseSitemap.

Restrictions d'un sitemap

  • Un fichier sitemap ne peut contenir que 50 000 urls.
  • Un fichier index de sitemap ne peut contenir que 1000 fichiers sitemap, ce qui donne quand même un total 50 000 000 urls !

Génération manuelle

La création d'un sitemap se fait par l'ajout de chacune des urls que vous voulez voir afficher dans le fichier :


$rep->addUrl($loc, $lastmod, $changefreq, $priority);
  • $loc : URL de la page
  • $lastmod : Date de dernière modification de la page, au format Y-m-d
  • $changefreq : Fréquence probable de modification de la page (uniquement les valeurs : always, hourly, daily, weekly, monthly, yearly, never)
  • $priority : Priorité de cette URL par rapport aux autres URL de votre site

Seul le paramètre $loc est obligatoire.

Exemple :


$rep->addUrl(jUrl::get('module~home:index'));
$rep->addUrl(jUrl::get('module~contact:index'), null, 'weekly', 1);

Génération automatique à partir de urls.xml

L'automatisation (partielle) du sitemap est possible à partir des urls fournies dans le fichier var/config/urls.xml.

Une fois la réponse instanciée, il suffit d'appeler une seule méthode :


$rep->importFromUrlsXml();
return $rep;

Notez que cela importe uniquement les urls des actions individuelles, et parmi celles-ci, uniquement celle qui n'ont pas un pathinfo dynamique.

Génération d'un index de sitemap

Si vous avez vraiment un très gros site et qu'un seul fichier sitemap ne suffit pas, vous pouvez en créer plusieurs via les 2 méthodes ci-dessus et ensuite les lier dans un index de sitemap :


$rep->addSitemap($loc, $lastmod);
  • $loc : URL d'un sitemap
  • $lastmod : Date de dernière modification de la page, au format Y-m-d

Seul le paramètre $loc est obligatoire.

Ainsi, vous écrivez plusieurs actions qui génèrent un sitemap, et une autre action qui va générer l'index. Pour donner l'url des sitemaps à addSitemap, vous pouvez utiliser jUrl::get().


$rep->addSitemap(jUrl::get('mymodule~sitemap:s1');
$rep->addSitemap(jUrl::get('mymodule~sitemap:s2');
$rep->addSitemap(jUrl::get('mymodule~sitemap:s3');
$rep->addSitemap(jUrl::get('mymodule~sitemap:s4');
return $rep;

s1, s2, s3 et s4 sont des actions qui génèrent des sitemaps.

Avertir les moteurs de recherche

Pour donner l'adresse de votre sitemap aux moteurs de recherche, il y a la méthode manuelle qui consiste à aller sur chacun des moteurs de recherche et de leur fournir l'URL de votre sitemap. Ou vous pouvez utiliser la méthode ping() :


$sitemapurl = jUrl::get('mymodule~sitemap:index')
$url = 'http'. (empty($_SERVER['HTTPS']) ? '' : 's') .'://'. $_SERVER['HTTP_HOST'] . urlencode($sitemapurl);

// google
$rep->ping('http://www.google.com/webmasters/tools/ping?sitemap=' . $url);

// yahoo
$rep->ping('http://search.yahooapis.com/SiteExplorerService/V1/updateNotification?appid=YahooDemo&url=' . $url);

// Live
$rep->ping('http://webmaster.live.com/ping.aspx?siteMap='.$url);

// Ask
$rep->ping('http://submissions.ask.com/ping?sitemap=' . $url);