แพ็คเกจนี้สามารถสร้างแผนผังไซต์โดยที่คุณไม่จำเป็นต้องเพิ่ม URL ด้วยตนเอง ใช้งานได้โดยการรวบรวมข้อมูลทั้งไซต์ของคุณ
use Spatie Sitemap SitemapGenerator ;
SitemapGenerator:: create ( ' https://example.com ' )-> writeToFile ( $ path );
คุณยังสามารถสร้างแผนผังไซต์ของคุณได้ด้วยตนเอง:
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 );
หรือคุณสามารถมีสิ่งที่ดีที่สุดจากทั้งสองโลกโดยสร้างแผนผังเว็บไซต์แล้วเพิ่มลิงก์เพิ่มเติมเข้าไป:
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 );
คุณยังสามารถควบคุมความลึกสูงสุดของแผนผังไซต์ได้:
SitemapGenerator:: create ( ' https://example.com ' )
-> configureCrawler ( function ( Crawler $ crawler ) {
$ crawler -> setMaximumDepth ( 3 );
})
-> writeToFile ( $ path );
เครื่องกำเนิดไฟฟ้ามีความสามารถในการรัน JavaScript ในแต่ละหน้า ดังนั้นลิงก์ที่ JavaScript แทรกเข้าไปใน Dom ก็จะถูกรวบรวมข้อมูลเช่นกัน
คุณยังสามารถใช้ดิสก์ระบบไฟล์ที่มีอยู่เพื่อเขียนแผนผังไซต์ได้
SitemapGenerator:: create ( ' https://example.com ' )-> getSitemap ()-> writeToDisk ( ' public ' , ' sitemap.xml ' );
คุณอาจต้องตั้งค่าการเปิดเผยไฟล์บนแผนผังไซต์รายการใดรายการหนึ่งของคุณ ตัวอย่างเช่น หากคุณกำลังเขียนแผนผังเว็บไซต์ไปยัง S3 ที่คุณต้องการเปิดเผยต่อสาธารณะ คุณสามารถตั้งค่าพารามิเตอร์ที่สามให้เป็น true
เพื่อทำให้เป็นแบบสาธารณะได้ หมายเหตุ: สามารถใช้กับเมธอด ->writeToDisk()
เท่านั้น
SitemapGenerator:: create ( ' https://example.com ' )-> getSitemap ()-> writeToDisk ( ' public ' , ' sitemap.xml ' , true );
คุณยังสามารถเพิ่มโมเดลของคุณได้โดยตรงโดยใช้อินเทอร์เฟซ 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 );
}
}
ตอนนี้คุณสามารถเพิ่มโมเดลโพสต์เดียวลงในแผนผังไซต์หรือแม้แต่ทั้งคอลเลกชันได้
use Spatie Sitemap Sitemap ;
Sitemap:: create ()
-> add ( $ post )
-> add (Post:: all ());
วิธีนี้ทำให้คุณสามารถเพิ่มหน้าเว็บทั้งหมดของคุณได้อย่างรวดเร็วโดยไม่จำเป็นต้องรวบรวมข้อมูลทั้งหมด
เราลงทุนทรัพยากรจำนวนมากเพื่อสร้างแพ็คเกจโอเพ่นซอร์สที่ดีที่สุดในระดับเดียวกัน คุณสามารถสนับสนุนเราได้โดยการซื้อหนึ่งในผลิตภัณฑ์ที่ต้องชำระเงินของเรา
เราขอขอบคุณอย่างยิ่งที่คุณส่งโปสการ์ดจากบ้านเกิดของคุณถึงเรา โดยระบุว่าคุณใช้แพ็คเกจใดของเรา คุณจะพบที่อยู่ของเราในหน้าติดต่อของเรา เราเผยแพร่โปสการ์ดที่ได้รับทั้งหมดบนวอลล์โปสการ์ดเสมือนของเรา
ขั้นแรก ให้ติดตั้งแพ็คเกจผ่านทางผู้แต่ง:
composer require spatie/laravel-sitemap
แพ็คเกจจะลงทะเบียนเองโดยอัตโนมัติ
หากคุณต้องการอัปเดตแผนผังเว็บไซต์โดยอัตโนมัติและบ่อยครั้ง คุณต้องดำเนินการขั้นตอนเพิ่มเติมบางอย่าง
คุณสามารถแทนที่ตัวเลือกเริ่มต้นสำหรับโปรแกรมรวบรวมข้อมูลได้ เผยแพร่การกำหนดค่าก่อน:
php artisan vendor:publish --provider= " SpatieSitemapSitemapServiceProvider " --tag=sitemap-config
นี่จะคัดลอกการกำหนดค่าเริ่มต้นไปที่ config/sitemap.php
ซึ่งคุณสามารถแก้ไขได้
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,
];
วิธีที่ง่ายที่สุดคือการรวบรวมข้อมูลโดเมนที่กำหนดและสร้างแผนผังไซต์พร้อมลิงก์ที่พบทั้งหมด ปลายทางของแผนผังเว็บไซต์ควรระบุโดย $path
SitemapGenerator:: create ( ' https://example.com ' )-> writeToFile ( $ path );
แผนผังเว็บไซต์ที่สร้างขึ้นจะมีลักษณะคล้ายกับสิ่งนี้:
<? 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 >
คุณสามารถสร้างโปรไฟล์การรวบรวมข้อมูลที่กำหนดเองได้โดยใช้อินเทอร์เฟซ SpatieCrawlerCrawlProfilesCrawlProfile
และโดยการปรับแต่งเมธอด shouldCrawl()
เพื่อควบคุมเต็มรูปแบบว่า URL/โดเมน/โดเมนย่อยใดที่ควรรวบรวมข้อมูล:
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 () === ' / ' ;
}
}
และลงทะเบียน CustomCrawlProfile::class
ของคุณใน 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 ,
];
หากต้องการเปลี่ยน lastmod
, changefreq
และ priority
ของหน้าผู้ติดต่อ:
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 );
หากคุณไม่ต้องการให้ลิงก์ที่รวบรวมข้อมูลปรากฏในแผนผังไซต์ ก็อย่าส่งคืนลิงก์นั้นในสายที่คุณส่งไปยัง 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 );
คุณยังสามารถสั่งให้โปรแกรมรวบรวมข้อมูลพื้นฐานไม่รวบรวมข้อมูลบางหน้าโดยส่งสิ่ง callable
ไปที่ shouldCrawl
หมายเหตุ: shouldCrawl
จะใช้งานได้เฉพาะกับ Profile
การรวบรวมข้อมูลเริ่มต้นหรือโปรไฟล์การรวบรวมข้อมูลแบบกำหนดเองที่ใช้เมธอด 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 );
โปรแกรมรวบรวมข้อมูลสามารถกำหนดค่าให้ทำสิ่งต่างๆ สองสามอย่างได้
คุณสามารถกำหนดค่าโปรแกรมรวบรวมข้อมูลที่ใช้โดยเครื่องมือสร้างแผนผังเว็บไซต์ได้ เช่น เพื่อละเว้นการตรวจสอบโรบอต เช่นนั้น
SitemapGenerator:: create ( ' http://localhost:4020 ' )
-> configureCrawler ( function ( Crawler $ crawler ) {
$ crawler -> ignoreRobots ();
})
-> writeToFile ( $ file );
คุณสามารถจำกัดจำนวนเพจที่รวบรวมข้อมูลได้โดยการเรียก setMaximumCrawlCount
use Spatie Sitemap SitemapGenerator ;
SitemapGenerator:: create ( ' https://example.com ' )
-> setMaximumCrawlCount ( 500 ) // only the 500 first pages will be crawled
. . .
เครื่องมือสร้างแผนผังเว็บไซต์สามารถเรียกใช้ JavaScript ในแต่ละหน้าได้ ดังนั้นจะค้นหาลิงก์ที่สร้างโดยสคริปต์ JS ของคุณ คุณสามารถเปิดใช้งานคุณสมบัตินี้ได้โดยการตั้งค่า execute_javascript
ในไฟล์ปรับแต่งเป็น true
ภายใต้ประทุนนั้น Chrome ที่ไม่มีหัวถูกใช้เพื่อรัน JavaScript ต่อไปนี้คือคำแนะนำบางประการเกี่ยวกับวิธีการติดตั้งลงในระบบของคุณ
แพ็คเกจนี้จะทำการคาดเดาอย่างมีหลักการว่า Chrome ติดตั้งอยู่ที่ใดในระบบของคุณ คุณยังสามารถส่งตำแหน่งของไบนารีของ Chrome เพื่อ executeJavaScript()
ได้ด้วยตนเอง
คุณสามารถเพิ่มลิงก์ไปยังแผนผังเว็บไซต์ได้ด้วยตนเอง:
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 );
ไซต์หลายภาษาอาจมีหน้าเดียวกันหลายเวอร์ชัน (หนึ่งรายการต่อภาษา) จากตัวอย่างก่อนหน้านี้ การเพิ่มทางเลือกอื่นสามารถทำได้ดังนี้:
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 );
สังเกตฟังก์ชัน addAlternate
ซึ่งรับ URL สำรองและตำแหน่งที่ตั้งของ URL นั้น
URL ก็มีรูปภาพได้เช่นกัน ดูเพิ่มเติมที่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 );
นอกจากรูปภาพแล้ว วิดีโอยังสามารถรวมแท็ก URL ได้ด้วย ดูhttps://developers.google.com/search/docs/crawling-indexing/sitemaps/video-sitemaps
คุณสามารถตั้งค่าแอตทริบิวต์ที่จำเป็นได้ดังนี้:
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 );
หากคุณต้องการส่งพารามิเตอร์ทางเลือก เช่น family_friendly
, live
หรือ 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 );
คุณยังสามารถสร้างแผนผังไซต์ด้วยตนเองได้อย่างสมบูรณ์:
use Carbon Carbon ;
Sitemap:: create ()
-> add ( ' /page1 ' )
-> add ( ' /page2 ' )
-> add (Url:: create ( ' /page3 ' )-> setLastModificationDate (Carbon:: create ( ' 2016 ' , ' 1 ' , ' 1 ' )))
-> writeToFile ( $ sitemapPath );
คุณสามารถสร้างดัชนีแผนผังเว็บไซต์ได้:
use Spatie Sitemap SitemapIndex ;
SitemapIndex:: create ()
-> add ( ' /pages_sitemap.xml ' )
-> add ( ' /posts_sitemap.xml ' )
-> writeToFile ( $ sitemapIndexPath );
คุณสามารถส่งออบเจ็กต์ SpatieSitemapTagsSitemap
เพื่อตั้งค่าคุณสมบัติ 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 );
ดัชนีแผนผังเว็บไซต์ที่สร้างขึ้นจะมีลักษณะคล้ายกับสิ่งนี้:
<? 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 >
คุณสามารถเรียกใช้เมธอด maxTagsPerSitemap
เพื่อสร้างแผนผังไซต์ที่มีแท็กตามจำนวนที่กำหนดเท่านั้น
use Spatie Sitemap SitemapGenerator ;
SitemapGenerator:: create ( ' https://example.com ' )
-> maxTagsPerSitemap ( 20000 )
-> writeToFile ( public_path ( ' sitemap.xml ' ));
เว็บไซต์ของคุณอาจจะได้รับการปรับปรุงเป็นครั้งคราว เพื่อให้แผนผังไซต์ของคุณสะท้อนถึงการเปลี่ยนแปลงเหล่านี้ คุณสามารถเรียกใช้ตัวสร้างเป็นระยะๆ วิธีที่ง่ายที่สุดในการทำเช่นนี้คือการใช้ความสามารถในการกำหนดเวลาเริ่มต้นของ Laravel
คุณสามารถตั้งค่าคำสั่งช่างได้เหมือนกับคำสั่งนี้:
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 ' ));
}
}
คำสั่งนั้นควรได้รับการกำหนดเวลาในเคอร์เนลคอนโซล
// app / Console / Kernel . php
protected function schedule ( Schedule $ schedule )
{
. . .
$ schedule -> command ( ' sitemap:generate ' )-> daily ();
. . .
}
โปรดดู CHANGELOG สำหรับข้อมูลเพิ่มเติมว่ามีอะไรเปลี่ยนแปลงเมื่อเร็วๆ นี้
ขั้นแรกให้เริ่มเซิร์ฟเวอร์ทดสอบในเซสชันเทอร์มินัลที่แยกจากกัน:
cd tests/server
./start_server.sh
เมื่อเซิร์ฟเวอร์ทำงาน คุณสามารถดำเนินการทดสอบได้:
$ composer test
โปรดดูการมีส่วนร่วมเพื่อดูรายละเอียด
หากคุณพบข้อบกพร่องเกี่ยวกับการรักษาความปลอดภัย โปรดส่งอีเมลไปที่ [email protected] แทนการใช้ตัวติดตามปัญหา
Spatie เป็นเอเจนซี่ออกแบบเว็บไซต์ที่ตั้งอยู่ในเมืองแอนต์เวิร์ป ประเทศเบลเยียม คุณจะพบภาพรวมของโครงการโอเพ่นซอร์สทั้งหมดของเราบนเว็บไซต์ของเรา
ธุรกิจของคุณขึ้นอยู่กับการมีส่วนร่วมของเราหรือไม่? ติดต่อและสนับสนุนเราได้ที่ Patreon คำมั่นสัญญาทั้งหมดจะทุ่มเทให้กับการจัดสรรบุคลากรด้านการบำรุงรักษาและสิ่งใหม่ๆ ที่ยอดเยี่ยม
ใบอนุญาตเอ็มไอที (MIT) โปรดดูไฟล์ใบอนุญาตสำหรับข้อมูลเพิ่มเติม