Paket ini dapat menghasilkan peta situs tanpa Anda harus menambahkan url secara manual. Ini bekerja dengan merayapi seluruh situs Anda.
use Spatie Sitemap SitemapGenerator ;
SitemapGenerator:: create ( ' https://example.com ' )-> writeToFile ( $ path );
Anda juga dapat membuat peta situs secara manual:
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 );
Atau Anda bisa mendapatkan yang terbaik dari kedua dunia dengan membuat peta situs dan kemudian menambahkan lebih banyak tautan ke dalamnya:
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 );
Anda juga dapat mengontrol kedalaman maksimum peta situs:
SitemapGenerator:: create ( ' https://example.com ' )
-> configureCrawler ( function ( Crawler $ crawler ) {
$ crawler -> setMaximumDepth ( 3 );
})
-> writeToFile ( $ path );
Generator memiliki kemampuan untuk mengeksekusi JavaScript pada setiap halaman sehingga link yang dimasukkan ke dom oleh JavaScript akan dirayapi juga.
Anda juga dapat menggunakan salah satu disk sistem file yang tersedia untuk menulis peta situs.
SitemapGenerator:: create ( ' https://example.com ' )-> getSitemap ()-> writeToDisk ( ' public ' , ' sitemap.xml ' );
Anda mungkin perlu mengatur visibilitas file di salah satu peta situs Anda. Misalnya, jika Anda menulis peta situs ke S3 yang ingin tersedia untuk umum. Anda dapat mengatur parameter ketiga ke true
untuk menjadikannya publik. Catatan: Ini hanya dapat digunakan pada metode ->writeToDisk()
.
SitemapGenerator:: create ( ' https://example.com ' )-> getSitemap ()-> writeToDisk ( ' public ' , ' sitemap.xml ' , true );
Anda juga dapat menambahkan model Anda secara langsung dengan mengimplementasikan antarmuka 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 );
}
}
Sekarang Anda dapat menambahkan satu model postingan ke peta situs atau bahkan seluruh koleksi.
use Spatie Sitemap Sitemap ;
Sitemap:: create ()
-> add ( $ post )
-> add (Post:: all ());
Dengan cara ini Anda dapat menambahkan semua halaman Anda dengan sangat cepat tanpa perlu meng-crawl semuanya.
Kami menginvestasikan banyak sumber daya untuk menciptakan paket sumber terbuka terbaik di kelasnya. Anda dapat mendukung kami dengan membeli salah satu produk berbayar kami.
Kami sangat menghargai Anda mengirimi kami kartu pos dari kota asal Anda, yang menyebutkan paket kami mana yang Anda gunakan. Anda akan menemukan alamat kami di halaman kontak kami. Kami mempublikasikan semua kartu pos yang diterima di dinding kartu pos virtual kami.
Pertama, instal paket melalui composer:
composer require spatie/laravel-sitemap
Paket akan otomatis mendaftar sendiri.
Jika Anda ingin memperbarui peta situs secara otomatis dan sering, Anda perlu melakukan beberapa langkah tambahan.
Anda dapat mengganti opsi default untuk crawler. Pertama publikasikan konfigurasinya:
php artisan vendor:publish --provider= " SpatieSitemapSitemapServiceProvider " --tag=sitemap-config
Ini akan menyalin konfigurasi default ke config/sitemap.php
tempat Anda dapat mengeditnya.
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,
];
Cara termudah adalah dengan merayapi domain tertentu dan membuat peta situs dengan semua tautan yang ditemukan. Tujuan peta situs harus ditentukan oleh $path
.
SitemapGenerator:: create ( ' https://example.com ' )-> writeToFile ( $ path );
Peta situs yang dihasilkan akan terlihat seperti ini:
<? 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 >
Anda dapat membuat profil perayapan khusus dengan mengimplementasikan antarmuka SpatieCrawlerCrawlProfilesCrawlProfile
dan dengan menyesuaikan metode shouldCrawl()
untuk kontrol penuh atas url/domain/subdomain yang harus dirayapi:
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 () === ' / ' ;
}
}
dan daftarkan CustomCrawlProfile::class
Anda di 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 ,
];
Untuk mengubah lastmod
, changefreq
dan priority
halaman kontak:
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 );
Jika Anda tidak ingin tautan yang dirayapi muncul di peta situs, jangan kembalikan tautan tersebut di callable yang Anda teruskan ke 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 );
Anda juga dapat menginstruksikan crawler yang mendasarinya untuk tidak meng-crawl beberapa halaman dengan meneruskan callable
ke shouldCrawl
.
Catatan: shouldCrawl
hanya akan bekerja dengan Profile
perayapan default atau profil perayapan khusus yang menerapkan metode 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 );
Perayap itu sendiri dapat dikonfigurasi untuk melakukan beberapa hal berbeda.
Anda dapat mengonfigurasi crawler yang digunakan oleh generator peta situs, misalnya: mengabaikan pemeriksaan robot; seperti itu.
SitemapGenerator:: create ( ' http://localhost:4020 ' )
-> configureCrawler ( function ( Crawler $ crawler ) {
$ crawler -> ignoreRobots ();
})
-> writeToFile ( $ file );
Anda dapat membatasi jumlah halaman yang dirayapi dengan memanggil setMaximumCrawlCount
use Spatie Sitemap SitemapGenerator ;
SitemapGenerator:: create ( ' https://example.com ' )
-> setMaximumCrawlCount ( 500 ) // only the 500 first pages will be crawled
. . .
Generator peta situs dapat mengeksekusi JavaScript di setiap halaman sehingga akan menemukan link yang dihasilkan oleh skrip JS Anda. Anda dapat mengaktifkan fitur ini dengan mengatur execute_javascript
di file konfigurasi ke true
.
Di balik terpal, Chrome tanpa kepala digunakan untuk mengeksekusi JavaScript. Berikut beberapa petunjuk tentang cara menginstalnya di sistem Anda.
Paket ini akan membuat tebakan di mana Chrome diinstal pada sistem Anda. Anda juga dapat meneruskan lokasi biner Chrome secara manual ke executeJavaScript()
.
Anda dapat menambahkan tautan ke peta situs secara manual:
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 );
Situs multibahasa mungkin memiliki beberapa versi alternatif dari halaman yang sama (satu versi per bahasa). Berdasarkan contoh sebelumnya penambahan alternatif dapat dilakukan sebagai berikut:
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 );
Perhatikan fungsi addAlternate
yang mengambil URL alternatif dan lokasi tempatnya.
Url juga bisa memiliki gambar. Lihat juga 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 );
Selain gambar, video juga bisa dibungkus dengan tag URL. Lihat https://developers.google.com/search/docs/crawling-indexing/sitemaps/video-sitemaps
Anda dapat mengatur atribut yang diperlukan seperti:
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 );
Jika Anda ingin meneruskan parameter opsional seperti family_friendly
, live
, atau 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 );
Anda juga dapat membuat peta situs sepenuhnya manual:
use Carbon Carbon ;
Sitemap:: create ()
-> add ( ' /page1 ' )
-> add ( ' /page2 ' )
-> add (Url:: create ( ' /page3 ' )-> setLastModificationDate (Carbon:: create ( ' 2016 ' , ' 1 ' , ' 1 ' )))
-> writeToFile ( $ sitemapPath );
Anda dapat membuat indeks peta situs:
use Spatie Sitemap SitemapIndex ;
SitemapIndex:: create ()
-> add ( ' /pages_sitemap.xml ' )
-> add ( ' /posts_sitemap.xml ' )
-> writeToFile ( $ sitemapIndexPath );
Anda dapat meneruskan objek SpatieSitemapTagsSitemap
untuk menyetel properti lastModificationDate
secara manual.
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 );
indeks peta situs yang dihasilkan akan terlihat seperti ini:
<? 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 >
Anda dapat memanggil metode maxTagsPerSitemap
untuk menghasilkan peta situs yang hanya berisi jumlah tag tertentu
use Spatie Sitemap SitemapGenerator ;
SitemapGenerator:: create ( ' https://example.com ' )
-> maxTagsPerSitemap ( 20000 )
-> writeToFile ( public_path ( ' sitemap.xml ' ));
Situs Anda mungkin akan diperbarui dari waktu ke waktu. Agar peta situs Anda mencerminkan perubahan ini, Anda dapat menjalankan generator secara berkala. Cara termudah untuk melakukan ini adalah dengan memanfaatkan kemampuan penjadwalan default Laravel.
Anda dapat mengatur perintah artisan seperti ini:
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 ' ));
}
}
Perintah itu kemudian harus dijadwalkan di kernel konsol.
// app / Console / Kernel . php
protected function schedule ( Schedule $ schedule )
{
. . .
$ schedule -> command ( ' sitemap:generate ' )-> daily ();
. . .
}
Silakan lihat CHANGELOG untuk informasi lebih lanjut tentang apa yang berubah baru-baru ini.
Pertama mulai server pengujian dalam sesi terminal terpisah:
cd tests/server
./start_server.sh
Dengan server berjalan, Anda dapat menjalankan tes:
$ composer test
Silakan lihat KONTRIBUSI untuk rinciannya.
Jika Anda menemukan bug terkait keamanan, silakan kirim email ke [email protected] alih-alih menggunakan pelacak masalah.
Spatie adalah agen desain web yang berbasis di Antwerpen, Belgia. Anda akan menemukan ikhtisar semua proyek sumber terbuka kami di situs web kami.
Apakah bisnis Anda bergantung pada kontribusi kami? Jangkau dan dukung kami di Patreon. Semua janji akan didedikasikan untuk mengalokasikan tenaga kerja pada pemeliharaan dan hal-hal baru yang mengagumkan.
Lisensi MIT (MIT). Silakan lihat File Lisensi untuk informasi lebih lanjut.