Ce package peut générer un plan de site sans que vous ayez à y ajouter des URL manuellement. Cela fonctionne en explorant l'intégralité de votre site.
use Spatie Sitemap SitemapGenerator ;
SitemapGenerator:: create ( ' https://example.com ' )-> writeToFile ( $ path );
Vous pouvez également créer votre plan de site manuellement :
use Carbon Carbon ;
use Spatie Sitemap Sitemap ;
use Spatie Sitemap Tags Url ;
Sitemap:: create ()
-> add (Url:: create ( ' /home ' )
-> setLastModificationDate (Carbon:: yesterday ())
-> setChangeFrequency (Url:: CHANGE_FREQUENCY_YEARLY )
-> setPriority ( 0.1 ))
-> add (...)
-> writeToFile ( $ path );
Ou vous pouvez avoir le meilleur des deux mondes en générant un plan du site, puis en y ajoutant plus de liens :
SitemapGenerator:: create ( ' https://example.com ' )
-> getSitemap ()
-> add (Url:: create ( ' /extra-page ' )
-> setLastModificationDate (Carbon:: yesterday ())
-> setChangeFrequency (Url:: CHANGE_FREQUENCY_YEARLY )
-> setPriority ( 0.1 ))
-> add (...)
-> writeToFile ( $ path );
Vous pouvez également contrôler la profondeur maximale du plan du site :
SitemapGenerator:: create ( ' https://example.com ' )
-> configureCrawler ( function ( Crawler $ crawler ) {
$ crawler -> setMaximumDepth ( 3 );
})
-> writeToFile ( $ path );
Le générateur a la capacité d'exécuter du JavaScript sur chaque page, de sorte que les liens injectés dans le dom par JavaScript seront également explorés.
Vous pouvez également utiliser l'un de vos disques de système de fichiers disponibles pour écrire le plan du site.
SitemapGenerator:: create ( ' https://example.com ' )-> getSitemap ()-> writeToDisk ( ' public ' , ' sitemap.xml ' );
Vous devrez peut-être définir la visibilité des fichiers sur l'un de vos plans de site. Par exemple, si vous écrivez un plan de site sur S3 que vous souhaitez rendre public. Vous pouvez définir le troisième paramètre sur true
pour le rendre public. Remarque : Ceci ne peut être utilisé que sur la méthode ->writeToDisk()
.
SitemapGenerator:: create ( ' https://example.com ' )-> getSitemap ()-> writeToDisk ( ' public ' , ' sitemap.xml ' , true );
Vous pouvez également ajouter vos modèles directement en implémentant l'interface SpatieSitemapContractsSitemapable
.
use Spatie Sitemap Contracts Sitemapable ;
use Spatie Sitemap Tags Url ;
class Post extends Model implements Sitemapable
{
public function toSitemapTag (): Url | string | array
{
// Simple return :
return route ( ' blog.post.show ' , $ this );
// Return with fine - grained control :
return Url:: create ( route ( ' blog.post.show ' , $ this ))
-> setLastModificationDate (Carbon:: create ( $ this -> updated_at ))
-> setChangeFrequency (Url:: CHANGE_FREQUENCY_YEARLY )
-> setPriority ( 0.1 );
}
}
Vous pouvez désormais ajouter un seul modèle de publication au plan du site ou même une collection entière.
use Spatie Sitemap Sitemap ;
Sitemap:: create ()
-> add ( $ post )
-> add (Post:: all ());
De cette façon, vous pouvez ajouter toutes vos pages très rapidement sans avoir besoin de toutes les explorer.
Nous investissons beaucoup de ressources dans la création des meilleurs packages open source de leur catégorie. Vous pouvez nous soutenir en achetant l'un de nos produits payants.
Nous apprécions grandement que vous nous envoyiez une carte postale de votre ville natale, mentionnant le(s) forfait(s) que vous utilisez. Vous trouverez notre adresse sur notre page contact. Nous publions toutes les cartes postales reçues sur notre mur virtuel de cartes postales.
Tout d’abord, installez le package via composer :
composer require spatie/laravel-sitemap
Le package s’enregistrera automatiquement.
Si vous souhaitez mettre à jour votre plan de site automatiquement et fréquemment, vous devez effectuer quelques étapes supplémentaires.
Vous pouvez remplacer les options par défaut du robot d'exploration. Publiez d’abord la configuration :
php artisan vendor:publish --provider= " SpatieSitemapSitemapServiceProvider " --tag=sitemap-config
Cela copiera la configuration par défaut dans config/sitemap.php
où vous pourrez la modifier.
use GuzzleHttp RequestOptions ;
use Spatie Sitemap Crawler Profile ;
return [
/ *
* These options will be passed to GuzzleHttp Client when it is created .
* For in - depth information on all options see the Guzzle docs :
*
* http : // docs . guzzlephp . org / en / stable / request - options . html
* /
' guzzle_options ' => [
/ *
* Whether or not cookies are used in a request .
* /
RequestOptions:: COOKIES => true ,
/ *
* The number of seconds to wait while trying to connect to a server .
* Use 0 to wait indefinitely .
* /
RequestOptions:: CONNECT_TIMEOUT => 10 ,
/ *
* The timeout of the request in seconds . Use 0 to wait indefinitely .
* /
RequestOptions:: TIMEOUT => 10 ,
/ *
* Describes the redirect behavior of a request .
* /
RequestOptions:: ALLOW_REDIRECTS => false ,
],
/ *
* The sitemap generator can execute JavaScript on each page so it will
* discover links that are generated by your JS scripts . This feature
* is powered by headless Chrome .
* /
' execute_javascript ' => false ,
/ *
* The package will make an educated guess as to where Google Chrome is installed .
* You can also manually pass it ' s location here .
* /
' chrome_binary_path ' => '' ,
/ *
* The sitemap generator uses a CrawlProfile implementation to determine
* which urls should be crawled for the sitemap .
* /
' crawl_profile ' => Profile::class,
];
Le moyen le plus simple consiste à explorer le domaine donné et à générer un plan du site avec tous les liens trouvés. La destination du plan du site doit être spécifiée par $path
.
SitemapGenerator:: create ( ' https://example.com ' )-> writeToFile ( $ path );
Le plan du site généré ressemblera à ceci :
<? xml version = " 1.0 " encoding = " UTF-8 " ?>
< urlset xmlns = " http://www.sitemaps.org/schemas/sitemap/0.9 " >
< url >
< loc >https://example.com</ loc >
< lastmod >2016-01-01T00:00:00+00:00</ lastmod >
< changefreq >daily</ changefreq >
< priority >0.8</ priority >
</ url >
< url >
< loc >https://example.com/page</ loc >
< lastmod >2016-01-01T00:00:00+00:00</ lastmod >
< changefreq >daily</ changefreq >
< priority >0.8</ priority >
</ url >
...
</ urlset >
Vous pouvez créer un profil d'analyse personnalisé en implémentant l'interface SpatieCrawlerCrawlProfilesCrawlProfile
et en personnalisant la méthode shouldCrawl()
pour un contrôle total sur l'URL/domaine/sous-domaine qui doit être exploré :
use Spatie Crawler CrawlProfiles CrawlProfile ;
use Psr Http Message UriInterface ;
class CustomCrawlProfile extends CrawlProfile
{
public function shouldCrawl ( UriInterface $ url ): bool
{
if ( $ url -> getHost () !== ' localhost ' ) {
return false ;
}
return $ url -> getPath () === ' / ' ;
}
}
et enregistrez votre CustomCrawlProfile::class
dans config/sitemap.php
.
return [
...
/ *
* The sitemap generator uses a CrawlProfile implementation to determine
* which urls should be crawled for the sitemap .
* /
' crawl_profile ' => CustomCrawlProfile:: class ,
];
Pour changer le lastmod
, changefreq
et priority
de la page contact :
use Carbon Carbon ;
use Spatie Sitemap SitemapGenerator ;
use Spatie Sitemap Tags Url ;
SitemapGenerator:: create ( ' https://example.com ' )
-> hasCrawled ( function ( Url $ url ) {
if ( $ url -> segment ( 1 ) === ' contact ' ) {
$ url -> setPriority ( 0.9 )
-> setLastModificationDate (Carbon:: create ( ' 2016 ' , ' 1 ' , ' 1 ' ));
}
return $ url ;
})
-> writeToFile ( $ sitemapPath );
Si vous ne souhaitez pas qu'un lien exploré apparaisse dans le plan du site, ne le renvoyez pas dans l'appelable que vous transmettez à hasCrawled
.
use Spatie Sitemap SitemapGenerator ;
use Spatie Sitemap Tags Url ;
SitemapGenerator:: create ( ' https://example.com ' )
-> hasCrawled ( function ( Url $ url ) {
if ( $ url -> segment ( 1 ) === ' contact ' ) {
return ;
}
return $ url ;
})
-> writeToFile ( $ sitemapPath );
Vous pouvez également demander au robot d'exploration sous-jacent de ne pas explorer certaines pages en transmettant un callable
à shouldCrawl
.
Remarque : shouldCrawl
ne fonctionnera qu'avec le Profile
d'analyse par défaut ou les profils d'analyse personnalisés qui implémentent une méthode shouldCrawlCallback
.
use Spatie Sitemap SitemapGenerator ;
use Psr Http Message UriInterface ;
SitemapGenerator:: create ( ' https://example.com ' )
-> shouldCrawl ( function ( UriInterface $ url ) {
// All pages will be crawled , except the contact page .
// Links present on the contact page won ' t be added to the
// sitemap unless they are present on a crawlable page .
return strpos ( $ url -> getPath (), ' /contact ' ) === false ;
})
-> writeToFile ( $ sitemapPath );
Le robot lui-même peut être configuré pour faire différentes choses.
Vous pouvez configurer le robot utilisé par le générateur de plan de site, par exemple : pour ignorer les vérifications du robot ; comme ça.
SitemapGenerator:: create ( ' http://localhost:4020 ' )
-> configureCrawler ( function ( Crawler $ crawler ) {
$ crawler -> ignoreRobots ();
})
-> writeToFile ( $ file );
Vous pouvez limiter le nombre de pages explorées en appelant setMaximumCrawlCount
use Spatie Sitemap SitemapGenerator ;
SitemapGenerator:: create ( ' https://example.com ' )
-> setMaximumCrawlCount ( 500 ) // only the 500 first pages will be crawled
. . .
Le générateur de plan de site peut exécuter JavaScript sur chaque page afin de découvrir les liens générés par vos scripts JS. Vous pouvez activer cette fonctionnalité en définissant execute_javascript
dans le fichier de configuration sur true
.
Sous le capot, Chrome sans tête est utilisé pour exécuter JavaScript. Voici quelques conseils sur la façon de l’installer sur votre système.
Le package fera une estimation éclairée de l'endroit où Chrome est installé sur votre système. Vous pouvez également transmettre manuellement l'emplacement du binaire Chrome à executeJavaScript()
.
Vous pouvez ajouter manuellement des liens à un plan de site :
use Spatie Sitemap SitemapGenerator ;
use Spatie Sitemap Tags Url ;
SitemapGenerator:: create ( ' https://example.com ' )
-> getSitemap ()
// here we add one extra link , but you can add as many as you ' d like
-> add (Url:: create ( ' /extra-page ' )-> setPriority ( 0.5 ))
-> writeToFile ( $ sitemapPath );
Les sites multilingues peuvent avoir plusieurs versions alternatives d'une même page (une par langue). Sur la base de l'exemple précédent, l'ajout d'une alternative peut être effectué comme suit :
use Spatie Sitemap SitemapGenerator ;
use Spatie Sitemap Tags Url ;
SitemapGenerator:: create ( ' https://example.com ' )
-> getSitemap ()
// here we add one extra link , but you can add as many as you ' d like
-> add (Url:: create ( ' /extra-page ' )-> setPriority ( 0.5 )-> addAlternate ( ' /extra-pagina ' , ' nl ' ))
-> writeToFile ( $ sitemapPath );
Notez la fonction addAlternate
qui prend une URL alternative et les paramètres régionaux auxquels elle appartient.
Les URL peuvent également contenir des images. Voir également https://developers.google.com/search/docs/advanced/sitemaps/image-sitemaps
use Spatie Sitemap Sitemap ;
use Spatie Sitemap Tags Url ;
Sitemap:: create ()
// here we add an image to a URL
-> add (Url:: create ( ' https://example.com ' )-> addImage ( ' https://example.com/images/home.jpg ' , ' Home page image ' ))
-> writeToFile ( $ sitemapPath );
En plus des images, les vidéos peuvent être enveloppées par des balises URL. Voir https://developers.google.com/search/docs/crawling-indexing/sitemaps/video-sitemaps
Vous pouvez définir les attributs obligatoires comme ceci :
use Spatie Sitemap Sitemap ;
use Spatie Sitemap Tags Url ;
Sitemap:: create ()
-> add (
Url:: create ( ' https://example.com ' )
-> addVideo ( ' https://example.com/images/thumbnail.jpg ' , ' Video title ' , ' Video Description ' , ' https://example.com/videos/source.mp4 ' , ' https://example.com/video/123 ' )
)
-> writeToFile ( $ sitemapPath );
Si vous souhaitez transmettre les paramètres facultatifs comme family_friendly
, live
ou platform
:
use Spatie Sitemap Sitemap ;
use Spatie Sitemap Tags Url ;
use Spatie Sitemap Tags Video ;
$ options = [ ' family_friendly ' => Video:: OPTION_YES , ' live ' => Video:: OPTION_NO ];
$ allowOptions = [ ' platform ' => Video:: OPTION_PLATFORM_MOBILE ];
$ denyOptions = [ ' restriction ' => ' CA ' ];
Sitemap:: create ()
-> add (
Url:: create ( ' https://example.com ' )
-> addVideo ( ' https://example.com/images/thumbnail.jpg ' , ' Video title ' , ' Video Description ' , ' https://example.com/videos/source.mp4 ' , ' https://example.com/video/123 ' , $ options , $ allowOptions , $ denyOptions )
)
-> writeToFile ( $ sitemapPath );
Vous pouvez également créer un plan de site entièrement manuel :
use Carbon Carbon ;
Sitemap:: create ()
-> add ( ' /page1 ' )
-> add ( ' /page2 ' )
-> add (Url:: create ( ' /page3 ' )-> setLastModificationDate (Carbon:: create ( ' 2016 ' , ' 1 ' , ' 1 ' )))
-> writeToFile ( $ sitemapPath );
Vous pouvez créer un index de plan de site :
use Spatie Sitemap SitemapIndex ;
SitemapIndex:: create ()
-> add ( ' /pages_sitemap.xml ' )
-> add ( ' /posts_sitemap.xml ' )
-> writeToFile ( $ sitemapIndexPath );
Vous pouvez transmettre un objet SpatieSitemapTagsSitemap
pour définir manuellement la propriété lastModificationDate
.
use Spatie Sitemap SitemapIndex ;
use Spatie Sitemap Tags Sitemap ;
SitemapIndex:: create ()
-> add ( ' /pages_sitemap.xml ' )
-> add (Sitemap:: create ( ' /posts_sitemap.xml ' )
-> setLastModificationDate (Carbon:: yesterday ()))
-> writeToFile ( $ sitemapIndexPath );
l'index du plan de site généré ressemblera à ceci :
<? xml version = " 1.0 " encoding = " UTF-8 " ?>
< sitemapindex xmlns = " http://www.sitemaps.org/schemas/sitemap/0.9 " >
< sitemap >
< loc >http://www.example.com/pages_sitemap.xml</ loc >
< lastmod >2016-01-01T00:00:00+00:00</ lastmod >
</ sitemap >
< sitemap >
< loc >http://www.example.com/posts_sitemap.xml</ loc >
< lastmod >2015-12-31T00:00:00+00:00</ lastmod >
</ sitemap >
</ sitemapindex >
Vous pouvez appeler la méthode maxTagsPerSitemap
pour générer un plan de site qui contient uniquement le nombre donné de balises
use Spatie Sitemap SitemapGenerator ;
SitemapGenerator:: create ( ' https://example.com ' )
-> maxTagsPerSitemap ( 20000 )
-> writeToFile ( public_path ( ' sitemap.xml ' ));
Votre site sera probablement mis à jour de temps en temps. Afin que votre plan de site reflète ces modifications, vous pouvez exécuter le générateur périodiquement. Le moyen le plus simple de procéder consiste à utiliser les capacités de planification par défaut de Laravel.
Vous pouvez configurer une commande artisanale semblable à celle-ci :
namespace App Console Commands ;
use Illuminate Console Command ;
use Spatie Sitemap SitemapGenerator ;
class GenerateSitemap extends Command
{
/ * *
* The console command name .
*
* @ var string
* /
protected $ signature = ' sitemap:generate ' ;
/ * *
* The console command description .
*
* @ var string
* /
protected $ description = ' Generate the sitemap. ' ;
/ * *
* Execute the console command .
*
* @ return mixed
* /
public function handle ()
{
// modify this to your own needs
SitemapGenerator:: create ( config ( ' app.url ' ))
-> writeToFile ( public_path ( ' sitemap.xml ' ));
}
}
Cette commande doit ensuite être planifiée dans le noyau de la console.
// app / Console / Kernel . php
protected function schedule ( Schedule $ schedule )
{
. . .
$ schedule -> command ( ' sitemap:generate ' )-> daily ();
. . .
}
Veuillez consulter CHANGELOG pour plus d'informations sur ce qui a changé récemment.
Démarrez d’abord le serveur de test dans une session de terminal distincte :
cd tests/server
./start_server.sh
Avec le serveur en marche, vous pouvez exécuter les tests :
$ composer test
Veuillez consulter CONTRIBUER pour plus de détails.
Si vous avez trouvé un bug concernant la sécurité, veuillez envoyer un mail à [email protected] au lieu d'utiliser le suivi des problèmes.
Spatie est une agence de webdesign basée à Anvers, en Belgique. Vous trouverez un aperçu de tous nos projets open source sur notre site Internet.
Votre entreprise dépend-elle de nos contributions ? Contactez-nous et soutenez-nous sur Patreon. Tous les engagements seront consacrés à l'affectation de main-d'œuvre à la maintenance et aux nouveautés géniales.
La licence MIT (MIT). Veuillez consulter le fichier de licence pour plus d'informations.