이 패키지는 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
인터페이스를 구현하고 크롤링해야 하는 URL/도메인/하위 도메인을 완전히 제어하기 위해 shouldCrawl()
메서드를 사용자 정의하여 사용자 정의 크롤링 프로필을 만들 수 있습니다.
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 () === ' / ' ;
}
}
config/sitemap.php
에 CustomCrawlProfile::class
등록하세요.
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 );
shouldCrawl
에 callable
항목을 전달하여 기본 크롤러가 일부 페이지를 크롤링하지 않도록 지시할 수도 있습니다.
참고: 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 );
대체 URL과 해당 URL이 속한 로캘을 가져오는 addAlternate
함수에 유의하세요.
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의 기본 스케줄링 기능을 활용하는 것입니다.
다음과 같이 artisan 명령을 설정할 수 있습니다.
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
자세한 내용은 CONTRIBUTING을 참조하세요.
보안 관련 버그를 발견한 경우 이슈 트래커를 사용하는 대신 [email protected]로 메일을 보내주세요.
Spatie는 벨기에 앤트워프에 본사를 둔 웹 디자인 에이전시입니다. 당사 웹사이트에서 당사의 모든 오픈 소스 프로젝트에 대한 개요를 확인할 수 있습니다.
귀하의 사업은 우리의 기여에 달려 있습니까? Patreon에서 연락하고 지원해 주세요. 모든 서약은 유지 관리 및 새로운 멋진 기능에 인력을 할당하는 데 전념할 것입니다.
MIT 라이센스(MIT). 자세한 내용은 라이센스 파일을 참조하십시오.