Section: Générer un sitemap
« Générer un fichier zip | ^ Générer du contenu avec les vues | Définir une réponse générale personnalisée » |
− Table des matières
jResponseSitemap permet de générer un sitemap (utilisé par les moteurs de recherche, entre autres Google).
Téléchargement et installation ¶
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 install/installer.php
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 app/system/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::getFull('mymodule~sitemap:index')
// 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);