본문 바로가기
← 패키지 목록

Laravel Sitemap

spatie/laravel-sitemap

제출자 Laravel Korea Discovery Bot
최신 v8.2.0라이센스 MIT배포 2026년 10월 24일
검색

사이트맵을 손쉽게 만들고 생성하세요

사이트맵을 손쉽게 생성하기

Latest Version on Packagist Software License Test Status Code Style Status PHPStan Total Downloads

이 패키지는 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())) ->add(...) ->writeToFile($path);

또는 사이트맵을 먼저 생성한 뒤 링크를 추가하는 방식으로 두 가지 장점을 모두 취할 수도 있습니다.

use Spatie\Sitemap\SitemapGenerator; use Spatie\Sitemap\Tags\Url; SitemapGenerator::create('https://example.com') ->getSitemap() ->add(Url::create('/extra-page') ->setLastModificationDate(Carbon::yesterday())) ->add(...) ->writeToFile($path);

크롤링 결과를 여러 사이트맵으로 나누기

크롤링한 URL을 여러 개의 사이트맵 파일로 나누고 싶을 때가 있습니다(예: 블로그용 하나, 나머지 사이트용 하나). 이렇게 하면 Google Search Console에서 섹션별 색인 현황을 추적하기가 더 쉬워집니다.

writeToFile에 클로저를 전달하세요. 클로저는 각 Url을 받아, 해당 URL이 들어갈 파일의 경로를 반환합니다.

use Spatie\Sitemap\SitemapGenerator; use Spatie\Sitemap\Tags\Url; SitemapGenerator::create('https://example.com') ->writeToFile(fn (Url $url) => str_starts_with($url->path(), '/blog') ? public_path('sitemap-blog.xml') : public_path('sitemap-pages.xml'));

클로저에서 null을 반환하면 해당 URL은 어떤 사이트맵에도 포함되지 않습니다.

기본적으로 사이트맵 인덱스는 작성되지 않습니다. sitemapIndexPath를 호출하면 작성된 각 사이트맵을 참조하는 인덱스도 함께 생성됩니다.

SitemapGenerator::create('https://example.com') ->sitemapIndexPath(public_path('sitemap.xml')) ->writeToFile(fn (Url $url) => str_starts_with($url->path(), '/blog') ? public_path('sitemap-blog.xml') : public_path('sitemap-pages.xml'));

이 방식을 maxTagsPerSitemap()과 함께 사용하면, 한도를 넘는 그룹은 번호가 붙은 파일(sitemap-blog_0.xml, sitemap-blog_1.xml)로 다시 나뉘고, 각 파일이 인덱스에 등록됩니다.

Sitemapable 인터페이스를 구현하면 모델을 사이트맵에 직접 추가할 수도 있습니다.

use Spatie\Sitemap\Contracts\Sitemapable; use Spatie\Sitemap\Tags\Url; class Post extends Model implements Sitemapable { public function toSitemapTag(): Url | string | array { return route('blog.post.show', $this); } }

후원하기

Spatie는 최고 수준의 오픈 소스 패키지를 만드는 데 많은 자원을 투자하고 있습니다. 유료 제품 중 하나를 구매해 주시면 큰 힘이 됩니다.

사용 중인 패키지를 알려 주며 고향에서 보낸 엽서를 보내 주시면 매우 감사하겠습니다. 주소는 문의 페이지에서 확인할 수 있습니다. 받은 모든 엽서는 온라인 엽서 월에 게시합니다.

문서

모든 문서는 공식 문서 사이트에서 볼 수 있습니다.

테스트

composer test

변경 내역

최근 변경 사항은 CHANGELOG를 참고하세요.

기여하기

자세한 내용은 CONTRIBUTING을 참고하세요.

보안

보안 관련 버그를 발견하셨다면 이슈 트래커 대신 security@spatie.be로 메일을 보내 주세요.

크레딧

라이선스

MIT 라이선스(MIT)를 따릅니다. 자세한 내용은 라이선스 파일을 참고하세요.